@@ -815,6 +815,188 @@ func TestConvertDataReadings_ClusterSecretStores(t *testing.T) {
815815 assert .Equal (t , "aws-cluster-secret-store" , css2 .GetName ())
816816}
817817
818+ // TestConvertDataReadings_SecretProviderClasses tests that secretproviderclasses are correctly converted.
819+ func TestConvertDataReadings_SecretProviderClasses (t * testing.T ) {
820+ extractorFunctions := map [string ]func (* api.DataReading , * dataupload.Snapshot ) error {
821+ "ark/discovery" : extractClusterIDAndServerVersionFromReading ,
822+ "ark/secretproviderclasses" : func (reading * api.DataReading , snapshot * dataupload.Snapshot ) error {
823+ return extractResourceListFromReading (reading , & snapshot .SecretProviderClasses )
824+ },
825+ }
826+
827+ readings := []* api.DataReading {
828+ {
829+ DataGatherer : "ark/discovery" ,
830+ Data : & api.DiscoveryData {
831+ ClusterID : "test-cluster-id" ,
832+ ServerVersion : & version.Info {
833+ GitVersion : "v1.21.0" ,
834+ },
835+ },
836+ },
837+ {
838+ DataGatherer : "ark/secretproviderclasses" ,
839+ Data : & api.DynamicData {
840+ Items : []* api.GatheredResource {
841+ {
842+ Resource : & unstructured.Unstructured {
843+ Object : map [string ]any {
844+ "apiVersion" : "secrets-store.csi.x-k8s.io/v1" ,
845+ "kind" : "SecretProviderClass" ,
846+ "metadata" : map [string ]any {
847+ "name" : "conjur-spc" ,
848+ "namespace" : "default" ,
849+ },
850+ "spec" : map [string ]any {
851+ "provider" : "conjur" ,
852+ },
853+ },
854+ },
855+ },
856+ {
857+ Resource : & unstructured.Unstructured {
858+ Object : map [string ]any {
859+ "apiVersion" : "secrets-store.csi.x-k8s.io/v1" ,
860+ "kind" : "SecretProviderClass" ,
861+ "metadata" : map [string ]any {
862+ "name" : "vault-spc" ,
863+ "namespace" : "default" ,
864+ },
865+ "spec" : map [string ]any {
866+ "provider" : "vault" ,
867+ },
868+ },
869+ },
870+ },
871+ // Deleted secretproviderclass should be ignored
872+ {
873+ DeletedAt : api.Time {Time : time .Now ()},
874+ Resource : & unstructured.Unstructured {
875+ Object : map [string ]any {
876+ "apiVersion" : "secrets-store.csi.x-k8s.io/v1" ,
877+ "kind" : "SecretProviderClass" ,
878+ "metadata" : map [string ]any {
879+ "name" : "deleted-spc" ,
880+ "namespace" : "default" ,
881+ },
882+ },
883+ },
884+ },
885+ },
886+ },
887+ },
888+ }
889+
890+ var snapshot dataupload.Snapshot
891+ err := convertDataReadings (extractorFunctions , readings , & snapshot )
892+ require .NoError (t , err )
893+
894+ assert .Equal (t , "test-cluster-id" , snapshot .ClusterID )
895+ require .Len (t , snapshot .SecretProviderClasses , 2 , "should have 2 secretproviderclasses (deleted one should be excluded)" )
896+
897+ spc1 , ok := snapshot .SecretProviderClasses [0 ].(* unstructured.Unstructured )
898+ require .True (t , ok , "secretproviderclass should be unstructured" )
899+ assert .Equal (t , "SecretProviderClass" , spc1 .GetKind ())
900+ assert .Equal (t , "conjur-spc" , spc1 .GetName ())
901+
902+ spc2 , ok := snapshot .SecretProviderClasses [1 ].(* unstructured.Unstructured )
903+ require .True (t , ok , "secretproviderclass should be unstructured" )
904+ assert .Equal (t , "SecretProviderClass" , spc2 .GetKind ())
905+ assert .Equal (t , "vault-spc" , spc2 .GetName ())
906+ }
907+
908+ // TestConvertDataReadings_SecretProviderClassPodStatuses tests that secretproviderclasspodstatuses are correctly converted.
909+ func TestConvertDataReadings_SecretProviderClassPodStatuses (t * testing.T ) {
910+ extractorFunctions := map [string ]func (* api.DataReading , * dataupload.Snapshot ) error {
911+ "ark/discovery" : extractClusterIDAndServerVersionFromReading ,
912+ "ark/secretproviderclasspodstatuses" : func (reading * api.DataReading , snapshot * dataupload.Snapshot ) error {
913+ return extractResourceListFromReading (reading , & snapshot .SecretProviderClassPodStatuses )
914+ },
915+ }
916+
917+ readings := []* api.DataReading {
918+ {
919+ DataGatherer : "ark/discovery" ,
920+ Data : & api.DiscoveryData {
921+ ClusterID : "test-cluster-id" ,
922+ ServerVersion : & version.Info {
923+ GitVersion : "v1.21.0" ,
924+ },
925+ },
926+ },
927+ {
928+ DataGatherer : "ark/secretproviderclasspodstatuses" ,
929+ Data : & api.DynamicData {
930+ Items : []* api.GatheredResource {
931+ {
932+ Resource : & unstructured.Unstructured {
933+ Object : map [string ]any {
934+ "apiVersion" : "secrets-store.csi.x-k8s.io/v1" ,
935+ "kind" : "SecretProviderClassPodStatus" ,
936+ "metadata" : map [string ]any {
937+ "name" : "my-pod-conjur-spc" ,
938+ "namespace" : "default" ,
939+ },
940+ "status" : map [string ]any {
941+ "mounted" : true ,
942+ "podName" : "my-pod" ,
943+ },
944+ },
945+ },
946+ },
947+ {
948+ Resource : & unstructured.Unstructured {
949+ Object : map [string ]any {
950+ "apiVersion" : "secrets-store.csi.x-k8s.io/v1" ,
951+ "kind" : "SecretProviderClassPodStatus" ,
952+ "metadata" : map [string ]any {
953+ "name" : "other-pod-conjur-spc" ,
954+ "namespace" : "default" ,
955+ },
956+ "status" : map [string ]any {
957+ "mounted" : false ,
958+ "podName" : "other-pod" ,
959+ },
960+ },
961+ },
962+ },
963+ // Deleted secretproviderclasspodstatus should be ignored
964+ {
965+ DeletedAt : api.Time {Time : time .Now ()},
966+ Resource : & unstructured.Unstructured {
967+ Object : map [string ]any {
968+ "apiVersion" : "secrets-store.csi.x-k8s.io/v1" ,
969+ "kind" : "SecretProviderClassPodStatus" ,
970+ "metadata" : map [string ]any {
971+ "name" : "deleted-pod-spc" ,
972+ "namespace" : "default" ,
973+ },
974+ },
975+ },
976+ },
977+ },
978+ },
979+ },
980+ }
981+
982+ var snapshot dataupload.Snapshot
983+ err := convertDataReadings (extractorFunctions , readings , & snapshot )
984+ require .NoError (t , err )
985+
986+ assert .Equal (t , "test-cluster-id" , snapshot .ClusterID )
987+ require .Len (t , snapshot .SecretProviderClassPodStatuses , 2 , "should have 2 secretproviderclasspodstatuses (deleted one should be excluded)" )
988+
989+ spcps1 , ok := snapshot .SecretProviderClassPodStatuses [0 ].(* unstructured.Unstructured )
990+ require .True (t , ok , "secretproviderclasspodstatus should be unstructured" )
991+ assert .Equal (t , "SecretProviderClassPodStatus" , spcps1 .GetKind ())
992+ assert .Equal (t , "my-pod-conjur-spc" , spcps1 .GetName ())
993+
994+ spcps2 , ok := snapshot .SecretProviderClassPodStatuses [1 ].(* unstructured.Unstructured )
995+ require .True (t , ok , "secretproviderclasspodstatus should be unstructured" )
996+ assert .Equal (t , "SecretProviderClassPodStatus" , spcps2 .GetKind ())
997+ assert .Equal (t , "other-pod-conjur-spc" , spcps2 .GetName ())
998+ }
999+
8181000// TestConvertDataReadings_ServiceAccounts tests that serviceaccounts are correctly converted.
8191001func TestConvertDataReadings_ServiceAccounts (t * testing.T ) {
8201002 extractorFunctions := map [string ]func (* api.DataReading , * dataupload.Snapshot ) error {
0 commit comments