@@ -919,4 +919,143 @@ mod tests {
919919 assert_eq ! ( rv. version, "0.1.0" ) ;
920920 }
921921 }
922+
923+ #[ tokio:: test]
924+ async fn test_sync_all_machine_luks_key_empty ( ) {
925+ let clos = async |req : Request < _ > , ctr| match ( ctr, req. method ( ) ) {
926+ ( 0 , & Method :: GET ) => {
927+ let list = kube:: api:: ObjectList {
928+ items : Vec :: < Machine > :: new ( ) ,
929+ types : Default :: default ( ) ,
930+ metadata : Default :: default ( ) ,
931+ } ;
932+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
933+ }
934+ _ => panic ! ( "unexpected API interaction: {req:?}, counter {ctr}" ) ,
935+ } ;
936+ count_check ! ( 1 , clos, |client| {
937+ assert!( sync_all_machine_luks_key( client) . await . is_ok( ) ) ;
938+ } ) ;
939+ }
940+
941+ #[ tokio:: test]
942+ async fn test_sync_all_machine_luks_key_send_success ( ) {
943+ let _ = jsonwebtoken_openssl:: install_default ( ) ;
944+ let clos = async |req : Request < _ > , ctr| match ( ctr, req. method ( ) ) {
945+ ( 0 , & Method :: GET ) => {
946+ let list = kube:: api:: ObjectList {
947+ items : vec ! [ dummy_machine( "m1" ) , dummy_machine( "m2" ) ] ,
948+ types : Default :: default ( ) ,
949+ metadata : Default :: default ( ) ,
950+ } ;
951+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
952+ }
953+ ( 1 , & Method :: GET ) => {
954+ assert ! ( req. uri( ) . path( ) . contains( TRUSTEE_AUTH_SECRET ) ) ;
955+ Ok ( serde_json:: to_string ( & dummy_trustee_auth ( ) ) . unwrap ( ) )
956+ }
957+ ( 2 , & Method :: GET ) => Ok ( serde_json:: to_string ( & dummy_cluster ( ) ) . unwrap ( ) ) ,
958+ ( 3 , & Method :: GET ) => Ok ( serde_json:: to_string ( & dummy_secret ( ) ) . unwrap ( ) ) ,
959+ ( 4 , & Method :: POST ) => Ok ( serde_json:: to_string ( & ( ) ) . unwrap ( ) ) ,
960+ _ => panic ! ( "unexpected API interaction: {req:?}, counter {ctr}" ) ,
961+ } ;
962+ count_check ! ( 4 , clos, |client| {
963+ assert!( sync_all_machine_luks_key( client) . await . is_ok( ) ) ;
964+ } ) ;
965+ }
966+
967+ #[ tokio:: test]
968+ async fn test_sync_all_machine_luks_key_send_fails_gracefully ( ) {
969+ let clos = async |req : Request < _ > , ctr| match ( ctr, req. method ( ) ) {
970+ ( 0 , & Method :: GET ) => {
971+ let list = kube:: api:: ObjectList {
972+ items : vec ! [ dummy_machine( "m1" ) , dummy_machine( "m2" ) ] ,
973+ types : Default :: default ( ) ,
974+ metadata : Default :: default ( ) ,
975+ } ;
976+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
977+ }
978+ ( _, & Method :: GET ) => Err ( StatusCode :: NOT_FOUND ) ,
979+ _ => panic ! ( "unexpected API interaction: {req:?}, counter {ctr}" ) ,
980+ } ;
981+ count_check ! ( 3 , clos, |client| {
982+ assert!( sync_all_machine_luks_key( client) . await . is_ok( ) ) ;
983+ } ) ;
984+ }
985+
986+ #[ tokio:: test]
987+ async fn test_update_attestation_keys_empty ( ) {
988+ let clos = async |_, _| {
989+ let list = kube:: api:: ObjectList {
990+ items : Vec :: < Secret > :: new ( ) ,
991+ types : Default :: default ( ) ,
992+ metadata : Default :: default ( ) ,
993+ } ;
994+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
995+ } ;
996+ count_check ! ( 1 , clos, |client| {
997+ assert!( update_attestation_keys( client) . await . is_ok( ) ) ;
998+ } ) ;
999+ }
1000+
1001+ #[ tokio:: test]
1002+ async fn test_update_attestation_keys_register_fails_gracefully ( ) {
1003+ let clos = async |req : Request < _ > , ctr| match ( ctr, req. method ( ) ) {
1004+ ( 0 , & Method :: GET ) => {
1005+ let list = kube:: api:: ObjectList {
1006+ items : vec ! [ dummy_ak_secret( "ak1" ) , dummy_ak_secret( "ak2" ) ] ,
1007+ types : Default :: default ( ) ,
1008+ metadata : Default :: default ( ) ,
1009+ } ;
1010+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
1011+ }
1012+ _ => Err ( StatusCode :: NOT_FOUND ) ,
1013+ } ;
1014+ count_check ! ( 3 , clos, |client| {
1015+ assert!( update_attestation_keys( client) . await . is_ok( ) ) ;
1016+ } ) ;
1017+ }
1018+
1019+ #[ tokio:: test]
1020+ async fn test_update_attestation_keys_register_success ( ) {
1021+ let clos = async |req : Request < _ > , ctr| match ( ctr, req. method ( ) ) {
1022+ ( 0 , & Method :: GET ) => {
1023+ let list = kube:: api:: ObjectList {
1024+ items : vec ! [ dummy_ak_secret( "ak1" ) ] ,
1025+ types : Default :: default ( ) ,
1026+ metadata : Default :: default ( ) ,
1027+ } ;
1028+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
1029+ }
1030+ ( 1 , & Method :: GET ) => {
1031+ assert ! ( req. uri( ) . path( ) . contains( TRUSTEE_AUTH_SECRET ) ) ;
1032+ Ok ( serde_json:: to_string ( & dummy_trustee_auth ( ) ) . unwrap ( ) )
1033+ }
1034+ ( 2 , & Method :: GET ) => Ok ( serde_json:: to_string ( & dummy_cluster ( ) ) . unwrap ( ) ) ,
1035+ ( 3 , & Method :: POST ) => Ok ( serde_json:: to_string ( & ( ) ) . unwrap ( ) ) ,
1036+ _ => panic ! ( "unexpected API interaction: {req:?}, counter {ctr}" ) ,
1037+ } ;
1038+ count_check ! ( 3 , clos, |client| {
1039+ assert!( update_attestation_keys( client) . await . is_ok( ) ) ;
1040+ } ) ;
1041+ }
1042+
1043+ #[ tokio:: test]
1044+ async fn test_update_attestation_keys_filters_deleting ( ) {
1045+ use k8s_openapi:: apimachinery:: pkg:: apis:: meta:: v1:: Time ;
1046+ let clos = async |_, _| {
1047+ let mut deleting = dummy_ak_secret ( "ak-deleting" ) ;
1048+ deleting. metadata . deletion_timestamp = Some ( Time ( jiff:: Timestamp :: now ( ) ) ) ;
1049+ let no_owner = Secret :: default ( ) ;
1050+ let list = kube:: api:: ObjectList {
1051+ items : vec ! [ deleting, no_owner] ,
1052+ types : Default :: default ( ) ,
1053+ metadata : Default :: default ( ) ,
1054+ } ;
1055+ Ok ( serde_json:: to_string ( & list) . unwrap ( ) )
1056+ } ;
1057+ count_check ! ( 1 , clos, |client| {
1058+ assert!( update_attestation_keys( client) . await . is_ok( ) ) ;
1059+ } ) ;
1060+ }
9221061}
0 commit comments