@@ -23,6 +23,7 @@ interface Row {
2323 nChallengeInterest : number ;
2424 lostChallengeData ?: readonly number [ ] ;
2525 clientError ?: unknown ;
26+ serverCleared ?: boolean ;
2627}
2728
2829function makePinChallengeWithWrongInputs ( nWrongInputs = 0 ) : Row [ "makeChallengeLists" ] {
@@ -130,14 +131,16 @@ const TABLE: Row[] = [
130131 nChallengeInterest : 2 ,
131132 } ,
132133 {
133- summary : "pin, success with 1 Data loss" ,
134+ summary : "pin, success after 1 Data loss" ,
134135 makeChallengeLists : makePinChallengeWithWrongInputs ( 0 ) ,
135136 nChallengeInterest : 3 ,
136137 lostChallengeData : [ 1 ] ,
137- clientError : "3: BadSignature" ,
138- // XXX This test case should have succeeded but is presently an "expected failure", caused by:
139- // During the CHALLENGE step, I2's SigNonce is saved by server but D2 is lost in network.
140- // When client retransmits I2, the server would detect a duplicate SigNonce and reject the Interest.
138+ } ,
139+ {
140+ summary : "pin, success after 1 wrong input and 1 Data loss" ,
141+ makeChallengeLists : makePinChallengeWithWrongInputs ( 1 ) ,
142+ nChallengeInterest : 4 ,
143+ lostChallengeData : [ 2 ] ,
141144 } ,
142145 {
143146 summary : "pin, success after 2 wrong inputs" ,
@@ -219,7 +222,10 @@ const TABLE: Row[] = [
219222 {
220223 summary : "email, with IMAP" ,
221224 async makeChallengeLists ( ) {
222- const debugEnabled = process . env . NDNCERT_IMAP_DEBUG === "1" ;
225+ if ( process . env . NDNTS_IMAP_DEBUG === "2" ) {
226+ throw new Error ( "IMAP test skipped via environ" ) ;
227+ }
228+ const debugEnabled = process . env . NDNTS_IMAP_DEBUG === "1" ;
223229 const { user, pass, smtp, imap, web } = await createEmailAccount ( ) ;
224230 if ( debugEnabled ) {
225231 console . log ( "nodemail test account:" , web , user , pass ) ;
@@ -377,8 +383,8 @@ const TABLE: Row[] = [
377383 } ) ] ,
378384 ] ;
379385 } ,
380- nChallengeInterest : 2 ,
381- clientError : "wrong-record " ,
386+ nChallengeInterest : 4 ,
387+ clientError : "7: OutOfTries " ,
382388 } ,
383389 {
384390 summary : "server challenge not acceptable on client" ,
@@ -390,6 +396,7 @@ const TABLE: Row[] = [
390396 } ,
391397 nChallengeInterest : 0 ,
392398 clientError : "no acceptable challenge" ,
399+ serverCleared : false ,
393400 } ,
394401] ;
395402
@@ -454,13 +461,13 @@ beforeEach(async () => {
454461 } ;
455462} ) ;
456463
457- function startServer ( serverOpts : Partial < ServerOptions > = { } , bridgeOpts : Bridge . CreateOptions & { bridge ?: Bridge } = { } ) {
464+ async function startServer ( serverOpts : Partial < ServerOptions > = { } , bridgeOpts : Bridge . CreateOptions & { bridge ?: Bridge } = { } ) {
458465 const bridge = bridgeOpts . bridge ?? Bridge . create ( {
459466 fwA : Forwarder . getDefault ( ) ,
460467 routesAB : [ "/fh" , "/authority/CA" , "/sub/CA" ] ,
461468 ...bridgeOpts ,
462469 } ) ;
463- const server = Server . create ( {
470+ const server = await Server . create ( {
464471 pOpts : { fw : bridge . fwB } ,
465472 profile : caProfile ,
466473 repo,
@@ -480,7 +487,7 @@ function checkCaProfile(retrieved: CaProfile, expected: CaProfile, stringContain
480487}
481488
482489test ( "INFO command" , async ( ) => {
483- startServer ( ) ;
490+ await startServer ( ) ;
484491
485492 const retrieved = await retrieveCaProfile ( {
486493 caPrefix : new Name ( "/authority" ) ,
@@ -497,7 +504,7 @@ test("INFO command", async () => {
497504} ) ;
498505
499506test ( "unsupported or malformed commands" , async ( ) => {
500- startServer ( ) ;
507+ await startServer ( ) ;
501508
502509 const [ probeErr , newErr , challengeErr ] = await Promise . all ( [
503510 consume ( "/authority/CA/PROBE" ) ,
@@ -510,7 +517,7 @@ test("unsupported or malformed commands", async () => {
510517} ) ;
511518
512519test ( "probe no result" , async ( ) => {
513- startServer ( { async probe ( ) { return { } ; } } ) ;
520+ await startServer ( { async probe ( ) { return { } ; } } ) ;
514521
515522 await expect ( requestProbe ( {
516523 profile : caProfile ,
@@ -519,7 +526,7 @@ test("probe no result", async () => {
519526} ) ;
520527
521528test ( "probe mismatch" , async ( ) => {
522- startServer ( {
529+ await startServer ( {
523530 async probe ( ) { expect . fail ( "unexpected server probe" ) ; } ,
524531 } ) ;
525532
@@ -531,7 +538,7 @@ test("probe mismatch", async () => {
531538
532539test ( "probe entries and redirects" , async ( ) => {
533540 const subCertFullName = await subCert . data . computeFullName ( ) ;
534- const { bridge } = startServer ( {
541+ const { bridge } = await startServer ( {
535542 async probe ( parameters : ParameterKV ) {
536543 expect ( parameters . uid ) . toEqualUint8Array ( toUtf8 ( "my-uid" ) ) ;
537544 return {
@@ -565,7 +572,7 @@ test("probe entries and redirects", async () => {
565572 } ,
566573 caCertFullName : redirects [ 0 ] ! . caCertFullName ,
567574 } ) ) . rejects . toThrow ( ) ;
568- startServer ( {
575+ await startServer ( {
569576 profile : subProfile ,
570577 signer : subSigner ,
571578 } , { bridge } ) ;
@@ -581,11 +588,12 @@ test.each(TABLE)("challenge $summary", { timeout: 15000 }, async ({
581588 nChallengeInterest,
582589 lostChallengeData,
583590 clientError = false ,
591+ serverCleared = true ,
584592} ) => {
585593 const [ serverChallenges , clientChallenges ] = await makeChallengeLists ( ) ;
586594 const challengePrefix = new Name ( "/authority/CA/CHALLENGE" ) ;
587595 let nSentChallengeInterests = 0 ;
588- startServer ( { challenges : serverChallenges } , {
596+ const { server } = await startServer ( { challenges : serverChallenges } , {
589597 async * relayAB ( it ) {
590598 for await ( const wire of it ) {
591599 const { interest } = Bridge . RelayFunc . extract ( wire ) ;
@@ -620,4 +628,8 @@ test.each(TABLE)("challenge $summary", { timeout: 15000 }, async ({
620628 await expect ( reqPromise ) . rejects . toThrow ( clientError ) ;
621629 }
622630 expect ( nSentChallengeInterests ) . toBe ( nChallengeInterest ) ;
631+
632+ if ( serverCleared ) {
633+ expect ( ( server as any ) . state . size ) . toBe ( 0 ) ;
634+ }
623635} ) ;
0 commit comments