github.com/amrnt/deis@v1.3.1/tests/builds_test.go (about) 1 // +build integration 2 3 package tests 4 5 import ( 6 "bytes" 7 "os" 8 "os/exec" 9 "strings" 10 "testing" 11 "text/template" 12 "time" 13 14 "github.com/deis/deis/tests/utils" 15 ) 16 17 var ( 18 buildsListCmd = "builds:list --app={{.AppName}}" 19 buildsCreateCmd = `builds:create {{.ImageID}} --app={{.AppName}} --procfile="worker: while true; do echo hi; sleep 3; done"` 20 ) 21 22 func TestBuilds(t *testing.T) { 23 params := buildSetup(t) 24 buildsListTest(t, params) 25 appsOpenTest(t, params) 26 utils.AppsDestroyTest(t, params) 27 buildsCreateTest(t, params) 28 // TODO: router needs a few seconds to wake up here--fixme! 29 time.Sleep(5000 * time.Millisecond) 30 appsOpenTest(t, params) 31 buildsScaleTest(t, params) 32 utils.AppsDestroyTest(t, params) 33 } 34 35 func buildSetup(t *testing.T) *utils.DeisTestConfig { 36 cfg := utils.GetGlobalConfig() 37 cfg.AppName = "buildsample" 38 utils.Execute(t, authLoginCmd, cfg, false, "") 39 utils.Execute(t, gitCloneCmd, cfg, false, "") 40 if err := utils.Chdir(cfg.ExampleApp); err != nil { 41 t.Fatal(err) 42 } 43 utils.Execute(t, appsCreateCmd, cfg, false, "") 44 utils.Execute(t, gitPushCmd, cfg, false, "") 45 utils.Execute(t, "git commit --allow-empty -m bump", cfg, false, "") 46 utils.Execute(t, gitPushCmd, cfg, false, "") 47 if err := utils.Chdir(".."); err != nil { 48 t.Fatal(err) 49 } 50 return cfg 51 } 52 53 func buildsListTest(t *testing.T, params *utils.DeisTestConfig) { 54 cmd := buildsListCmd 55 var cmdBuf bytes.Buffer 56 tmpl := template.Must(template.New("cmd").Parse(cmd)) 57 if err := tmpl.Execute(&cmdBuf, params); err != nil { 58 t.Fatal(err) 59 } 60 cmdString := cmdBuf.String() 61 cmdl := exec.Command("sh", "-c", utils.Deis+cmdString) 62 stdout, _, err := utils.RunCommandWithStdoutStderr(cmdl) 63 if err != nil { 64 t.Fatal(err) 65 } 66 ImageID := strings.Split(stdout.String(), "\n")[2] 67 params.ImageID = strings.Fields(ImageID)[0] 68 } 69 70 // buildsCreateTest uses the `deis builds:create` (or `deis pull`) command 71 // to promote a build from an existing docker image. 72 func buildsCreateTest(t *testing.T, params *utils.DeisTestConfig) { 73 params.AppName = "deispullsample" 74 params.ImageID = "deis/example-go:latest" 75 params.ExampleApp = "example-deis-pull" 76 if err := os.Mkdir(params.ExampleApp, 0755); err != nil { 77 t.Fatal(err) 78 } 79 if err := utils.Chdir(params.ExampleApp); err != nil { 80 t.Fatal(err) 81 } 82 utils.Execute(t, appsCreateCmdNoRemote, params, false, "") 83 utils.Execute(t, buildsCreateCmd, params, false, "") 84 if err := utils.Chdir(".."); err != nil { 85 t.Fatal(err) 86 } 87 } 88 89 // buildsScaleTest ensures that we can use a Procfile-based workflow for `deis pull`. 90 func buildsScaleTest(t *testing.T, params *utils.DeisTestConfig) { 91 if err := utils.Chdir(params.ExampleApp); err != nil { 92 t.Fatal(err) 93 } 94 utils.Execute(t, "scale worker=1 --app={{.AppName}}", params, false, "") 95 utils.Execute(t, "logs --app={{.AppName}}", params, false, "hi") 96 if err := utils.Chdir(".."); err != nil { 97 t.Fatal(err) 98 } 99 }