@@ -540,3 +540,136 @@ func Test_concurrentCache_Set_Fetch_Failure(t *testing.T) {
540540		}
541541	}
542542}
543+ 
544+ func  Test_hostCache (t  * testing.T ) {
545+ 	base  :=  NewCache ()
546+ 
547+ 	// no entry in the cache 
548+ 	ctx  :=  context .Background ()
549+ 
550+ 	hc  :=  hostCache {base }
551+ 
552+ 	fetch  :=  func (i  int ) func (context.Context ) (string , error ) {
553+ 		return  func (context.Context ) (string , error ) {
554+ 			return  strconv .Itoa (i ), nil 
555+ 		}
556+ 	}
557+ 
558+ 	// The key is ignored in the hostCache implementation. 
559+ 
560+ 	{ // Set the token to 100 
561+ 		gotToken , err  :=  hc .Set (ctx , "reg.example.com" , SchemeBearer , "key1" , fetch (100 ))
562+ 		if  err  !=  nil  {
563+ 			t .Fatalf ("hostCache.Set() error = %v" , err )
564+ 		}
565+ 		if  want  :=  strconv .Itoa (100 ); gotToken  !=  want  {
566+ 			t .Errorf ("hostCache.Set() = %v, want %v" , gotToken , want )
567+ 		}
568+ 	}
569+ 
570+ 	{ // Overwrite the token entry to 101 
571+ 		gotToken , err  :=  hc .Set (ctx , "reg.example.com" , SchemeBearer , "key2" , fetch (101 ))
572+ 		if  err  !=  nil  {
573+ 			t .Fatalf ("hostCache.Set() error = %v" , err )
574+ 		}
575+ 		if  want  :=  strconv .Itoa (101 ); gotToken  !=  want  {
576+ 			t .Errorf ("hostCache.Set() = %v, want %v" , gotToken , want )
577+ 		}
578+ 	}
579+ 
580+ 	{ // Add entry for another host 
581+ 		gotToken , err  :=  hc .Set (ctx , "reg2.example.com" , SchemeBearer , "key3" , fetch (102 ))
582+ 		if  err  !=  nil  {
583+ 			t .Fatalf ("hostCache.Set() error = %v" , err )
584+ 		}
585+ 		if  want  :=  strconv .Itoa (102 ); gotToken  !=  want  {
586+ 			t .Errorf ("hostCache.Set() = %v, want %v" , gotToken , want )
587+ 		}
588+ 	}
589+ 
590+ 	{ // Ensure the token for key1 is 101 now 
591+ 		gotToken , err  :=  hc .GetToken (ctx , "reg.example.com" , SchemeBearer , "key1" )
592+ 		if  err  !=  nil  {
593+ 			t .Fatalf ("hostCache.GetToken() error = %v" , err )
594+ 		}
595+ 		if  want  :=  strconv .Itoa (101 ); gotToken  !=  want  {
596+ 			t .Errorf ("hostCache.GetToken() = %v, want %v" , gotToken , want )
597+ 		}
598+ 	}
599+ 
600+ 	{ // Make sure GetScheme still works 
601+ 		gotScheme , err  :=  hc .GetScheme (ctx , "reg.example.com" )
602+ 		if  err  !=  nil  {
603+ 			t .Fatalf ("hostCache.GetScheme() error = %v" , err )
604+ 		}
605+ 		if  want  :=  SchemeBearer ; gotScheme  !=  want  {
606+ 			t .Errorf ("hostCache.GetScheme() = %v, want %v" , gotScheme , want )
607+ 		}
608+ 	}
609+ }
610+ 
611+ func  Test_fallbackCache (t  * testing.T ) {
612+ 	// no entry in the cache 
613+ 	ctx  :=  context .Background ()
614+ 
615+ 	scc  :=  NewSingleContextCache ()
616+ 
617+ 	fetch  :=  func (i  int ) func (context.Context ) (string , error ) {
618+ 		return  func (context.Context ) (string , error ) {
619+ 			return  strconv .Itoa (i ), nil 
620+ 		}
621+ 	}
622+ 
623+ 	// Test that fallback works 
624+ 
625+ 	{ // Set the token to 100 
626+ 		gotToken , err  :=  scc .Set (ctx , "reg.example.com" , SchemeBearer , "key1" , fetch (100 ))
627+ 		if  err  !=  nil  {
628+ 			t .Fatalf ("hostCache.Set() error = %v" , err )
629+ 		}
630+ 		if  want  :=  strconv .Itoa (100 ); gotToken  !=  want  {
631+ 			t .Errorf ("hostCache.Set() = %v, want %v" , gotToken , want )
632+ 		}
633+ 	}
634+ 
635+ 	{ // Ensure the token for key2 falls back to 100 
636+ 		gotToken , err  :=  scc .GetToken (ctx , "reg.example.com" , SchemeBearer , "key2" )
637+ 		if  err  !=  nil  {
638+ 			t .Fatalf ("hostCache.GetToken() error = %v" , err )
639+ 		}
640+ 		if  want  :=  strconv .Itoa (100 ); gotToken  !=  want  {
641+ 			t .Errorf ("hostCache.GetToken() = %v, want %v" , gotToken , want )
642+ 		}
643+ 	}
644+ 
645+ 	{ // Make sure GetScheme works as expected 
646+ 		gotScheme , err  :=  scc .GetScheme (ctx , "reg.example.com" )
647+ 		if  err  !=  nil  {
648+ 			t .Fatalf ("hostCache.GetScheme() error = %v" , err )
649+ 		}
650+ 		if  want  :=  SchemeBearer ; gotScheme  !=  want  {
651+ 			t .Errorf ("hostCache.GetScheme() = %v, want %v" , gotScheme , want )
652+ 		}
653+ 	}
654+ 
655+ 	{ // Make sure GetScheme falls back 
656+ 		gotScheme , err  :=  scc .GetScheme (ctx , "reg.example.com" )
657+ 		if  err  !=  nil  {
658+ 			t .Fatalf ("hostCache.GetScheme() error = %v" , err )
659+ 		}
660+ 		if  want  :=  SchemeBearer ; gotScheme  !=  want  {
661+ 			t .Errorf ("hostCache.GetScheme() = %v, want %v" , gotScheme , want )
662+ 		}
663+ 	}
664+ 
665+ 	{ // Check GetScheme fallback 
666+ 		// scc.(*fallbackCache).primary = NewCache() 
667+ 		gotScheme , err  :=  scc .GetScheme (ctx , "reg2.example.com" )
668+ 		if  ! errors .Is (err , errdef .ErrNotFound ) {
669+ 			t .Fatalf ("hostCache.GetScheme() error = %v" , err )
670+ 		}
671+ 		if  want  :=  SchemeUnknown ; gotScheme  !=  want  {
672+ 			t .Errorf ("hostCache.GetScheme() = %v, want %v" , gotScheme , want )
673+ 		}
674+ 	}
675+ }
0 commit comments