Skip to content

Commit ed7c67f

Browse files
committed
tests: add test for attach & restart helper
1 parent f21ba50 commit ed7c67f

File tree

20 files changed

+401
-109
lines changed

20 files changed

+401
-109
lines changed

cmd/attach.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,5 @@ func (cmd *AttachCmd) Run(f factory.Factory, cobraCmd *cobra.Command, args []str
105105
WithQuestion("Which pod do you want to attach to?")
106106

107107
// Start attach
108-
return attach.StartAttach(ctx, targetselector.NewTargetSelector(options))
108+
return attach.StartAttachFromCMD(ctx, targetselector.NewTargetSelector(options))
109109
}

cmd/deploy.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66
"github.com/loft-sh/devspace/cmd/flags"
7-
"github.com/loft-sh/devspace/pkg/devspace/analyze"
87
"github.com/loft-sh/devspace/pkg/devspace/build"
98
"github.com/loft-sh/devspace/pkg/devspace/config/loader"
109
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
@@ -51,9 +50,6 @@ type DeployCmd struct {
5150
Dependency []string
5251
SkipDependency []string
5352

54-
Wait bool
55-
Timeout int
56-
5753
log logpkg.Logger
5854

5955
Ctx context.Context
@@ -106,9 +102,6 @@ devspace deploy --kube-context=deploy-context
106102
deployCmd.Flags().StringSliceVar(&cmd.SkipDependency, "skip-dependency", []string{}, "Skips deploying the following dependencies")
107103
deployCmd.Flags().StringSliceVar(&cmd.Dependency, "dependency", []string{}, "Deploys only the specific named dependencies")
108104

109-
deployCmd.Flags().BoolVar(&cmd.Wait, "wait", false, "If true will wait for pods to be running or fails after given timeout")
110-
deployCmd.Flags().IntVar(&cmd.Timeout, "timeout", 120, "Timeout until deploy should stop waiting")
111-
112105
return deployCmd
113106
}
114107

@@ -158,8 +151,6 @@ func (cmd *DeployCmd) runCommand(ctx *devspacecontext.Context, f factory.Factory
158151
ConfigOptions: configOptions,
159152
Only: cmd.Dependency,
160153
Pipeline: cmd.Pipeline,
161-
Wait: cmd.Wait,
162-
Timeout: cmd.Timeout,
163154
})
164155
}
165156

@@ -230,8 +221,6 @@ type PipelineOptions struct {
230221
ConfigOptions *loader.ConfigOptions
231222
Only []string
232223
Pipeline string
233-
Wait bool
234-
Timeout int
235224
ShowUI bool
236225
UIPort int
237226
}
@@ -323,17 +312,5 @@ func runPipeline(ctx *devspacecontext.Context, f factory.Factory, forceLeader bo
323312
// wait for dev
324313
pipe.WaitDev()
325314

326-
// wait if necessary
327-
if options.Wait {
328-
report, err := f.NewAnalyzer(ctx.KubeClient, f.GetLog()).CreateReport(ctx.KubeClient.Namespace(), analyze.Options{Wait: true, Patient: true, Timeout: options.Timeout, IgnorePodRestarts: true})
329-
if err != nil {
330-
return errors.Wrap(err, "analyze")
331-
}
332-
333-
if len(report) > 0 {
334-
return errors.Errorf(analyze.ReportToString(report))
335-
}
336-
}
337-
338315
return nil
339316
}

cmd/dev.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ type DevCmd struct {
3434

3535
SkipPush bool
3636
SkipPushLocalKubernetes bool
37-
Open bool
3837

3938
Dependency []string
4039
SkipDependency []string
@@ -47,18 +46,16 @@ type DevCmd struct {
4746
ForceDeploy bool
4847
SkipDeploy bool
4948

50-
UI bool
5149
UIPort int
5250

5351
Terminal bool
5452
WorkingDirectory string
5553
Pipeline string
5654

57-
Sync bool
58-
Portforwarding bool
59-
60-
Wait bool
61-
Timeout int
55+
DisableUI bool
56+
DisableOpen bool
57+
DisableSync bool
58+
DisablePortForwarding bool
6259

6360
configLoader loader.ConfigLoader
6461
log log.Logger
@@ -114,20 +111,17 @@ Open terminal instead of logs:
114111
devCmd.Flags().BoolVar(&cmd.SkipPush, "skip-push", false, "Skips image pushing, useful for minikube deployment")
115112
devCmd.Flags().BoolVar(&cmd.SkipPushLocalKubernetes, "skip-push-local-kube", true, "Skips image pushing, if a local kubernetes environment is detected")
116113

117-
devCmd.Flags().BoolVar(&cmd.Sync, "sync", true, "Enable code synchronization")
118-
devCmd.Flags().BoolVar(&cmd.Portforwarding, "portforwarding", true, "Enable port forwarding")
114+
devCmd.Flags().BoolVar(&cmd.DisableSync, "disable-sync", false, "Disable code synchronization")
115+
devCmd.Flags().BoolVar(&cmd.DisablePortForwarding, "disable-port-forwarding", false, "Disable port forwarding")
116+
devCmd.Flags().BoolVar(&cmd.DisableUI, "disable-ui", false, "Disables the ui server")
117+
devCmd.Flags().BoolVar(&cmd.DisableOpen, "disable-open", false, "Open defined URLs in the browser, if defined")
119118

120-
devCmd.Flags().BoolVar(&cmd.UI, "ui", true, "Start the ui server")
121119
devCmd.Flags().IntVar(&cmd.UIPort, "ui-port", 0, "The port to use when opening the ui server")
122-
devCmd.Flags().BoolVar(&cmd.Open, "open", true, "Open defined URLs in the browser, if defined")
123120
devCmd.Flags().StringVar(&cmd.Pipeline, "pipeline", "", "The pipeline to execute")
124121

125122
devCmd.Flags().BoolVarP(&cmd.Terminal, "terminal", "t", false, "Open a terminal instead of showing logs")
126123
devCmd.Flags().StringVar(&cmd.WorkingDirectory, "workdir", "", "The working directory where to open the terminal or execute the command")
127124

128-
devCmd.Flags().BoolVar(&cmd.Wait, "wait", false, "If true will wait first for pods to be running or fails after given timeout")
129-
devCmd.Flags().IntVar(&cmd.Timeout, "timeout", 120, "Timeout until dev should stop waiting and fail")
130-
131125
return devCmd
132126
}
133127

@@ -185,17 +179,16 @@ func (cmd *DevCmd) runCommand(ctx *devspacecontext.Context, f factory.Factory, c
185179
Exclude: cmd.SkipDependency,
186180
},
187181
DevOptions: devpod.Options{
188-
DisableSync: !cmd.Sync,
189-
DisablePortForwarding: !cmd.Portforwarding,
182+
DisableSync: cmd.DisableSync,
183+
DisablePortForwarding: cmd.DisablePortForwarding,
184+
DisableOpen: cmd.DisableOpen,
190185
},
191186
},
192187
ConfigOptions: configOptions,
193188
Only: cmd.Dependency,
194189
Pipeline: cmd.Pipeline,
195-
ShowUI: cmd.UI,
190+
ShowUI: !cmd.DisableUI,
196191
UIPort: cmd.UIPort,
197-
Wait: cmd.Wait,
198-
Timeout: cmd.Timeout,
199192
})
200193
}
201194

e2e/tests/dependencies/dependencies.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,7 @@ var _ = DevSpaceDescribe("dependencies", func() {
203203
NoWarn: true,
204204
Namespace: ns,
205205
},
206-
Portforwarding: true,
207-
Sync: true,
208-
Ctx: cancelCtx,
206+
Ctx: cancelCtx,
209207
}
210208
err = devCmd.Run(f)
211209
framework.ExpectNoError(err)

e2e/tests/hooks/hooks.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,7 @@ var _ = DevSpaceDescribe("hooks", func() {
131131
NoWarn: true,
132132
Namespace: ns,
133133
},
134-
Portforwarding: true,
135-
Sync: true,
136-
Ctx: cancelCtx1,
134+
Ctx: cancelCtx1,
137135
}
138136

139137
// start the command
@@ -180,9 +178,7 @@ var _ = DevSpaceDescribe("hooks", func() {
180178
NoWarn: true,
181179
Namespace: ns,
182180
},
183-
Portforwarding: true,
184-
Sync: true,
185-
Ctx: cancelCtx2,
181+
Ctx: cancelCtx2,
186182
}
187183

188184
// start the command

e2e/tests/replacepods/replacepods.go

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,52 @@ var _ = DevSpaceDescribe("replacepods", func() {
3838
framework.ExpectNoError(err)
3939
})
4040

41+
ginkgo.FIt("should inject restart helper and restart container", func() {
42+
tempDir, err := framework.CopyToTempDir("tests/replacepods/testdata/restart-helper")
43+
framework.ExpectNoError(err)
44+
defer framework.CleanupTempDir(initialDir, tempDir)
45+
46+
ns, err := kubeClient.CreateNamespace("replacepods")
47+
framework.ExpectNoError(err)
48+
defer framework.ExpectDeleteNamespace(kubeClient, ns)
49+
50+
// create a new dev command and start it
51+
done := make(chan error)
52+
cancelCtx, cancel := context.WithCancel(context.Background())
53+
defer cancel()
54+
go func() {
55+
devCmd := &cmd.DevCmd{
56+
GlobalFlags: &flags.GlobalFlags{
57+
NoWarn: true,
58+
Namespace: ns,
59+
},
60+
Ctx: cancelCtx,
61+
}
62+
err := devCmd.Run(f)
63+
if err != nil {
64+
f.GetLog().Errorf("error: %v", err)
65+
}
66+
done <- err
67+
}()
68+
69+
// check if file is there
70+
framework.ExpectRemoteFileContents("ubuntu", ns, "/test.txt", "Hello World\n")
71+
72+
// upload a file and restart the container
73+
err = ioutil.WriteFile("test1.txt", []byte("Hello World2!"), 0777)
74+
framework.ExpectNoError(err)
75+
76+
// wait for uploaded
77+
framework.ExpectRemoteFileContents("ubuntu", ns, "/app/test1.txt", "Hello World2!")
78+
79+
// wait for restarted
80+
framework.ExpectRemoteFileContents("ubuntu", ns, "/test.txt", "Hello World\nHello World\n")
81+
82+
cancel()
83+
err = <-done
84+
framework.ExpectNoError(err)
85+
})
86+
4187
ginkgo.It("should replace statefulset pod", func() {
4288
tempDir, err := framework.CopyToTempDir("tests/replacepods/testdata/statefulset")
4389
framework.ExpectNoError(err)
@@ -53,8 +99,6 @@ var _ = DevSpaceDescribe("replacepods", func() {
5399
NoWarn: true,
54100
Namespace: ns,
55101
},
56-
Portforwarding: true,
57-
Sync: true,
58102
}
59103
err = devCmd.Run(f)
60104
framework.ExpectNoError(err)
@@ -96,8 +140,6 @@ var _ = DevSpaceDescribe("replacepods", func() {
96140
NoWarn: true,
97141
Namespace: ns,
98142
},
99-
Portforwarding: true,
100-
Sync: true,
101143
}
102144
err = devCmd.Run(f)
103145
framework.ExpectNoError(err)
@@ -161,8 +203,6 @@ var _ = DevSpaceDescribe("replacepods", func() {
161203
NoWarn: true,
162204
Namespace: ns,
163205
},
164-
Portforwarding: true,
165-
Sync: true,
166206
}
167207
err = devCmd.Run(f)
168208
framework.ExpectNoError(err)
@@ -199,8 +239,6 @@ var _ = DevSpaceDescribe("replacepods", func() {
199239
NoWarn: true,
200240
Namespace: ns,
201241
},
202-
Portforwarding: true,
203-
Sync: true,
204242
}
205243
err = devCmd.Run(f)
206244
framework.ExpectNoError(err)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
version: v2beta1
2+
name: attach
3+
4+
pipelines:
5+
dev:
6+
steps:
7+
- run: |-
8+
create_deployments test --set helm.values.containers[0].image=ubuntu
9+
10+
start_dev test --set imageSelector=ubuntu \
11+
--set 'command={sh,-c,echo Hello World >> /test.txt; sleep 100000}' \
12+
--set logs.enabled=true \
13+
--set sync[0].path=.:/app \
14+
--set sync[0].onUpload.restartContainer=true \
15+
--set sync[0].excludePaths[0]=devspace.yaml

e2e/tests/sync/sync.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,7 @@ var _ = DevSpaceDescribe("sync", func() {
193193
NoWarn: true,
194194
Namespace: ns,
195195
},
196-
Portforwarding: true,
197-
Sync: true,
198-
Ctx: cancelCtx,
196+
Ctx: cancelCtx,
199197
}
200198

201199
// start the command

e2e/tests/terminal/terminal.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,55 @@ var _ = DevSpaceDescribe("terminal", func() {
3939
framework.ExpectNoError(err)
4040
})
4141

42+
ginkgo.It("should attach", func() {
43+
tempDir, err := framework.CopyToTempDir("tests/terminal/testdata/attach")
44+
framework.ExpectNoError(err)
45+
defer framework.CleanupTempDir(initialDir, tempDir)
46+
47+
ns, err := kubeClient.CreateNamespace("attach")
48+
framework.ExpectNoError(err)
49+
defer framework.ExpectDeleteNamespace(kubeClient, ns)
50+
51+
buffer := &bytes.Buffer{}
52+
devpod.DefaultTerminalStdout = buffer
53+
devpod.DefaultTerminalStderr = buffer
54+
devpod.DefaultTerminalStdin = strings.NewReader(`mkdir -p /test/devspace
55+
echo "Hello World!" > /test/devspace/test.txt
56+
sleep 1000000
57+
`)
58+
defer func() {
59+
devpod.DefaultTerminalStdout = os.Stdout
60+
devpod.DefaultTerminalStderr = os.Stderr
61+
devpod.DefaultTerminalStdin = os.Stdin
62+
}()
63+
64+
// create a new dev command and start it
65+
done := make(chan error)
66+
cancelCtx, cancel := context.WithCancel(context.Background())
67+
defer cancel()
68+
go func() {
69+
devCmd := &cmd.DevCmd{
70+
GlobalFlags: &flags.GlobalFlags{
71+
NoWarn: true,
72+
Namespace: ns,
73+
},
74+
Ctx: cancelCtx,
75+
}
76+
err := devCmd.Run(f)
77+
if err != nil {
78+
f.GetLog().Errorf("error: %v", err)
79+
}
80+
done <- err
81+
}()
82+
83+
// check if file is there
84+
framework.ExpectRemoteFileContents("ubuntu", ns, "/test/devspace/test.txt", "Hello World!\n")
85+
86+
cancel()
87+
err = <-done
88+
framework.ExpectNoError(err)
89+
})
90+
4291
ginkgo.It("should restart terminal", func() {
4392
tempDir, err := framework.CopyToTempDir("tests/terminal/testdata/restart")
4493
framework.ExpectNoError(err)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: v2beta1
2+
name: attach
3+
4+
pipelines:
5+
dev:
6+
steps:
7+
- run: |-
8+
create_deployments test --set helm.values.containers[0].image=ubuntu
9+
10+
start_dev test --set imageSelector=ubuntu \
11+
--set attach.enabled=true \
12+
--set attach.disableTTY=true
13+

0 commit comments

Comments
 (0)