diff --git a/service/features/service.feature b/service/features/service.feature index 3a7cd415..b048fc0f 100644 --- a/service/features/service.feature +++ b/service/features/service.feature @@ -34,8 +34,8 @@ Feature: VxFlex OS CSI interface Scenario Outline: Identity GetPluginInfo bad call Given a VxFlexOS service When I call GetPluginInfo - When I call BeforeServe And I induce error + When I call BeforeServe Then configMap is updated Then a valid GetPlugInfoResponse is returned Examples: @@ -43,6 +43,8 @@ Feature: VxFlex OS CSI interface | "UpdateConfigMapUnmarshalError" | | "GetIPAddressByInterfaceError" | | "UpdateConfigK8sClientError" | + | "UpdateConfigFormatError" | + | "ConfigMapNotFoundError" | Scenario Outline: Dynamic log config change Given a VxFlexOS service diff --git a/service/service_unit_test.go b/service/service_unit_test.go index 091f2e4d..c6e8b622 100644 --- a/service/service_unit_test.go +++ b/service/service_unit_test.go @@ -575,6 +575,50 @@ func TestFindNetworkInterfaceIPs(t *testing.T) { } }, }, + { + name: "Error unmarshalling ConfigMap params", + expectedError: errors.New("error converting YAML to JSON: yaml: line 1: did not find expected node content"), + client: fake.NewSimpleClientset(), + configMapData: map[string]string{ + "driver-config-params.yaml": `[interfaces:`, + }, + createConfigMap: func(data map[string]string, clientSet kubernetes.Interface) { + configMap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: DriverConfigMap, + Namespace: DriverNamespace, + }, + Data: data, + } + // Create a ConfigMap using fake ClientSet + _, err := clientSet.CoreV1().ConfigMaps(DriverNamespace).Create(context.TODO(), configMap, metav1.CreateOptions{}) + if err != nil { + Log.Fatalf("failed to create configMaps: %v", err) + } + }, + }, + { + name: "Error getting the Network Interface IPs", + expectedError: fmt.Errorf("failed to get the Network Interface IPs"), + client: fake.NewSimpleClientset(), + configMapData: map[string]string{ + "params-yaml": ``, + }, + createConfigMap: func(data map[string]string, clientSet kubernetes.Interface) { + configMap := &v1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: DriverConfigMap, + Namespace: DriverNamespace, + }, + Data: data, + } + // Create a ConfigMap using fake ClientSet + _, err := clientSet.CoreV1().ConfigMaps(DriverNamespace).Create(context.TODO(), configMap, metav1.CreateOptions{}) + if err != nil { + Log.Fatalf("failed to create configMaps: %v", err) + } + }, + }, } for _, tt := range tests { diff --git a/service/step_defs_test.go b/service/step_defs_test.go index 56afef9a..6d25f946 100644 --- a/service/step_defs_test.go +++ b/service/step_defs_test.go @@ -1348,6 +1348,10 @@ func (f *feature) iInduceError(errtype string) error { stepHandlersErrors.GetIPAddressByInterfaceError = true case "UpdateConfigK8sClientError": stepHandlersErrors.UpdateConfigK8sClientError = true + case "UpdateConfigFormatError": + stepHandlersErrors.UpdateConfigFormatError = true + case "ConfigMapNotFoundError": + stepHandlersErrors.ConfigMapNotFoundError = true default: fmt.Println("Ensure that the error is handled in the handlers section.") } @@ -3143,14 +3147,15 @@ func (f *feature) theConfigMapIsUpdated() error { data := `interfaceNames: worker1: "eth1" worker2: "eth2"` - if stepHandlersErrors.UpdateConfigMapUnmarshalError { + data = `[interfaces:` + } else if stepHandlersErrors.UpdateConfigFormatError { data = `interfaceName:` } + configMapData := map[string]string{ "driver-config-params.yaml": data, } - configMap := &v1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: DriverConfigMap, @@ -3167,10 +3172,12 @@ func (f *feature) theConfigMapIsUpdated() error { Log.Errorf("Error writing to temp file: %v", err) } - // Create a ConfigMap using fake ClientSet - _, err = clientSet.CoreV1().ConfigMaps(DriverNamespace).Create(context.TODO(), configMap, metav1.CreateOptions{}) - if err != nil { - Log.Errorf("failed to create configmap: %v", err) + if !stepHandlersErrors.ConfigMapNotFoundError { + // Create a ConfigMap using fake ClientSet + _, err = clientSet.CoreV1().ConfigMaps(DriverNamespace).Create(context.TODO(), configMap, metav1.CreateOptions{}) + if err != nil { + Log.Errorf("failed to create configmap: %v", err) + } } // Mocking the GetIPAddressByInterface function @@ -3219,6 +3226,9 @@ func (f *feature) iCallBeforeServe() error { if perr != nil { f.err = perr } + if stepHandlersErrors.UpdateConfigK8sClientError { + K8sClientset = nil + } f.err = f.service.BeforeServe(ctx, nil, listener) listener.Close() return nil diff --git a/service/step_handlers_test.go b/service/step_handlers_test.go index 01bf0796..08ca49ec 100644 --- a/service/step_handlers_test.go +++ b/service/step_handlers_test.go @@ -109,6 +109,8 @@ var ( UpdateConfigMapUnmarshalError bool GetIPAddressByInterfaceError bool UpdateConfigK8sClientError bool + UpdateConfigFormatError bool + ConfigMapNotFoundError bool } ) @@ -232,6 +234,8 @@ func getHandler() http.Handler { stepHandlersErrors.UpdateConfigMapUnmarshalError = false stepHandlersErrors.GetIPAddressByInterfaceError = false stepHandlersErrors.UpdateConfigK8sClientError = false + stepHandlersErrors.UpdateConfigFormatError = false + stepHandlersErrors.ConfigMapNotFoundError = false sdcMappings = sdcMappings[:0] sdcMappingsID = "" return handler