Skip to content

Commit 614f1f2

Browse files
committed
e2e: add e2e test for this feat
1 parent b727e09 commit 614f1f2

4 files changed

Lines changed: 79 additions & 21 deletions

File tree

cmd/dev.go

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -603,12 +603,12 @@ func (cmd *DevCmd) startOutput(configInterface config.Config, dependencies []typ
603603
return 0, pluginErr
604604
}
605605

606-
// if config.Dev.Terminal is defined && config.Images is empty
606+
// if config.Dev.Terminal is defined
607607
// config.Dev.Terminal.ImageSelector is empty &&
608608
// config.Dev.Terminal.LabelSelector is also empty &&
609609
// config.Dev.Terminal.Command is defined then
610610
// run the command locally instead on in container
611-
if config.Images == nil && config.Dev.Terminal.ImageSelector == "" &&
611+
if config.Dev.Terminal.ImageSelector == "" &&
612612
config.Dev.Terminal.LabelSelector == nil &&
613613
config.Dev.Terminal.Command != nil &&
614614
len(config.Dev.Terminal.Command) > 0 {
@@ -624,6 +624,7 @@ func (cmd *DevCmd) startOutput(configInterface config.Config, dependencies []typ
624624
}
625625
// if command succeeds
626626
cmd.log.Infof("Command '%s' returned: %s", command, stdout.String())
627+
_, _ = cmd.Stdout.Write(stdout.Bytes()) // pass output to the devspace's stdout
627628
return 0, nil
628629
} else {
629630
selectorOptions := targetselector.NewDefaultOptions().ApplyCmdParameter("", "", cmd.Namespace, "")
@@ -781,31 +782,33 @@ func (cmd *DevCmd) loadConfig(configOptions *loader.ConfigOptions) (config.Confi
781782
// check if terminal is enabled
782783
c := configInterface.Config()
783784

784-
if cmd.Terminal || (c.Dev.Terminal != nil && !c.Dev.Terminal.Disabled) {
785+
if cmd.Terminal && c.Dev.Terminal == nil {
785786
if c.Dev.Terminal == nil || (c.Dev.Terminal.ImageSelector == "" && len(c.Dev.Terminal.LabelSelector) == 0) {
787+
if len(c.Images) == 0 {
788+
return nil, errors.New("No image available in devspace config")
789+
}
790+
786791
imageNames := make([]string, 0, len(c.Images))
787792
for k := range c.Images {
788793
imageNames = append(imageNames, k)
789794
}
790795

791-
if len(imageNames) > 0 {
792-
// if only one image exists, use it, otherwise show image picker
793-
imageName := ""
794-
if len(imageNames) == 1 {
795-
imageName = imageNames[0]
796-
} else {
797-
imageName, err = cmd.log.Question(&survey.QuestionOptions{
798-
Question: "Which image do you want to open a terminal to?",
799-
Options: imageNames,
800-
})
801-
if err != nil {
802-
return nil, err
803-
}
804-
}
805-
c.Dev.Terminal = &latest.Terminal{
806-
ImageSelector: fmt.Sprintf("${runtime.images.%s.image}:${runtime.images.%s.tag}", imageName, imageName),
796+
// if only one image exists, use it, otherwise show image picker
797+
imageName := ""
798+
if len(imageNames) == 1 {
799+
imageName = imageNames[0]
800+
} else {
801+
imageName, err = cmd.log.Question(&survey.QuestionOptions{
802+
Question: "Which image do you want to open a terminal to?",
803+
Options: imageNames,
804+
})
805+
if err != nil {
806+
return nil, err
807807
}
808808
}
809+
c.Dev.Terminal = &latest.Terminal{
810+
ImageSelector: fmt.Sprintf("${runtime.images.%s.image}:${runtime.images.%s.tag}", imageName, imageName),
811+
}
809812

810813
} else {
811814
c.Dev.Terminal.Disabled = false

e2e/tests/terminal/terminal.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,30 @@ var _ = DevSpaceDescribe("terminal", func() {
133133
err = <-done
134134
framework.ExpectNoError(err)
135135
})
136+
137+
ginkgo.It("should run command locally", func() {
138+
tempDir, err := framework.CopyToTempDir("tests/terminal/testdata/run_cmd_locally")
139+
framework.ExpectNoError(err)
140+
defer framework.CleanupTempDir(initialDir, tempDir)
141+
142+
ns, err := kubeClient.CreateNamespace("terminal")
143+
framework.ExpectNoError(err)
144+
defer framework.ExpectDeleteNamespace(kubeClient, ns)
145+
146+
interrupt := make(chan error)
147+
stdout := &Buffer{}
148+
devCmd := &cmd.DevCmd{
149+
GlobalFlags: &flags.GlobalFlags{
150+
NoWarn: true,
151+
Namespace: ns,
152+
},
153+
Interrupt: interrupt,
154+
Stdout: stdout,
155+
}
156+
err = devCmd.Run(f, nil)
157+
framework.ExpectNoError(err)
158+
framework.ExpectEqual("hello", strings.TrimSuffix(stdout.String(), "\n"))
159+
})
136160
})
137161

138162
// Buffer is a goroutine safe bytes.Buffer

e2e/tests/terminal/testdata/restart/devspace.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: v1beta10
1+
version: v1beta11
22
vars:
33
- name: IMAGE
44
value: john/devbackend
@@ -28,4 +28,4 @@ dev:
2828
path: spec.containers[0].workingDir
2929
value: "/workdir"
3030
terminal:
31-
imageSelector: ${IMAGE}
31+
imageSelector: ${IMAGE}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
version: v1beta11
2+
vars:
3+
- name: IMAGE
4+
value: john/devbackend
5+
deployments:
6+
- name: test
7+
helm:
8+
componentChart: true
9+
values:
10+
containers:
11+
- name: container-0
12+
image: ${IMAGE}
13+
dev:
14+
autoReload:
15+
paths:
16+
- ./devspace.yaml
17+
replacePods:
18+
- imageSelector: ${IMAGE}
19+
replaceImage: ubuntu:18.04
20+
patches:
21+
- op: add
22+
path: spec.containers[0].command
23+
value: ["sleep"]
24+
- op: add
25+
path: spec.containers[0].args
26+
value: ["9999999999"]
27+
- op: add
28+
path: spec.containers[0].workingDir
29+
value: "/workdir"
30+
terminal:
31+
command: ["echo", "hello"]

0 commit comments

Comments
 (0)