github.com/dustinrc/deis@v1.10.1-0.20150917223407-0894a5fb979e/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  }