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  }