istio.io/istio@v0.0.0-20240520182934-d79c90f27776/cni/test/install_k8s_test.go (about) 1 // Copyright Istio Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // This tests the k8s installation. It validates the CNI plugin configuration 16 // and the existence of the CNI plugin binary locations. 17 package install_test 18 19 import ( 20 "testing" 21 22 install "istio.io/istio/cni/test" 23 "istio.io/istio/pkg/test/env" 24 ) 25 26 var ( 27 Hub = "gcr.io/istio-release" 28 Tag = "master-latest-daily" 29 ) 30 31 type testCase struct { 32 name string 33 chainedCNIPlugin bool 34 preConfFile string 35 resultFileName string 36 // Must set chainedCNIPlugin to true if delayedConfFile is specified 37 delayedConfFile string 38 expectedOutputFile string 39 expectedPostCleanFile string 40 cniConfDirOrderedFiles []string 41 } 42 43 func TestInstall(t *testing.T) { 44 testDataDir := env.IstioSrc + "/cni/test/testdata" 45 cases := []testCase{ 46 { 47 name: "File with pre-plugins--.conflist", 48 chainedCNIPlugin: true, 49 preConfFile: "00-calico.conflist", 50 resultFileName: "00-calico.conflist", 51 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 52 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 53 cniConfDirOrderedFiles: []string{"calico.conflist"}, 54 }, 55 { 56 name: "File without pre-plugins--.conf", 57 chainedCNIPlugin: true, 58 preConfFile: "00-minikube_cni.conf", 59 resultFileName: "00-minikube_cni.conflist", 60 expectedOutputFile: testDataDir + "/expected/minikube_cni.conflist.expected", 61 expectedPostCleanFile: testDataDir + "/expected/minikube_cni.conflist.clean", 62 cniConfDirOrderedFiles: []string{"minikube_cni.conf"}, 63 }, 64 { 65 name: "First file with pre-plugins--.conflist", 66 chainedCNIPlugin: true, 67 resultFileName: "00-calico.conflist", 68 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 69 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 70 cniConfDirOrderedFiles: []string{"calico.conflist", "minikube_cni.conf"}, 71 }, 72 { 73 name: "First file without pre-plugins--.conf", 74 chainedCNIPlugin: true, 75 resultFileName: "00-minikube_cni.conflist", 76 expectedOutputFile: testDataDir + "/expected/minikube_cni.conflist.expected", 77 expectedPostCleanFile: testDataDir + "/expected/minikube_cni.conflist.clean", 78 cniConfDirOrderedFiles: []string{"minikube_cni.conf", "calico.conflist"}, 79 }, 80 { 81 name: "Skip non-json file for first valid .conf file", 82 chainedCNIPlugin: true, 83 resultFileName: "01-minikube_cni.conflist", 84 expectedOutputFile: testDataDir + "/expected/minikube_cni.conflist.expected", 85 expectedPostCleanFile: testDataDir + "/expected/minikube_cni.conflist.clean", 86 cniConfDirOrderedFiles: []string{"non_json.conf", "minikube_cni.conf", "calico.conflist"}, 87 }, 88 { 89 name: "Skip non-json file for first valid .conflist file", 90 chainedCNIPlugin: true, 91 resultFileName: "01-calico.conflist", 92 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 93 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 94 cniConfDirOrderedFiles: []string{"non_json.conf", "calico.conflist", "minikube_cni.conf"}, 95 }, 96 { 97 name: "Skip invalid .conf file for first valid .conf file", 98 chainedCNIPlugin: true, 99 resultFileName: "01-minikube_cni.conflist", 100 expectedOutputFile: testDataDir + "/expected/minikube_cni.conflist.expected", 101 expectedPostCleanFile: testDataDir + "/expected/minikube_cni.conflist.clean", 102 cniConfDirOrderedFiles: []string{"bad_minikube_cni.conf", "minikube_cni.conf", "calico.conflist"}, 103 }, 104 { 105 name: "Skip invalid .conf file for first valid .conflist file", 106 chainedCNIPlugin: true, 107 resultFileName: "01-calico.conflist", 108 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 109 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 110 cniConfDirOrderedFiles: []string{"bad_minikube_cni.conf", "calico.conflist", "minikube_cni.conf"}, 111 }, 112 { 113 name: "Skip invalid .conflist files for first valid .conf file", 114 chainedCNIPlugin: true, 115 resultFileName: "02-minikube_cni.conflist", 116 expectedOutputFile: testDataDir + "/expected/minikube_cni.conflist.expected", 117 expectedPostCleanFile: testDataDir + "/expected/minikube_cni.conflist.clean", 118 cniConfDirOrderedFiles: []string{ 119 "noname_calico.conflist", 120 "noplugins_calico.conflist", 121 "minikube_cni.conf", "calico.conflist", 122 }, 123 }, 124 { 125 name: "Skip invalid .conflist files for first valid .conflist file", 126 chainedCNIPlugin: true, 127 resultFileName: "02-calico.conflist", 128 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 129 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 130 cniConfDirOrderedFiles: []string{ 131 "noname_calico.conflist", 132 "noplugins_calico.conflist", 133 "calico.conflist", "minikube_cni.conf", 134 }, 135 }, 136 { 137 name: "confFile env var point to missing .conf with valid .conflist file", 138 chainedCNIPlugin: true, 139 preConfFile: "00-calico.conf", 140 resultFileName: "00-calico.conflist", 141 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 142 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 143 cniConfDirOrderedFiles: []string{"calico.conflist"}, 144 }, 145 { 146 name: "confFile env var point to missing .conflist with valid .conf file", 147 chainedCNIPlugin: true, 148 preConfFile: "00-minikube_cni.conflist", 149 resultFileName: "00-minikube_cni.conflist", 150 expectedOutputFile: testDataDir + "/expected/minikube_cni.conflist.expected", 151 expectedPostCleanFile: testDataDir + "/expected/minikube_cni.conflist.clean", 152 cniConfDirOrderedFiles: []string{"minikube_cni.conf"}, 153 }, 154 { 155 name: "confFile env var point to missing file initially and ignore different conf", 156 chainedCNIPlugin: true, 157 preConfFile: "missing_initially.conf", 158 resultFileName: "missing_initially.conflist", 159 delayedConfFile: testDataDir + "/pre/calico.conflist", 160 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 161 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 162 }, 163 { 164 name: "confFile env var not specified and no valid conf file initially", 165 chainedCNIPlugin: true, 166 resultFileName: "calico.conflist", 167 delayedConfFile: testDataDir + "/pre/calico.conflist", 168 expectedOutputFile: testDataDir + "/expected/10-calico.conflist-istioconfig", 169 expectedPostCleanFile: testDataDir + "/pre/calico.conflist", 170 }, 171 { 172 name: "standalone plugin default name", 173 resultFileName: "YYY-istio-cni.conf", 174 expectedOutputFile: testDataDir + "/expected/YYY-istio-cni.conf", 175 }, 176 { 177 name: "standalone plugin user defined name", 178 preConfFile: "user-defined.conf", 179 resultFileName: "user-defined.conf", 180 expectedOutputFile: testDataDir + "/expected/YYY-istio-cni.conf", 181 }, 182 } 183 for _, tc := range cases { 184 t.Run(tc.name, func(t *testing.T) { 185 t.Logf("%s: Test preconf %s, expected %s", tc.name, tc.preConfFile, tc.expectedOutputFile) 186 install.RunInstallCNITest(t, tc.chainedCNIPlugin, tc.preConfFile, tc.resultFileName, tc.delayedConfFile, tc.expectedOutputFile, 187 tc.expectedPostCleanFile, tc.cniConfDirOrderedFiles) 188 }) 189 } 190 }