Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/test/tests/workspace/example_test.go
2498 views
1
// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
2
// Licensed under the GNU Affero General Public License (AGPL).
3
// See License.AGPL.txt in the project root for license information.
4
5
package workspace
6
7
import (
8
"context"
9
"os"
10
"testing"
11
"time"
12
13
"sigs.k8s.io/e2e-framework/pkg/envconf"
14
"sigs.k8s.io/e2e-framework/pkg/features"
15
16
agent "github.com/gitpod-io/gitpod/test/pkg/agent/workspace/api"
17
"github.com/gitpod-io/gitpod/test/pkg/integration"
18
"github.com/gitpod-io/gitpod/test/pkg/report"
19
)
20
21
func TestWorkspaceInstrumentation(t *testing.T) {
22
userToken, _ := os.LookupEnv("USER_TOKEN")
23
integration.SkipWithoutUsername(t, username)
24
integration.SkipWithoutUserToken(t, userToken)
25
tests := []struct {
26
Name string
27
ContextURL string
28
WorkspaceRoot string
29
}{
30
{
31
Name: "example",
32
ContextURL: "https://github.com/gitpod-io/empty",
33
WorkspaceRoot: "/workspace/empty",
34
},
35
}
36
37
f := features.New("instrumentation").
38
WithLabel("component", "server").
39
Assess("it can instrument a workspace", func(testCtx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
40
for _, test := range tests {
41
test := test
42
t.Run(test.ContextURL, func(t *testing.T) {
43
report.SetupReport(t, report.FeatureExample, "this is the example test for instrumenting a workspace")
44
45
t.Parallel()
46
47
ctx, cancel := context.WithTimeout(testCtx, time.Duration(5*len(tests))*time.Minute)
48
defer cancel()
49
50
api := integration.NewComponentAPI(ctx, cfg.Namespace(), kubeconfig, cfg.Client())
51
t.Cleanup(func() {
52
api.Done(t)
53
})
54
55
_, err := api.CreateUser(username, userToken)
56
if err != nil {
57
t.Fatal(err)
58
}
59
60
nfo, stopWs, err := integration.LaunchWorkspaceFromContextURL(t, ctx, test.ContextURL, username, api)
61
if err != nil {
62
t.Fatal(err)
63
}
64
65
t.Cleanup(func() {
66
sctx, scancel := context.WithTimeout(context.Background(), 5*time.Minute)
67
defer scancel()
68
69
sapi := integration.NewComponentAPI(sctx, cfg.Namespace(), kubeconfig, cfg.Client())
70
defer sapi.Done(t)
71
72
_, err := stopWs(true, sapi)
73
if err != nil {
74
t.Fatal(err)
75
}
76
})
77
78
rsa, closer, err := integration.Instrument(integration.ComponentWorkspace, "workspace", cfg.Namespace(), kubeconfig, cfg.Client(), integration.WithInstanceID(nfo.LatestInstance.ID))
79
if err != nil {
80
t.Fatal(err)
81
}
82
defer rsa.Close()
83
integration.DeferCloser(t, closer)
84
85
var ls agent.ListDirResponse
86
err = rsa.Call("WorkspaceAgent.ListDir", &agent.ListDirRequest{
87
Dir: test.WorkspaceRoot,
88
}, &ls)
89
if err != nil {
90
t.Fatal(err)
91
}
92
for _, f := range ls.Files {
93
t.Log(f)
94
}
95
})
96
}
97
98
return testCtx
99
}).
100
Feature()
101
102
testEnv.Test(t, f)
103
}
104
105
func TestLaunchWorkspaceDirectly(t *testing.T) {
106
f := features.New("workspace").
107
WithLabel("component", "server").
108
Assess("it can run workspace tasks", func(testCtx context.Context, t *testing.T, cfg *envconf.Config) context.Context {
109
t.Parallel()
110
111
ctx, cancel := context.WithTimeout(testCtx, 5*time.Minute)
112
defer cancel()
113
114
api := integration.NewComponentAPI(ctx, cfg.Namespace(), kubeconfig, cfg.Client())
115
t.Cleanup(func() {
116
api.Done(t)
117
})
118
119
_, stopWs, err := integration.LaunchWorkspaceDirectly(t, ctx, api)
120
if err != nil {
121
t.Fatal(err)
122
}
123
124
t.Cleanup(func() {
125
sctx, scancel := context.WithTimeout(context.Background(), 5*time.Minute)
126
defer scancel()
127
128
sapi := integration.NewComponentAPI(sctx, cfg.Namespace(), kubeconfig, cfg.Client())
129
defer sapi.Done(t)
130
131
_, err := stopWs(true, sapi)
132
if err != nil {
133
t.Fatal(err)
134
}
135
})
136
137
return testCtx
138
}).
139
Feature()
140
141
testEnv.Test(t, f)
142
}
143
144