github.com/techend/deis@v1.0.1-0.20141111224634-e0eee0392b8a/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}}"
    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  	utils.AppsDestroyTest(t, params)
    32  }
    33  
    34  func buildSetup(t *testing.T) *utils.DeisTestConfig {
    35  	cfg := utils.GetGlobalConfig()
    36  	cfg.AppName = "buildsample"
    37  	utils.Execute(t, authLoginCmd, cfg, false, "")
    38  	utils.Execute(t, gitCloneCmd, cfg, false, "")
    39  	if err := utils.Chdir(cfg.ExampleApp); err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	utils.Execute(t, appsCreateCmd, cfg, false, "")
    43  	utils.Execute(t, gitPushCmd, cfg, false, "")
    44  	utils.Execute(t, "git commit --allow-empty -m bump", cfg, false, "")
    45  	utils.Execute(t, gitPushCmd, cfg, false, "")
    46  	if err := utils.Chdir(".."); err != nil {
    47  		t.Fatal(err)
    48  	}
    49  	return cfg
    50  }
    51  
    52  func buildsListTest(t *testing.T, params *utils.DeisTestConfig) {
    53  	cmd := buildsListCmd
    54  	var cmdBuf bytes.Buffer
    55  	tmpl := template.Must(template.New("cmd").Parse(cmd))
    56  	if err := tmpl.Execute(&cmdBuf, params); err != nil {
    57  		t.Fatal(err)
    58  	}
    59  	cmdString := cmdBuf.String()
    60  	cmdl := exec.Command("sh", "-c", utils.Deis+cmdString)
    61  	stdout, _, err := utils.RunCommandWithStdoutStderr(cmdl)
    62  	if err != nil {
    63  		t.Fatal(err)
    64  	}
    65  	ImageID := strings.Split(stdout.String(), "\n")[2]
    66  	params.ImageID = strings.Fields(ImageID)[0]
    67  }
    68  
    69  // buildsCreateTest uses the `deis builds:create` (or `deis pull`) command
    70  // to promote a build from an existing docker image.
    71  func buildsCreateTest(t *testing.T, params *utils.DeisTestConfig) {
    72  	params.AppName = "deispullsample"
    73  	params.ImageID = "deis/example-go:latest"
    74  	params.ExampleApp = "example-deis-pull"
    75  	if err := os.Mkdir(params.ExampleApp, 0755); err != nil {
    76  		t.Fatal(err)
    77  	}
    78  	if err := utils.Chdir(params.ExampleApp); err != nil {
    79  		t.Fatal(err)
    80  	}
    81  	utils.Execute(t, appsCreateCmdNoRemote, params, false, "")
    82  	utils.Execute(t, buildsCreateCmd, params, false, "")
    83  	if err := utils.Chdir(".."); err != nil {
    84  		t.Fatal(err)
    85  	}
    86  }