@@ -574,4 +574,91 @@ mod tests {
574574 } ,
575575 ) ;
576576 }
577+
578+ /// Tests default values for trusted issuer loader fields when no env vars or JSON.
579+ #[ test]
580+ fn test_trusted_issuer_loader_defaults ( ) {
581+ with_env_vars ( & [ ] , || {
582+ let config = BootstrapConfigRaw :: from_raw_config_and_env ( None ) . unwrap ( ) ;
583+
584+ assert_eq ! (
585+ config. trusted_issuer_loader_type,
586+ TrustedIssuerLoaderTypeRaw :: Sync ,
587+ "Default loader type should be Sync"
588+ ) ;
589+ assert_eq ! (
590+ config. trusted_issuer_loader_workers, 0 ,
591+ "Default worker count should be 0 (will be treated as 1 later)"
592+ ) ;
593+ } ) ;
594+ }
595+
596+ /// Tests that environment variables for trusted issuer loader are parsed correctly.
597+ #[ test]
598+ fn test_trusted_issuer_loader_env_vars ( ) {
599+ with_env_vars (
600+ & [
601+ ( "CEDARLING_TRUSTED_ISSUER_LOADER_TYPE" , "ASYNC" ) ,
602+ ( "CEDARLING_TRUSTED_ISSUER_LOADER_WORKERS" , "5" ) ,
603+ ] ,
604+ || {
605+ let config = BootstrapConfigRaw :: from_raw_config_and_env ( None ) . unwrap ( ) ;
606+
607+ assert_eq ! (
608+ config. trusted_issuer_loader_type,
609+ TrustedIssuerLoaderTypeRaw :: Async ,
610+ "Loader type should be Async from env var"
611+ ) ;
612+ assert_eq ! (
613+ config. trusted_issuer_loader_workers, 5 ,
614+ "Worker count should be 5 from env var"
615+ ) ;
616+ } ,
617+ ) ;
618+ }
619+
620+ /// Tests JSON deserialization for trusted issuer loader fields.
621+ #[ test]
622+ fn test_trusted_issuer_loader_json_deserialization ( ) {
623+ // Valid JSON values
624+ let valid_cases = vec ! [
625+ (
626+ r#"{"CEDARLING_APPLICATION_NAME": "", "CEDARLING_TRUSTED_ISSUER_LOADER_TYPE": "SYNC", "CEDARLING_TRUSTED_ISSUER_LOADER_WORKERS": 3}"# ,
627+ TrustedIssuerLoaderTypeRaw :: Sync ,
628+ 3 ,
629+ ) ,
630+ (
631+ r#"{"CEDARLING_APPLICATION_NAME": "", "CEDARLING_TRUSTED_ISSUER_LOADER_TYPE": "ASYNC", "CEDARLING_TRUSTED_ISSUER_LOADER_WORKERS": 1}"# ,
632+ TrustedIssuerLoaderTypeRaw :: Async ,
633+ 1 ,
634+ ) ,
635+ ] ;
636+
637+ for ( json, expected_type, expected_workers) in valid_cases {
638+ let config: BootstrapConfigRaw = serde_json:: from_str ( json) . unwrap ( ) ;
639+ assert_eq ! (
640+ config. trusted_issuer_loader_type, expected_type,
641+ "Loader type mismatch for JSON: {}" ,
642+ json
643+ ) ;
644+ assert_eq ! (
645+ config. trusted_issuer_loader_workers, expected_workers,
646+ "Worker count mismatch for JSON: {}" ,
647+ json
648+ ) ;
649+ }
650+
651+ // Invalid JSON values should produce errors
652+ let invalid_cases = vec ! [
653+ r#"{"CEDARLING_APPLICATION_NAME": "", "CEDARLING_TRUSTED_ISSUER_LOADER_TYPE": "INVALID"}"# ,
654+ r#"{"CEDARLING_APPLICATION_NAME": "", "CEDARLING_TRUSTED_ISSUER_LOADER_WORKERS": -1}"# ,
655+ r#"{"CEDARLING_APPLICATION_NAME": "", "CEDARLING_TRUSTED_ISSUER_LOADER_WORKERS": "not_a_number"}"# ,
656+ r#"{"CEDARLING_APPLICATION_NAME": "", "CEDARLING_TRUSTED_ISSUER_LOADER_TYPE": 123}"# ,
657+ ] ;
658+
659+ for json in invalid_cases {
660+ let result: Result < BootstrapConfigRaw , _ > = serde_json:: from_str ( json) ;
661+ result. expect_err ( & format ! ( "Should fail to parse invalid JSON: {}" , json) ) ;
662+ }
663+ }
577664}
0 commit comments