@@ -2,7 +2,6 @@ package ssh
22
33import (
44 "context"
5- "github.com/onsi/ginkgo/v2"
65 "os"
76 "os/exec"
87 "time"
@@ -12,7 +11,8 @@ import (
1211 "github.com/loft-sh/devspace/e2e/framework"
1312 "github.com/loft-sh/devspace/e2e/kube"
1413 "github.com/loft-sh/devspace/pkg/util/factory"
15- "k8s.io/apimachinery/pkg/util/wait"
14+ "github.com/onsi/ginkgo/v2"
15+ "github.com/onsi/gomega"
1616)
1717
1818var _ = DevSpaceDescribe ("ssh" , func () {
@@ -34,19 +34,19 @@ var _ = DevSpaceDescribe("ssh", func() {
3434 framework .ExpectNoError (err )
3535 })
3636
37- ginkgo .It ("devspace dev should start an SSH service" , func () {
37+ ginkgo .It ("devspace dev should start an SSH service" , func (ctx context. Context ) {
3838 tempDir , err := framework .CopyToTempDir ("tests/ssh/testdata/ssh-simple" )
3939 framework .ExpectNoError (err )
40- defer framework .CleanupTempDir ( initialDir , tempDir )
40+ ginkgo . DeferCleanup ( framework .CleanupTempDir , initialDir , tempDir )
4141
4242 ns , err := kubeClient .CreateNamespace ("ssh" )
4343 framework .ExpectNoError (err )
44- defer framework .ExpectDeleteNamespace ( kubeClient , ns )
44+ ginkgo . DeferCleanup ( framework .ExpectDeleteNamespace , kubeClient , ns )
4545
4646 // create a new dev command and start it
4747 done := make (chan error )
4848 cancelCtx , cancel := context .WithCancel (context .Background ())
49- defer cancel ( )
49+ ginkgo . DeferCleanup ( cancel )
5050
5151 go func () {
5252 defer ginkgo .GinkgoRecover ()
@@ -64,20 +64,118 @@ var _ = DevSpaceDescribe("ssh", func() {
6464 }()
6565
6666 // connect to the SSH server
67- err = wait . PollImmediate ( time . Second , time . Minute * 2 , func () ( bool , error ) {
67+ gomega . Eventually ( func (g gomega. Gomega ) {
6868 cmd := exec .Command ("ssh" , "test.ssh-simple.devspace" , "ls" )
6969 err := cmd .Run ()
70- if err != nil {
71- return false , nil
72- }
70+ g .Expect (err ).NotTo (gomega .HaveOccurred ())
71+
72+ cancel ()
73+ }).
74+ WithPolling (time .Second ).
75+ WithTimeout (time .Second * 60 ).
76+ Should (gomega .Succeed ())
7377
74- return true , nil
75- })
78+ err = <- done
7679 framework .ExpectNoError (err )
80+ })
7781
78- cancel ()
82+ ginkgo .It ("devspace dev should NOT start an SSH service when disabled with a variable" , func (ctx context.Context ) {
83+ tempDir , err := framework .CopyToTempDir ("tests/ssh/testdata/ssh-variable" )
84+ framework .ExpectNoError (err )
85+ ginkgo .DeferCleanup (framework .CleanupTempDir , initialDir , tempDir )
7986
80- err = <- done
87+ ns , err := kubeClient . CreateNamespace ( "ssh" )
8188 framework .ExpectNoError (err )
89+ ginkgo .DeferCleanup (framework .ExpectDeleteNamespace , kubeClient , ns )
90+
91+ // create a new dev command and start it
92+ done := make (chan error )
93+ cancelCtx , cancel := context .WithCancel (context .Background ())
94+ ginkgo .DeferCleanup (cancel )
95+
96+ go func () {
97+ defer ginkgo .GinkgoRecover ()
98+
99+ devCmd := & cmd.RunPipelineCmd {
100+ GlobalFlags : & flags.GlobalFlags {
101+ NoWarn : true ,
102+ Debug : true ,
103+ Namespace : ns ,
104+ Vars : []string {"SSH=false" },
105+ },
106+ Pipeline : "dev" ,
107+ Ctx : cancelCtx ,
108+ }
109+
110+ done <- devCmd .RunDefault (f )
111+ }()
112+
113+ gomega .Eventually (func (g gomega.Gomega ) {
114+ cmd := exec .Command ("ssh" , "test.ssh-variable.devspace" , "ls" )
115+ out , err := cmd .CombinedOutput ()
116+ output := string (out )
117+ g .Expect (err ).To (gomega .HaveOccurred ())
118+ g .Expect (output ).To (
119+ gomega .Or (
120+ gomega .ContainSubstring ("Could not resolve hostname test.ssh-variable.devspace" ),
121+ gomega .ContainSubstring ("ssh: connect to host localhost port 10023" ),
122+ ),
123+ )
124+
125+ cancel ()
126+ }).
127+ WithPolling (time .Second ).
128+ WithTimeout (time .Second * 60 ).
129+ Should (gomega .Succeed ())
130+
131+ cmdErr := <- done
132+ framework .ExpectNoError (cmdErr )
133+ })
134+
135+ ginkgo .It ("devspace dev should start an SSH service when enabled with a variable" , func (ctx context.Context ) {
136+ tempDir , err := framework .CopyToTempDir ("tests/ssh/testdata/ssh-variable" )
137+ framework .ExpectNoError (err )
138+ ginkgo .DeferCleanup (framework .CleanupTempDir , initialDir , tempDir )
139+
140+ ns , err := kubeClient .CreateNamespace ("ssh" )
141+ framework .ExpectNoError (err )
142+ ginkgo .DeferCleanup (framework .ExpectDeleteNamespace , kubeClient , ns )
143+
144+ // create a new dev command and start it
145+ done := make (chan error )
146+ cancelCtx , cancel := context .WithCancel (context .Background ())
147+ ginkgo .DeferCleanup (cancel )
148+
149+ go func () {
150+ defer ginkgo .GinkgoRecover ()
151+
152+ devCmd := & cmd.RunPipelineCmd {
153+ GlobalFlags : & flags.GlobalFlags {
154+ NoWarn : true ,
155+ Debug : true ,
156+ Namespace : ns ,
157+ Vars : []string {"SSH=true" },
158+ },
159+ Pipeline : "dev" ,
160+ Ctx : cancelCtx ,
161+ }
162+
163+ done <- devCmd .RunDefault (f )
164+ }()
165+
166+ // connect to the SSH server
167+ gomega .Eventually (func (g gomega.Gomega ) {
168+ cmd := exec .Command ("ssh" , "test.ssh-variable.devspace" , "ls" )
169+ err := cmd .Run ()
170+ g .Expect (err ).NotTo (gomega .HaveOccurred ())
171+
172+ cancel ()
173+ }).
174+ WithPolling (time .Second ).
175+ WithTimeout (time .Second * 60 ).
176+ Should (gomega .Succeed ())
177+
178+ cmdErr := <- done
179+ framework .ExpectNoError (cmdErr )
82180 })
83181})
0 commit comments