Skip to content

Commit 1269116

Browse files
added e2e test for port forwarding and reverse forwarding
1 parent a8eac02 commit 1269116

25 files changed

Lines changed: 15548 additions & 16 deletions

File tree

e2e/e2e_suite_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
_ "github.com/loft-sh/devspace/e2e/tests/imports"
2020
_ "github.com/loft-sh/devspace/e2e/tests/init"
2121
_ "github.com/loft-sh/devspace/e2e/tests/pipelines"
22+
_ "github.com/loft-sh/devspace/e2e/tests/portforward"
2223
_ "github.com/loft-sh/devspace/e2e/tests/proxycommands"
2324
_ "github.com/loft-sh/devspace/e2e/tests/pullsecret"
2425
_ "github.com/loft-sh/devspace/e2e/tests/render"

e2e/framework/helper.go

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ package framework
22

33
import (
44
"fmt"
5-
"io/ioutil"
6-
"os"
7-
"strings"
8-
"time"
9-
5+
"github.com/go-resty/resty/v2"
106
"github.com/loft-sh/devspace/e2e/kube"
117
"github.com/onsi/gomega"
128
"github.com/pkg/errors"
9+
"io/ioutil"
1310
"k8s.io/apimachinery/pkg/util/wait"
11+
"os"
12+
"strings"
13+
"time"
1414
)
1515

1616
// ExpectEqual expects the specified two are the same, otherwise an exception raises
@@ -75,6 +75,30 @@ func ExpectRemoteFileContents(imageSelector string, namespace string, filePath s
7575
ExpectNoErrorWithOffset(1, err)
7676
}
7777

78+
func ExpectLocalCurlContents(urlString string, contents string) {
79+
client := resty.New()
80+
err := wait.PollImmediate(time.Second, time.Minute*2, func() (done bool, err error) {
81+
resp, err := client.R().
82+
EnableTrace().
83+
Get(urlString)
84+
return strings.TrimSpace(string(resp.Body())) == strings.TrimSpace(contents), nil
85+
})
86+
ExpectNoErrorWithOffset(1, err)
87+
}
88+
89+
func ExpectRemoteCurlContents(imageSelector string, namespace string, urlString string, contents string) {
90+
kubeClient, err := kube.NewKubeHelper()
91+
ExpectNoErrorWithOffset(1, err)
92+
err = wait.PollImmediate(time.Second, time.Minute*2, func() (done bool, err error) {
93+
out, err := kubeClient.ExecByImageSelector(imageSelector, namespace, []string{"curl", urlString})
94+
if err != nil {
95+
return false, nil
96+
}
97+
return strings.TrimSpace(out) == strings.TrimSpace(contents), nil
98+
})
99+
ExpectNoErrorWithOffset(1, err)
100+
}
101+
78102
func ExpectRemoteFileNotFound(imageSelector string, namespace string, filePath string) {
79103
kubeClient, err := kube.NewKubeHelper()
80104
ExpectNoErrorWithOffset(1, err)

e2e/tests/pipelines/pipelines.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"github.com/onsi/ginkgo"
1515
)
1616

17-
var _ = DevSpaceDescribe("portforward", func() {
17+
var _ = DevSpaceDescribe("pipelines", func() {
1818
initialDir, err := os.Getwd()
1919
if err != nil {
2020
panic(err)
Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,83 @@
11
package portforward
22

33
import (
4+
"context"
5+
"fmt"
6+
"github.com/loft-sh/devspace/cmd"
7+
"github.com/loft-sh/devspace/cmd/flags"
8+
"github.com/loft-sh/devspace/e2e/framework"
9+
"github.com/loft-sh/devspace/e2e/kube"
10+
"github.com/loft-sh/devspace/pkg/util/factory"
411
"github.com/onsi/ginkgo"
12+
"net/http"
13+
"os"
514
)
615

716
var _ = DevSpaceDescribe("portforward", func() {
8-
ginkgo.It("should forward ports", func() {
9-
// TODO
10-
})
17+
initialDir, err := os.Getwd()
18+
if err != nil {
19+
panic(err)
20+
}
1121

12-
ginkgo.It("should restart port forwarding", func() {
13-
// TODO
14-
})
22+
// create a new factory
23+
var (
24+
f factory.Factory
25+
kubeClient *kube.KubeHelper
26+
)
27+
28+
ginkgo.BeforeEach(func() {
29+
f = framework.NewDefaultFactory()
1530

16-
ginkgo.It("should reverse forward ports", func() {
17-
// TODO
31+
kubeClient, err = kube.NewKubeHelper()
32+
framework.ExpectNoError(err)
33+
34+
go func() {
35+
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
36+
_, _ = fmt.Fprintf(w, "Hello World!")
37+
})
38+
fmt.Println("Server started at port 8888")
39+
err := http.ListenAndServe(":8888", nil)
40+
framework.ExpectNoError(err)
41+
}()
1842
})
1943

20-
ginkgo.It("should restart reverse forward ports", func() {
21-
// TODO
44+
ginkgo.It("should forward and reverse forward ports", func() {
45+
tempDir, err := framework.CopyToTempDir("tests/portforward/testdata/portforward-simple")
46+
framework.ExpectNoError(err)
47+
defer framework.CleanupTempDir(initialDir, tempDir)
48+
49+
ns, err := kubeClient.CreateNamespace("portforward")
50+
framework.ExpectNoError(err)
51+
defer framework.ExpectDeleteNamespace(kubeClient, ns)
52+
53+
// create a new dev command and start it
54+
done := make(chan error)
55+
cancelCtx, cancel := context.WithCancel(context.Background())
56+
defer cancel()
57+
58+
go func() {
59+
defer ginkgo.GinkgoRecover()
60+
devCmd := &cmd.RunPipelineCmd{
61+
GlobalFlags: &flags.GlobalFlags{
62+
NoWarn: true,
63+
Namespace: ns,
64+
ConfigPath: "devspace.yaml",
65+
},
66+
Pipeline: "dev",
67+
Ctx: cancelCtx,
68+
}
69+
done <- devCmd.RunDefault(f)
70+
}()
71+
72+
framework.ExpectRemoteCurlContents("ghcr.io/vaikunthawasi/portforward-ex", ns, "localhost:3000", "Hello World!")
73+
framework.ExpectLocalCurlContents("http://localhost:3000", "Hello World!")
74+
75+
framework.ExpectLocalCurlContents("http://localhost:8888", "Hello World!")
76+
framework.ExpectRemoteCurlContents("ghcr.io/vaikunthawasi/portforward-ex", ns, "localhost:8888", "Hello World!")
77+
78+
cancel()
79+
err = <-done
80+
framework.ExpectNoError(err)
2281
})
82+
2383
})
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
version: v2beta1
2+
name: portforward-ex
3+
4+
deployments:
5+
app:
6+
helm:
7+
values:
8+
containers:
9+
- image: ghcr.io/vaikunthawasi/portforward-ex
10+
# imagePullPolicy: Never
11+
dev:
12+
app:
13+
imageSelector: ghcr.io/vaikunthawasi/portforward-ex
14+
ports:
15+
- port: "3000"
16+
reversePorts:
17+
- port: "8888"

vendor/github.com/go-resty/resty/v2/.gitignore

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/go-resty/resty/v2/BUILD.bazel

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/go-resty/resty/v2/LICENSE

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)