github.com/kubernetes-incubator/kube-aws@v0.16.4/test/helper/plugin.go (about) 1 package helper 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path" 7 "path/filepath" 8 "syscall" 9 "testing" 10 ) 11 12 type TestPlugin struct { 13 Name string 14 Yaml string 15 Files map[string]string 16 } 17 18 func isNotExist(err error) bool { 19 return err == syscall.ENOENT || err == os.ErrNotExist 20 } 21 22 func WithPlugins(t *testing.T, plugins []TestPlugin, fn func()) { 23 dir, err := filepath.Abs("./") 24 if err != nil { 25 panic(err) 26 } 27 pluginsDir := path.Join(dir, "plugins") 28 29 //if _, err := os.Stat(pluginsDir); isNotExist(err) { 30 if err := os.Mkdir(pluginsDir, 0755); err != nil { 31 t.Errorf("%+v", err) 32 t.FailNow() 33 } 34 //} 35 36 defer os.RemoveAll(pluginsDir) 37 38 for _, p := range plugins { 39 pluginDir := path.Join(pluginsDir, p.Name) 40 if err := os.Mkdir(pluginDir, 0755); err != nil { 41 t.Errorf("%+v", err) 42 t.FailNow() 43 } 44 45 pluginYamlFile := path.Join(pluginDir, "plugin.yaml") 46 if err := ioutil.WriteFile(pluginYamlFile, []byte(p.Yaml), 0644); err != nil { 47 t.Errorf("%+v", err) 48 t.FailNow() 49 } 50 51 files := p.Files 52 if files == nil { 53 files = map[string]string{} 54 } 55 for relFilePath, content := range files { 56 absFilePath := filepath.Join(pluginDir, relFilePath) 57 absDirPath := filepath.Dir(absFilePath) 58 if err := os.MkdirAll(absDirPath, 0755); err != nil { 59 t.Errorf("%+v", err) 60 t.FailNow() 61 } 62 if err := ioutil.WriteFile(absFilePath, []byte(content), 0644); err != nil { 63 t.Errorf("%+v", err) 64 t.FailNow() 65 } 66 } 67 } 68 69 fn() 70 }