@@ -70,7 +70,7 @@ func TestMaintenance(t *testing.T) {
70
70
api .Done (t )
71
71
})
72
72
73
- addInitTask := func (swr * wsmanapi.StartWorkspaceRequest ) error {
73
+ customizeWorkspace := func (swr * wsmanapi.StartWorkspaceRequest ) error {
74
74
swr .Spec .Initializer = & csapi.WorkspaceInitializer {
75
75
Spec : & csapi.WorkspaceInitializer_Git {
76
76
Git : & csapi.GitInitializer {
@@ -84,7 +84,7 @@ func TestMaintenance(t *testing.T) {
84
84
return nil
85
85
}
86
86
87
- _ , _ , err = integration .LaunchWorkspaceDirectly (t , ctx , api , integration .WithRequestModifier (addInitTask ))
87
+ _ , _ , err = integration .LaunchWorkspaceDirectly (t , ctx , api , integration .WithRequestModifier (customizeWorkspace ))
88
88
if err == nil {
89
89
t .Fatalf ("expected under maintenance error" )
90
90
} else {
@@ -100,6 +100,103 @@ func TestMaintenance(t *testing.T) {
100
100
testEnv .Test (t , f )
101
101
}
102
102
103
+ func TestMaintenanceUpdate (t * testing.T ) {
104
+ testRepo := "https://github.com/gitpod-io/empty"
105
+ testRepoName := "empty"
106
+
107
+ f := features .New ("ws-manager" ).
108
+ WithLabel ("component" , "ws-manager" ).
109
+ WithLabel ("type" , "maintenance" ).
110
+ Assess ("should display a maintenance message when configured and not when disabled" , func (testCtx context.Context , t * testing.T , cfg * envconf.Config ) context.Context {
111
+ kubeClient , err := cfg .NewClient ()
112
+ if err != nil {
113
+ t .Fatal (err )
114
+ }
115
+
116
+ untilTime := time .Now ().Add (1 * time .Hour )
117
+ cmap , err := maintenanceConfigmap (& untilTime )
118
+ if err != nil {
119
+ t .Fatal (err )
120
+ }
121
+
122
+ err = kubeClient .Resources ().Create (testCtx , cmap )
123
+ if err != nil && ! apierrors .IsAlreadyExists (err ) {
124
+ t .Fatal (err )
125
+ }
126
+
127
+ disableMaintenanceMode := func () {
128
+ cmap , err := maintenanceConfigmap (nil )
129
+ if err != nil {
130
+ t .Error (err )
131
+ return
132
+ }
133
+
134
+ err = kubeClient .Resources ().Update (testCtx , cmap )
135
+ if err != nil {
136
+ t .Error (err )
137
+ }
138
+ }
139
+
140
+ disableMaintenanceMode ()
141
+
142
+ ctx , cancel := context .WithTimeout (testCtx , time .Duration (5 * time .Minute ))
143
+ defer cancel ()
144
+
145
+ api := integration .NewComponentAPI (ctx , cfg .Namespace (), kubeconfig , cfg .Client ())
146
+ t .Cleanup (func () {
147
+ api .Done (t )
148
+ })
149
+
150
+ _ , _ , err = integration .LaunchWorkspaceDirectly (t , ctx , api , integration .WithRequestModifier (func (swr * wsmanapi.StartWorkspaceRequest ) error {
151
+ swr .Spec .Initializer = & csapi.WorkspaceInitializer {
152
+ Spec : & csapi.WorkspaceInitializer_Git {
153
+ Git : & csapi.GitInitializer {
154
+ RemoteUri : testRepo ,
155
+ CheckoutLocation : testRepoName ,
156
+ Config : & csapi.GitConfig {},
157
+ },
158
+ },
159
+ }
160
+ swr .Spec .WorkspaceLocation = testRepoName
161
+ return nil
162
+ }))
163
+ if err == nil {
164
+ t .Fatalf ("expected under maintenance error" )
165
+ } else {
166
+ if ! errors .Is (err , status .Error (codes .FailedPrecondition , "under maintenance" )) {
167
+ t .Fatal (err )
168
+ }
169
+ }
170
+
171
+ disableMaintenanceMode ()
172
+
173
+ _ , stopWs , err := integration .LaunchWorkspaceDirectly (t , ctx , api , integration .WithRequestModifier (func (swr * wsmanapi.StartWorkspaceRequest ) error {
174
+ swr .Spec .Initializer = & csapi.WorkspaceInitializer {
175
+ Spec : & csapi.WorkspaceInitializer_Git {
176
+ Git : & csapi.GitInitializer {
177
+ RemoteUri : testRepo ,
178
+ CheckoutLocation : testRepoName ,
179
+ Config : & csapi.GitConfig {},
180
+ },
181
+ },
182
+ }
183
+ swr .Spec .WorkspaceLocation = testRepoName
184
+ return nil
185
+ }))
186
+ if err != nil {
187
+ t .Fatal (err )
188
+ }
189
+
190
+ if err := stopWorkspace (t , cfg , stopWs ); err != nil {
191
+ t .Errorf ("cannot stop workspace: %q" , err )
192
+ }
193
+
194
+ return testCtx
195
+ }).
196
+ Feature ()
197
+
198
+ testEnv .Test (t , f )
199
+ }
103
200
func maintenanceConfigmap (untilTime * time.Time ) (* corev1.ConfigMap , error ) {
104
201
mcfg := config.MaintenanceConfig {}
105
202
if untilTime != nil {
0 commit comments