From 195568762fa2dd188521847ee6b5a481c0db5efd Mon Sep 17 00:00:00 2001 From: Indeed Date: Tue, 17 Mar 2020 08:42:11 -0700 Subject: [PATCH] add unit test for addTopology() --- .../plugins/in_tree_volume_test.go | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/in_tree_volume_test.go b/staging/src/k8s.io/csi-translation-lib/plugins/in_tree_volume_test.go index 895e169b1cc..db5685c1a5d 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/in_tree_volume_test.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/in_tree_volume_test.go @@ -129,3 +129,86 @@ func TestTranslateAllowedTopologies(t *testing.T) { } } } + +func TestAddTopology(t *testing.T) { + testCases := []struct { + name string + topologyKey string + zones []string + expErr bool + expectedAffinity *v1.VolumeNodeAffinity + }{ + { + name: "empty zones", + topologyKey: GCEPDTopologyKey, + zones: nil, + expErr: true, + }, + { + name: "only whitespace-named zones", + topologyKey: GCEPDTopologyKey, + zones: []string{" ", "\n", "\t", " "}, + expErr: true, + }, + { + name: "including whitespace-named zones", + topologyKey: GCEPDTopologyKey, + zones: []string{" ", "us-central1-a"}, + expErr: false, + expectedAffinity: &v1.VolumeNodeAffinity{ + Required: &v1.NodeSelector{ + NodeSelectorTerms: []v1.NodeSelectorTerm{ + { + MatchExpressions: []v1.NodeSelectorRequirement{ + { + Key: GCEPDTopologyKey, + Operator: v1.NodeSelectorOpIn, + Values: []string{"us-central1-a"}, + }, + }, + }, + }, + }, + }, + }, + { + name: "unsorted zones", + topologyKey: GCEPDTopologyKey, + zones: []string{"us-central1-f", "us-central1-a", "us-central1-c", "us-central1-b"}, + expErr: false, + expectedAffinity: &v1.VolumeNodeAffinity{ + Required: &v1.NodeSelector{ + NodeSelectorTerms: []v1.NodeSelectorTerm{ + { + MatchExpressions: []v1.NodeSelectorRequirement{ + { + Key: GCEPDTopologyKey, + Operator: v1.NodeSelectorOpIn, + // Values are expected to be ordered + Values: []string{"us-central1-a", "us-central1-b", "us-central1-c", "us-central1-f"}, + }, + }, + }, + }, + }, + }, + }, + } + + for _, tc := range testCases { + t.Logf("Running test: %v", tc.name) + pv := &v1.PersistentVolume{ + Spec: v1.PersistentVolumeSpec{}, + } + err := addTopology(pv, tc.topologyKey, tc.zones) + if err != nil && !tc.expErr { + t.Errorf("Did not expect an error, got: %v", err) + } + if err == nil && tc.expErr { + t.Errorf("Expected an error but did not get one") + } + if err == nil && !reflect.DeepEqual(pv.Spec.NodeAffinity, tc.expectedAffinity) { + t.Errorf("Expected affinity: %v, but got: %v", tc.expectedAffinity, pv.Spec.NodeAffinity) + } + } +}