@@ -337,6 +337,84 @@ describe('ShadowsocksManagerService', () => {
337
337
} ;
338
338
service . createNewAccessKey ( { params : { method : 'aes-256-gcm' } } , res , done ) ;
339
339
} ) ;
340
+ it ( 'use default name is params is not defined' , ( done ) => {
341
+ const repo = getAccessKeyRepository ( ) ;
342
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
343
+
344
+ const res = {
345
+ send : ( httpCode , data ) => {
346
+ expect ( httpCode ) . toEqual ( 201 ) ;
347
+ expect ( data . name ) . toEqual ( '' ) ;
348
+ responseProcessed = true ; // required for afterEach to pass.
349
+ } ,
350
+ } ;
351
+ service . createNewAccessKey ( { params : { } } , res , done ) ;
352
+ } ) ;
353
+ it ( 'rejects non-string name' , ( done ) => {
354
+ const repo = getAccessKeyRepository ( ) ;
355
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
356
+
357
+ const res = { send : ( _httpCode , _data ) => { } } ;
358
+ service . createNewAccessKey ( { params : { name : Number ( '9876' ) } } , res , ( error ) => {
359
+ expect ( error . statusCode ) . toEqual ( 400 ) ;
360
+ responseProcessed = true ; // required for afterEach to pass.
361
+ done ( ) ;
362
+ } ) ;
363
+ } ) ;
364
+ it ( 'defined name is equal to stored' , ( done ) => {
365
+ const repo = getAccessKeyRepository ( ) ;
366
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
367
+
368
+ const ACCESSKEY_NAME = 'accesskeyname' ;
369
+ const res = {
370
+ send : ( httpCode , data ) => {
371
+ expect ( httpCode ) . toEqual ( 201 ) ;
372
+ expect ( data . name ) . toEqual ( ACCESSKEY_NAME ) ;
373
+ responseProcessed = true ; // required for afterEach to pass.
374
+ } ,
375
+ } ;
376
+ service . createNewAccessKey ( { params : { name : ACCESSKEY_NAME } } , res , done ) ;
377
+ } ) ;
378
+ it ( 'limit can be undefined' , ( done ) => {
379
+ const repo = getAccessKeyRepository ( ) ;
380
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
381
+
382
+ const res = {
383
+ send : ( httpCode , data ) => {
384
+ expect ( httpCode ) . toEqual ( 201 ) ;
385
+ expect ( data . limit ) . toBeUndefined ( ) ;
386
+ responseProcessed = true ; // required for afterEach to pass.
387
+ } ,
388
+ } ;
389
+ service . createNewAccessKey ( { params : { } } , res , done ) ;
390
+ } ) ;
391
+ it ( 'rejects non-numeric limits' , ( done ) => {
392
+ const repo = getAccessKeyRepository ( ) ;
393
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
394
+
395
+ const ACCESSKEY_LIMIT = { bytes : '9876' } ;
396
+
397
+ const res = { send : ( _httpCode , _data ) => { } } ;
398
+ service . createNewAccessKey ( { params : { limit : ACCESSKEY_LIMIT } } , res , ( error ) => {
399
+ expect ( error . statusCode ) . toEqual ( 400 ) ;
400
+ responseProcessed = true ; // required for afterEach to pass.
401
+ done ( ) ;
402
+ } ) ;
403
+ } ) ;
404
+ it ( 'defined limit is equal to stored' , ( done ) => {
405
+ const repo = getAccessKeyRepository ( ) ;
406
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
407
+
408
+ const ACCESSKEY_LIMIT = { bytes : 9876 } ;
409
+ const res = {
410
+ send : ( httpCode , data ) => {
411
+ expect ( httpCode ) . toEqual ( 201 ) ;
412
+ expect ( data . dataLimit ) . toEqual ( ACCESSKEY_LIMIT ) ;
413
+ responseProcessed = true ; // required for afterEach to pass.
414
+ } ,
415
+ } ;
416
+ service . createNewAccessKey ( { params : { limit : ACCESSKEY_LIMIT } } , res , done ) ;
417
+ } ) ;
340
418
it ( 'method must be of type string' , ( done ) => {
341
419
const repo = getAccessKeyRepository ( ) ;
342
420
const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
@@ -371,6 +449,47 @@ describe('ShadowsocksManagerService', () => {
371
449
done ( ) ;
372
450
} ) ;
373
451
} ) ;
452
+
453
+ it ( 'generates a new password when no password is provided' , async ( done ) => {
454
+ const repo = getAccessKeyRepository ( ) ;
455
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
456
+
457
+ const res = {
458
+ send : ( httpCode , data ) => {
459
+ expect ( httpCode ) . toEqual ( 201 ) ;
460
+ expect ( data . password ) . toBeDefined ( ) ;
461
+ responseProcessed = true ; // required for afterEach to pass.
462
+ } ,
463
+ } ;
464
+ await service . createNewAccessKey ( { params : { } } , res , done ) ;
465
+ } ) ;
466
+
467
+ it ( 'uses the provided password when one is provided' , async ( done ) => {
468
+ const repo = getAccessKeyRepository ( ) ;
469
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
470
+
471
+ const PASSWORD = '8iu8V8EeoFVpwQvQeS9wiD' ;
472
+ const res = {
473
+ send : ( httpCode , data ) => {
474
+ expect ( httpCode ) . toEqual ( 201 ) ;
475
+ expect ( data . password ) . toEqual ( PASSWORD ) ;
476
+ responseProcessed = true ; // required for afterEach to pass.
477
+ } ,
478
+ } ;
479
+ await service . createNewAccessKey ( { params : { password : PASSWORD } } , res , done ) ;
480
+ } ) ;
481
+
482
+ it ( 'rejects a password that is not a string' , async ( done ) => {
483
+ const repo = getAccessKeyRepository ( ) ;
484
+ const service = new ShadowsocksManagerServiceBuilder ( ) . accessKeys ( repo ) . build ( ) ;
485
+ const PASSWORD = Number . MAX_SAFE_INTEGER ;
486
+ const res = { send : SEND_NOTHING } ;
487
+ await service . createNewAccessKey ( { params : { password : PASSWORD } } , res , ( error ) => {
488
+ expect ( error . statusCode ) . toEqual ( 400 ) ;
489
+ responseProcessed = true ; // required for afterEach to pass.
490
+ done ( ) ;
491
+ } ) ;
492
+ } ) ;
374
493
} ) ;
375
494
describe ( 'setPortForNewAccessKeys' , ( ) => {
376
495
it ( 'changes ports for new access keys' , async ( done ) => {
0 commit comments