17
17
18
18
const assert = require ( 'assert' ) ;
19
19
const Client = require ( '../../lib/client.js' ) ;
20
+ const Cloudant = require ( '../../cloudant.js' ) ;
20
21
const nock = require ( '../nock.js' ) ;
21
22
const uuidv4 = require ( 'uuid/v4' ) ; // random
22
23
@@ -31,10 +32,10 @@ const COOKIEAUTH_PLUGIN = [ { cookieauth: { autoRenew: false } } ];
31
32
// mock cookies
32
33
33
34
const MOCK_COOKIE = 'AuthSession=Y2xbZWr0bQlpcc19ZQN8OeU4OWFCNYcZOxgdhy-QRDp4i6JQrfkForX5OU5P' ;
34
- const MOCK_SET_COOKIE_HEADER = { 'set-cookie' : `${ MOCK_COOKIE } ; Version=1; Max-Age=86400 ; Path=/; HttpOnly` } ;
35
+ const MOCK_SET_COOKIE_HEADER = { 'set-cookie' : `${ MOCK_COOKIE } ; Version=1; Max-Age=1 ; Path=/; HttpOnly` } ;
35
36
36
37
const MOCK_COOKIE_2 = 'AuthSession=Q2fbIWc0kQspdc39OQL89eS4PWECcYEZDxgdgy-0RCp2i0dcrDkfoWX7OI5A' ;
37
- const MOCK_SET_COOKIE_HEADER_2 = { 'set-cookie' : `${ MOCK_COOKIE_2 } ; Version=1; Max-Age=86400 ; Path=/; HttpOnly` } ;
38
+ const MOCK_SET_COOKIE_HEADER_2 = { 'set-cookie' : `${ MOCK_COOKIE_2 } ; Version=1; Max-Age=1 ; Path=/; HttpOnly` } ;
38
39
39
40
describe ( '#db CookieAuth Plugin' , function ( ) {
40
41
before ( function ( done ) {
@@ -358,5 +359,44 @@ describe('#db CookieAuth Plugin', function() {
358
359
done ( ) ;
359
360
} ) ;
360
361
} ) ;
362
+
363
+ it ( 'pre-emptive renewal outlasts original session' , function ( ) {
364
+ if ( process . env . NOCK_OFF ) {
365
+ this . skip ( ) ;
366
+ }
367
+
368
+ var mocks = nock ( SERVER )
369
+ . post ( '/_session' , { name : ME , password : PASSWORD } )
370
+ . reply ( 200 , { ok : true } , MOCK_SET_COOKIE_HEADER )
371
+ . get ( DBNAME )
372
+ . matchHeader ( 'cookie' , MOCK_COOKIE )
373
+ . reply ( 200 , { doc_count : 0 } )
374
+ // pre-emptive renewals every 500 ms
375
+ . post ( '/_session' , { name : ME , password : PASSWORD } )
376
+ . times ( 2 )
377
+ . reply ( 200 , { ok : true } , MOCK_SET_COOKIE_HEADER_2 )
378
+ . get ( DBNAME )
379
+ . matchHeader ( 'cookie' , MOCK_COOKIE_2 )
380
+ . reply ( 200 , { doc_count : 0 } ) ;
381
+
382
+ var cloudantClient = new Cloudant ( {
383
+ url : SERVER ,
384
+ username : ME ,
385
+ password : PASSWORD ,
386
+ maxAttempt : 1
387
+ // Note using default cookieauth plugin
388
+ } ) ;
389
+ return cloudantClient . db . get ( DBNAME . substring ( 1 ) ) /* Remove leading slash */
390
+ . then ( ( ) => {
391
+ // Wait long enough for a pre-emptive renewal and orignal session to lapse
392
+ return new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
393
+ } )
394
+ . then ( ( ) => {
395
+ return cloudantClient . db . get ( DBNAME . substring ( 1 ) ) ;
396
+ } )
397
+ . finally ( ( ) => {
398
+ mocks . done ( ) ;
399
+ } ) ;
400
+ } ) ;
361
401
} ) ;
362
402
} ) ;
0 commit comments