github.com/tonto/cli@v0.0.0-20180104210444-aec958fa47db/test/funcfile-docker-rt-tests/fn_test.go (about) 1 package tests 2 3 import ( 4 "bytes" 5 "fmt" 6 "io/ioutil" 7 "log" 8 "os" 9 "os/exec" 10 "path" 11 "testing" 12 ) 13 14 func init() { 15 dockerUser := os.Getenv("DOCKER_USER") 16 var err error 17 if dockerUser == "" { 18 dockerUser = "funcster" 19 } 20 err = os.Setenv("FN_REGISTRY", dockerUser) 21 if err != nil { 22 log.Fatalf("couldn't set env var: %v", err) 23 } 24 return 25 } 26 27 func TestDockerRuntime(t *testing.T) { 28 testname := "TestDockerRuntime" 29 testfiles := []string{"Dockerfile", "func.go"} 30 31 currdir, err := os.Getwd() 32 if err != nil { 33 t.Fatalf("ERROR: Failed to get current directory: err: %v", err) 34 } 35 testdir, err := ioutil.TempDir("", "cli_test_funcfile-docker-rt_"+testname) 36 if err != nil { 37 t.Fatalf("ERROR: Failed to make tmp test directory: err: %v", err) 38 } 39 defer cleanup(t, currdir, testdir) 40 fnTestBin := setupTestFiles(t, testname, currdir, testdir, testfiles) 41 runFnInit(t, testname, fnTestBin) 42 runFnBuild(t, testname, fnTestBin) 43 runFnRun(t, testname, fnTestBin) 44 t.Logf("INFO: %s SUCCESS", testname) 45 } 46 47 func TestDockerRuntimeNoDockerfile(t *testing.T) { 48 testname := "TestDockerRuntimeNoDockerfile" 49 testfiles := []string{"func.yaml", "func.go"} 50 51 currdir, err := os.Getwd() 52 if err != nil { 53 t.Fatalf("ERROR: Failed to get current directory: err: %v", err) 54 } 55 testdir, err := ioutil.TempDir("", "cli_test_funcfile-docker-rt_"+testname) 56 if err != nil { 57 t.Fatalf("ERROR: Failed to make tmp test directory: err: %v", err) 58 } 59 defer cleanup(t, currdir, testdir) 60 fnTestBin := setupTestFiles(t, testname, currdir, testdir, testfiles) 61 runFnBuildNoDockerfile(t, testname, fnTestBin) 62 t.Logf("INFO: %s SUCCESS", testname) 63 } 64 65 func cleanup(t *testing.T, currdir, testdir string) { 66 err := os.Chdir(currdir) 67 if err != nil { 68 t.Fatalf("ERROR: Failed to cd %s directory: err: %v", currdir, err) 69 } 70 os.Remove(testdir) 71 } 72 73 func setupTestFiles(t *testing.T, 74 testname, currdir, testdir string, testfiles []string) string { 75 76 t.Logf("INFO: %s Current directory is %s", testname, currdir) 77 78 testfilesdir := path.Join(currdir, "testfiles") 79 for _, testfile := range testfiles { 80 err := copyFile(path.Join(testfilesdir, testfile), path.Join(testdir, testfile)) 81 if err != nil { 82 t.Fatalf("ERROR: Failed to copy %s to test directory %s: err: %v", testfile, testdir, err) 83 } 84 } 85 86 fnTestBin := path.Join(testdir, "fn") 87 err := os.Chdir("../../") 88 if err != nil { 89 t.Fatalf("ERROR: Failed to cd ../../ directory: err: %v", err) 90 } 91 res, err := exec.Command("go", "build", "-o", fnTestBin).CombinedOutput() 92 if err != nil { 93 t.Fatalf("ERROR: Failed to build fn: res: %s, err: %v", string(res), err) 94 } 95 96 t.Logf("INFO: %s cd test directory %s", testname, testdir) 97 if err := os.Chdir(testdir); err != nil { 98 t.Fatalf("ERROR: Failed to cd test directory %s: err: %v", testdir, err) 99 } 100 return fnTestBin 101 } 102 103 func runFnInit(t *testing.T, testname, fnTestBin string) { 104 var imagename string = "fn_test_hello_docker_runtime" 105 106 t.Logf("INFO: %s Run fn init --name %s", testname, imagename) 107 res, err := exec.Command(fnTestBin, "init", "--name", imagename).CombinedOutput() 108 if err != nil { 109 t.Fatalf("ERROR: Failed run fn init: res: %s, err: %v", string(res), err) 110 } 111 } 112 113 func runFnBuild(t *testing.T, testname, fnTestBin string) { 114 t.Logf("INFO: %s Run fn build", testname) 115 res, err := exec.Command(fnTestBin, "build").CombinedOutput() 116 if err != nil { 117 t.Fatalf("ERROR: Failed run fn build: res: %s, err: %v", string(res), err) 118 } 119 } 120 121 func runFnBuildNoDockerfile(t *testing.T, testname, fnTestBin string) { 122 t.Logf("INFO: %s Run fn build", testname) 123 res, err := exec.Command(fnTestBin, "build").CombinedOutput() 124 if err != nil { 125 if bytes.Contains(res, []byte("Dockerfile does not exist")) { 126 t.Logf("INFO: %s Got expected error message %s", testname, string(res)) 127 return 128 } 129 } 130 t.Fatalf("ERROR: Didn't get expected failure on fn build: res: %s, err: %v", string(res), err) 131 } 132 133 func runFnRun(t *testing.T, testname, fnTestBin string) { 134 t.Logf("INFO: %s Run fn run", testname) 135 res, err := exec.Command(fnTestBin, "run").CombinedOutput() 136 if err != nil { 137 t.Fatalf("ERROR: Failed run fn run: res: %s, err: %v", string(res), err) 138 } 139 140 } 141 142 func copyFile(src, dst string) error { 143 b, err := ioutil.ReadFile(src) 144 if err != nil { 145 return fmt.Errorf("copyFile(): failed to read src file "+src+": %s", src) 146 } 147 148 err = ioutil.WriteFile(dst, b, 0777) 149 if err != nil { 150 return fmt.Errorf("copyFile(): failed to read dst file "+dst+": %s", dst) 151 } 152 return nil 153 }