github.com/inflatablewoman/deis@v1.0.1-0.20141111034523-a4511c46a6ce/tests/apps_test.go (about)

     1  // +build integration
     2  
     3  package tests
     4  
     5  import (
     6  	"math/rand"
     7  	"os"
     8  	"testing"
     9  
    10  	"github.com/deis/deis/tests/utils"
    11  )
    12  
    13  var (
    14  	appsCreateCmd         = "apps:create {{.AppName}}"
    15  	appsCreateCmdNoRemote = "apps:create {{.AppName}} --no-remote"
    16  	appsListCmd           = "apps:list"
    17  	appsRunCmd            = "apps:run echo hello"
    18  	appsOpenCmd           = "apps:open --app={{.AppName}}"
    19  	appsLogsCmd           = "apps:logs --app={{.AppName}}"
    20  	appsInfoCmd           = "apps:info --app={{.AppName}}"
    21  	appsDestroyCmd        = "apps:destroy --app={{.AppName}} --confirm={{.AppName}}"
    22  )
    23  
    24  func randomString(n int) string {
    25  	var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    26  	b := make([]rune, n)
    27  	for i := range b {
    28  		b[i] = letters[rand.Intn(len(letters))]
    29  	}
    30  	return string(b)
    31  }
    32  
    33  func TestApps(t *testing.T) {
    34  	params := appsSetup(t)
    35  	appsCreateTest(t, params)
    36  	appsListTest(t, params, false)
    37  	appsLogsTest(t, params)
    38  	appsInfoTest(t, params)
    39  	appsRunTest(t, params)
    40  	appsOpenTest(t, params)
    41  	appsDestroyTest(t, params)
    42  	appsListTest(t, params, true)
    43  }
    44  
    45  func appsSetup(t *testing.T) *utils.DeisTestConfig {
    46  	cfg := utils.GetGlobalConfig()
    47  	cfg.AppName = "appssample"
    48  	utils.Execute(t, authLoginCmd, cfg, false, "")
    49  	utils.Execute(t, gitCloneCmd, cfg, false, "")
    50  	return cfg
    51  }
    52  
    53  func appsCreateTest(t *testing.T, params *utils.DeisTestConfig) {
    54  	wd, _ := os.Getwd()
    55  	defer os.Chdir(wd)
    56  	if err := utils.Chdir(params.ExampleApp); err != nil {
    57  		t.Fatal(err)
    58  	}
    59  	cmd := appsCreateCmd
    60  	utils.Execute(t, cmd, params, false, "")
    61  	utils.Execute(t, cmd, params, true, "App with this Id already exists")
    62  }
    63  
    64  func appsDestroyTest(t *testing.T, params *utils.DeisTestConfig) {
    65  	if err := utils.Chdir(params.ExampleApp); err != nil {
    66  		t.Fatal(err)
    67  	}
    68  	utils.Execute(t, appsDestroyCmd, params, false, "")
    69  	if err := utils.Chdir(".."); err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	if err := utils.Rmdir(params.ExampleApp); err != nil {
    73  		t.Fatal(err)
    74  	}
    75  }
    76  
    77  func appsInfoTest(t *testing.T, params *utils.DeisTestConfig) {
    78  	utils.Execute(t, appsInfoCmd, params, false, "")
    79  }
    80  
    81  func appsListTest(t *testing.T, params *utils.DeisTestConfig, notflag bool) {
    82  	utils.CheckList(t, appsListCmd, params, params.AppName, notflag)
    83  }
    84  
    85  func appsLogsTest(t *testing.T, params *utils.DeisTestConfig) {
    86  	cmd := appsLogsCmd
    87  	// test for application lifecycle logs
    88  	utils.Execute(t, cmd, params, false, "204 NO CONTENT")
    89  	if err := utils.Chdir(params.ExampleApp); err != nil {
    90  		t.Fatal(err)
    91  	}
    92  	utils.Execute(t, gitPushCmd, params, false, "")
    93  	utils.Curl(t, params)
    94  	utils.Execute(t, cmd, params, false, "created initial release")
    95  	utils.Execute(t, cmd, params, false, "listening on 5000...")
    96  	if err := utils.Chdir(".."); err != nil {
    97  		t.Fatal(err)
    98  	}
    99  }
   100  
   101  func appsOpenTest(t *testing.T, params *utils.DeisTestConfig) {
   102  	utils.Curl(t, params)
   103  }
   104  
   105  func appsRunTest(t *testing.T, params *utils.DeisTestConfig) {
   106  	cmd := appsRunCmd
   107  	if err := utils.Chdir(params.ExampleApp); err != nil {
   108  		t.Fatal(err)
   109  	}
   110  	utils.Execute(t, cmd, params, false, "hello")
   111  	utils.Execute(t, "apps:run env", params, true, "GIT_SHA")
   112  	// run a REALLY large command to test https://github.com/deis/deis/issues/2046
   113  	largeString := randomString(1024)
   114  	utils.Execute(t, "apps:run echo "+largeString, params, false, largeString)
   115  	if err := utils.Chdir(".."); err != nil {
   116  		t.Fatal(err)
   117  	}
   118  	utils.Execute(t, cmd, params, true, "Not found")
   119  }