@@ -3,18 +3,19 @@ package _tests_test
33import (
44 "bytes"
55 "fmt"
6+ "io"
67 "math/rand"
78 "os"
89 "os/exec"
910 "os/user"
1011 "path"
12+ "testing"
1113
1214 . "github.com/onsi/ginkgo"
1315 . "github.com/onsi/ginkgo/config"
14-
1516 . "github.com/onsi/gomega"
16-
17- "testing "
17+ "github.com/onsi/gomega/gbytes"
18+ "github.com/onsi/gomega/gexec "
1819)
1920
2021const (
@@ -53,15 +54,17 @@ var _ = BeforeSuite(func() {
5354 // register the test-admin user
5455 register (url , testAdminUser , testAdminPassword , testAdminEmail )
5556 // verify this user is an admin by running a privileged command
56- _ , err = execute ("deis users:list" )
57- Expect (err ).NotTo (HaveOccurred ())
57+ sess , err := start ("deis users:list" )
58+ Expect (err ).To (BeNil ())
59+ Eventually (sess ).Should (gexec .Exit (0 ))
5860
5961 // register the test user and add a key
6062 register (url , testUser , testPassword , testEmail )
6163 createKey ("deis-test" )
62- output , err := execute ("deis keys:add ~/.ssh/deis-test.pub" )
63- Expect (err ).NotTo (HaveOccurred ())
64- Expect (output ).To (ContainSubstring ("Uploading deis-test.pub to deis... done" ))
64+ sess , err = start ("deis keys:add ~/.ssh/deis-test.pub" )
65+ Expect (err ).To (BeNil ())
66+ Eventually (sess ).Should (gexec .Exit (0 ))
67+ Eventually (sess ).Should (gbytes .Say ("Uploading deis-test.pub to deis... done" ))
6568})
6669
6770var _ = AfterSuite (func () {
@@ -73,38 +76,39 @@ var _ = AfterSuite(func() {
7376})
7477
7578func register (url , username , password , email string ) {
76- cmd := "deis register %s --username=%s --password=%s --email=%s"
77- output , err := execute (cmd , url , username , password , email )
78- Expect (err ).NotTo (HaveOccurred ())
79- Expect (output ).To (SatisfyAll (
80- ContainSubstring ("Registered %s" , username ),
81- ContainSubstring ("Logged in as %s" , username )))
79+ sess , err := start ("deis register %s --username=%s --password=%s --email=%s" , url , username , password , email )
80+ Expect (err ).To (BeNil ())
81+ Eventually (sess ).Should (gbytes .Say ("Registered %s" , username ))
82+ Eventually (sess ).Should (gbytes .Say ("Logged in as %s" , username ))
8283}
8384
8485func cancel (url , username , password string ) {
8586 // log in to the account
8687 login (url , username , password )
8788
8889 // cancel the account
89- cmd := "deis auth:cancel --username=%s --password=%s --yes"
90- output , err := execute ( cmd , username , password )
91- Expect ( err ). NotTo ( HaveOccurred ( ))
92- Expect ( output ). To ( ContainSubstring ("Account cancelled" ))
90+ sess , err := start ( "deis auth:cancel --username=%s --password=%s --yes" , username , password )
91+ Expect ( err ). To ( BeNil () )
92+ Eventually ( sess ). Should ( gexec . Exit ( 0 ))
93+ Eventually ( sess ). Should ( gbytes . Say ("Account cancelled" ))
9394}
9495
9596func login (url , user , password string ) {
96- cmd := "deis login %s --username=%s --password=%s"
97- output , err := execute ( cmd , url , user , password )
98- Expect ( err ). NotTo ( HaveOccurred ( ))
99- Expect ( output ). To ( ContainSubstring ("Logged in as %s" , user ))
97+ sess , err := start ( "deis login %s --username=%s --password=%s" , url , user , password )
98+ Expect ( err ). To ( BeNil () )
99+ Eventually ( sess ). Should ( gexec . Exit ( 0 ))
100+ Eventually ( sess ). Should ( gbytes . Say ("Logged in as %s" , user ))
100101}
101102
102103func logout () {
103- output , err := execute ("deis auth:logout" )
104- Expect (err ).NotTo (HaveOccurred ())
105- Expect (output ).To (Equal ("Logged out\n " ))
104+ sess , err := start ("deis auth:logout" )
105+ Expect (err ).To (BeNil ())
106+ Eventually (sess ).Should (gexec .Exit (0 ))
107+ Eventually (sess ).Should (gbytes .Say ("Logged out\n " ))
106108}
107109
110+ // execute executes the command generated by fmt.Sprintf(cmdLine, args...) and returns its output as a cmdOut structure.
111+ // this structure can then be matched upon using the SucceedWithOutput matcher below
108112func execute (cmdLine string , args ... interface {}) (string , error ) {
109113 var stdout , stderr bytes.Buffer
110114 var cmd * exec.Cmd
@@ -116,6 +120,13 @@ func execute(cmdLine string, args ...interface{}) (string, error) {
116120 return stdout .String (), nil
117121}
118122
123+ func start (cmdLine string , args ... interface {}) (* gexec.Session , error ) {
124+ cmdStr := fmt .Sprintf (cmdLine , args ... )
125+ fmt .Println (cmdStr )
126+ cmd := exec .Command ("/bin/sh" , "-c" , cmdStr )
127+ return gexec .Start (cmd , GinkgoWriter , GinkgoWriter )
128+ }
129+
119130func createKey (name string ) {
120131 var home string
121132 if user , err := user .Current (); err != nil {
@@ -126,13 +137,14 @@ func createKey(name string) {
126137 path := path .Join (home , ".ssh" , name )
127138 // create the key under ~/.ssh/<name> if it doesn't already exist
128139 if _ , err := os .Stat (path ); os .IsNotExist (err ) {
129- cmd := "ssh-keygen -q -t rsa -b 4096 -C %s -f %s -N ''"
130- _ , err := execute ( cmd , name , path )
131- Expect ( err ). NotTo ( HaveOccurred ( ))
140+ sess , err := start ( "ssh-keygen -q -t rsa -b 4096 -C %s -f %s -N ''" , name , path )
141+ Expect ( err ). To ( BeNil () )
142+ Eventually ( sess ). Should ( gexec . Exit ( 0 ))
132143 }
133144 // add the key to ssh-agent
134- _ , err := execute ("eval $(ssh-agent) && ssh-add %s" , path )
135- Expect (err ).NotTo (HaveOccurred ())
145+ sess , err := start ("eval $(ssh-agent) && ssh-add %s" , path )
146+ Expect (err ).To (BeNil ())
147+ Eventually (sess ).Should (gexec .Exit (0 ))
136148}
137149
138150func getController () string {
0 commit comments