@google-cloud/agones-sdk 1.18.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/spec/agonesSDK.spec.js +65 -26
- package/src/agonesSDK.js +19 -10
package/package.json
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"url": "https://github.com/googleforgames/agones/issues"
|
|
5
5
|
},
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@grpc/grpc-js": "1.
|
|
8
|
-
"google-protobuf": "3.
|
|
7
|
+
"@grpc/grpc-js": "1.5.4",
|
|
8
|
+
"google-protobuf": "3.19.4"
|
|
9
9
|
},
|
|
10
10
|
"description": "Game Server SDK for Agones, the open source project for hosting dedicated game servers on Kubernetes",
|
|
11
11
|
"devDependencies": {
|
|
12
|
-
"eslint": "^
|
|
13
|
-
"jasmine": "^
|
|
12
|
+
"eslint": "^8.8.0",
|
|
13
|
+
"jasmine": "^4.0.2",
|
|
14
14
|
"nyc": "^15.1.0"
|
|
15
15
|
},
|
|
16
16
|
"homepage": "https://agones.dev",
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
|
-
"version": "1.
|
|
29
|
+
"version": "1.25.0"
|
|
30
30
|
}
|
package/spec/agonesSDK.spec.js
CHANGED
|
@@ -152,7 +152,7 @@ describe('AgonesSDK', () => {
|
|
|
152
152
|
|
|
153
153
|
describe('health', () => {
|
|
154
154
|
it('calls the server and passes calls to stream', async () => {
|
|
155
|
-
let stream = jasmine.createSpyObj('stream', ['write']);
|
|
155
|
+
let stream = jasmine.createSpyObj('stream', ['write', 'on']);
|
|
156
156
|
spyOn(agonesSDK.client, 'health').and.callFake(() => {
|
|
157
157
|
return stream;
|
|
158
158
|
});
|
|
@@ -163,7 +163,7 @@ describe('AgonesSDK', () => {
|
|
|
163
163
|
});
|
|
164
164
|
|
|
165
165
|
it('uses the same stream for subsequent calls', async () => {
|
|
166
|
-
let stream = jasmine.createSpyObj('stream', ['write']);
|
|
166
|
+
let stream = jasmine.createSpyObj('stream', ['write', 'on']);
|
|
167
167
|
spyOn(agonesSDK.client, 'health').and.callFake(() => {
|
|
168
168
|
return stream;
|
|
169
169
|
});
|
|
@@ -187,8 +187,55 @@ describe('AgonesSDK', () => {
|
|
|
187
187
|
}
|
|
188
188
|
});
|
|
189
189
|
|
|
190
|
+
it('calls the server and handles stream write error if callback provided', async () => {
|
|
191
|
+
let stream = jasmine.createSpyObj('stream', ['write', 'on']);
|
|
192
|
+
stream.write.and.callFake((chunk, encoding, callback) => {
|
|
193
|
+
callback('error');
|
|
194
|
+
});
|
|
195
|
+
spyOn(agonesSDK.client, 'health').and.callFake(() => {
|
|
196
|
+
return stream;
|
|
197
|
+
});
|
|
198
|
+
try {
|
|
199
|
+
agonesSDK.health((error) => {
|
|
200
|
+
expect(error).toEqual('error');
|
|
201
|
+
});
|
|
202
|
+
} catch (error) {
|
|
203
|
+
fail();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('calls the server and re throws stream write error if no callback', async () => {
|
|
208
|
+
let stream = jasmine.createSpyObj('stream', ['write', 'on']);
|
|
209
|
+
stream.write.and.callFake((chunk, encoding, callback) => {
|
|
210
|
+
callback('error');
|
|
211
|
+
});
|
|
212
|
+
spyOn(agonesSDK.client, 'health').and.callFake(() => {
|
|
213
|
+
return stream;
|
|
214
|
+
});
|
|
215
|
+
try {
|
|
216
|
+
agonesSDK.health();
|
|
217
|
+
fail();
|
|
218
|
+
} catch (error) {
|
|
219
|
+
expect(agonesSDK.client.health).toHaveBeenCalled();
|
|
220
|
+
expect(error).toEqual('error');
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('does not call error callback if there was no stream error', async () => {
|
|
225
|
+
let stream = jasmine.createSpyObj('stream', ['write', 'on']);
|
|
226
|
+
stream.write.and.callFake((chunk, encoding, callback) => {
|
|
227
|
+
callback();
|
|
228
|
+
});
|
|
229
|
+
spyOn(agonesSDK.client, 'health').and.callFake(() => {
|
|
230
|
+
return stream;
|
|
231
|
+
});
|
|
232
|
+
agonesSDK.health(() => {
|
|
233
|
+
fail();
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
|
|
190
237
|
it('calls the server and handles stream completing', async () => {
|
|
191
|
-
let stream = jasmine.createSpyObj('stream', ['write']);
|
|
238
|
+
let stream = jasmine.createSpyObj('stream', ['write', 'on']);
|
|
192
239
|
spyOn(agonesSDK.client, 'health').and.callFake((callback) => {
|
|
193
240
|
let result = new messages.Empty();
|
|
194
241
|
callback(undefined, result);
|
|
@@ -249,35 +296,27 @@ describe('AgonesSDK', () => {
|
|
|
249
296
|
serverStream.emit('data', gameServer);
|
|
250
297
|
|
|
251
298
|
expect(callback).toHaveBeenCalled();
|
|
252
|
-
let
|
|
253
|
-
expect(
|
|
254
|
-
expect(
|
|
299
|
+
let callbackArgs = callback.calls.argsFor(0)[0];
|
|
300
|
+
expect(callbackArgs.status).toBeDefined();
|
|
301
|
+
expect(callbackArgs.status.state).toEqual('up');
|
|
255
302
|
});
|
|
256
|
-
it('
|
|
303
|
+
it('calls the server and passes errors to the optional error callback', async () => {
|
|
257
304
|
let serverStream = stream.Readable({read: () => undefined});
|
|
258
305
|
spyOn(agonesSDK.client, 'watchGameServer').and.callFake(() => {
|
|
259
306
|
return serverStream;
|
|
260
307
|
});
|
|
261
308
|
|
|
262
309
|
let callback = jasmine.createSpy('callback');
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
try {
|
|
274
|
-
serverStream.emit('error', {
|
|
275
|
-
code: grpc.status.ABORTED
|
|
276
|
-
});
|
|
277
|
-
fail();
|
|
278
|
-
} catch (error) {
|
|
279
|
-
expect(error.code).toEqual(grpc.status.ABORTED);
|
|
280
|
-
}
|
|
310
|
+
let errorCallback = jasmine.createSpy('errorCallback');
|
|
311
|
+
agonesSDK.watchGameServer(callback, errorCallback);
|
|
312
|
+
|
|
313
|
+
let error = {
|
|
314
|
+
code: grpc.status.CANCELLED
|
|
315
|
+
};
|
|
316
|
+
serverStream.emit('error', error);
|
|
317
|
+
expect(errorCallback).toHaveBeenCalled();
|
|
318
|
+
let errorCallbackArgs = errorCallback.calls.argsFor(0)[0];
|
|
319
|
+
expect(errorCallbackArgs).toEqual(error);
|
|
281
320
|
});
|
|
282
321
|
});
|
|
283
322
|
|
|
@@ -366,7 +405,7 @@ describe('AgonesSDK', () => {
|
|
|
366
405
|
expect(agonesSDK.client.close).toHaveBeenCalled();
|
|
367
406
|
});
|
|
368
407
|
it('ends the health stream if set', async () => {
|
|
369
|
-
let stream = jasmine.createSpyObj('stream', ['end', 'write']);
|
|
408
|
+
let stream = jasmine.createSpyObj('stream', ['end', 'write', 'on']);
|
|
370
409
|
spyOn(agonesSDK.client, 'health').and.callFake(() => {
|
|
371
410
|
return stream;
|
|
372
411
|
});
|
package/src/agonesSDK.js
CHANGED
|
@@ -93,14 +93,25 @@ class AgonesSDK {
|
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
health() {
|
|
96
|
+
health(errorCallback) {
|
|
97
97
|
if (this.healthStream === undefined) {
|
|
98
98
|
this.healthStream = this.client.health(() => {
|
|
99
99
|
// Ignore error as this can't be caught
|
|
100
100
|
});
|
|
101
|
+
this.healthStream.on('error', () => {
|
|
102
|
+
// ignore error, prevent from being uncaught
|
|
103
|
+
});
|
|
101
104
|
}
|
|
102
105
|
const request = new messages.Empty();
|
|
103
|
-
this.healthStream.write(request)
|
|
106
|
+
this.healthStream.write(request, null, (error) => {
|
|
107
|
+
if (error) {
|
|
108
|
+
if (errorCallback) {
|
|
109
|
+
errorCallback(error);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
104
115
|
}
|
|
105
116
|
|
|
106
117
|
async getGameServer() {
|
|
@@ -116,19 +127,17 @@ class AgonesSDK {
|
|
|
116
127
|
});
|
|
117
128
|
}
|
|
118
129
|
|
|
119
|
-
watchGameServer(callback) {
|
|
130
|
+
watchGameServer(callback, errorCallback) {
|
|
120
131
|
const request = new messages.Empty();
|
|
121
132
|
const stream = this.client.watchGameServer(request);
|
|
122
133
|
stream.on('data', (data) => {
|
|
123
134
|
callback(data.toObject());
|
|
124
135
|
});
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
throw error;
|
|
131
|
-
});
|
|
136
|
+
if (errorCallback) {
|
|
137
|
+
stream.on('error', (error) => {
|
|
138
|
+
errorCallback(error);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
132
141
|
this.streams.push(stream);
|
|
133
142
|
}
|
|
134
143
|
|