@@ -20,9 +20,7 @@ package test
2020
2121import (
2222 "fmt"
23- "net/http"
2423 "testing"
25- "time"
2624
2725 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1alpha1"
2826 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1beta1"
@@ -31,9 +29,7 @@ import (
3129 tb "github.com/tektoncd/pipeline/test/builder"
3230 corev1 "k8s.io/api/core/v1"
3331 rbacv1 "k8s.io/api/rbac/v1beta1"
34- "k8s.io/apimachinery/pkg/api/errors"
3532 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36- "k8s.io/apimachinery/pkg/util/wait"
3733 knativetest "knative.dev/pkg/test"
3834)
3935
@@ -42,14 +38,14 @@ const (
4238 sourceImageName = "go-helloworld-image"
4339 createImageTaskName = "create-image-task"
4440 helmDeployTaskName = "helm-deploy-task"
41+ checkServiceTaskName = "check-service-task"
4542 helmDeployPipelineName = "helm-deploy-pipeline"
4643 helmDeployPipelineRunName = "helm-deploy-pipeline-run"
4744 helmDeployServiceName = "gohelloworld-chart"
4845)
4946
5047var (
51- clusterRoleBindings [3 ]* rbacv1.ClusterRoleBinding
52- tillerServiceAccount * corev1.ServiceAccount
48+ clusterRoleBindings [1 ]* rbacv1.ClusterRoleBinding
5349)
5450
5551// TestHelmDeployPipelineRun is an integration test that will verify a pipeline build an image
@@ -82,6 +78,11 @@ func TestHelmDeployPipelineRun(t *testing.T) {
8278 t .Fatalf ("Failed to create Task `%s`: %s" , helmDeployTaskName , err )
8379 }
8480
81+ t .Logf ("Creating Task %s" , checkServiceTaskName )
82+ if _ , err := c .TaskClient .Create (getCheckServiceTask (namespace )); err != nil {
83+ t .Fatalf ("Failed to create Task `%s`: %s" , checkServiceTaskName , err )
84+ }
85+
8586 t .Logf ("Creating Pipeline %s" , helmDeployPipelineName )
8687 if _ , err := c .PipelineClient .Create (getHelmDeployPipeline (namespace )); err != nil {
8788 t .Fatalf ("Failed to create Pipeline `%s`: %s" , helmDeployPipelineName , err )
@@ -98,44 +99,9 @@ func TestHelmDeployPipelineRun(t *testing.T) {
9899 t .Fatalf ("PipelineRun execution failed; helm may or may not have been installed :(" )
99100 }
100101
101- t .Log ("Waiting for service to get external IP" )
102- var serviceIP string
103- if err := WaitForServiceExternalIPState (c , namespace , helmDeployServiceName , func (svc * corev1.Service ) (bool , error ) {
104- ingress := svc .Status .LoadBalancer .Ingress
105- if ingress != nil {
106- if len (ingress ) > 0 {
107- serviceIP = ingress [0 ].IP
108- return true , nil
109- }
110- }
111- return false , nil
112- }, "ServiceExternalIPisReady" ); err != nil {
113- t .Errorf ("Error waiting for Service %s to get an external IP: %s" , helmDeployServiceName , err )
114- }
115-
116- // cleanup task to remove helm from cluster, will not fail the test if it fails, just log
102+ // cleanup task to remove helm releases from cluster and cluster role bindings, will not fail the test if it fails, just log
117103 knativetest .CleanupOnInterrupt (func () { helmCleanup (c , t , namespace ) }, t .Logf )
118104 defer helmCleanup (c , t , namespace )
119-
120- if serviceIP != "" {
121- t .Log ("Polling service with external IP" )
122- waitErr := wait .PollImmediate (100 * time .Millisecond , 30 * time .Second , func () (bool , error ) {
123- resp , err := http .Get (fmt .Sprintf ("http://%s:8080" , serviceIP ))
124- if err != nil {
125- return false , nil
126- }
127- if resp != nil && resp .StatusCode != http .StatusOK {
128- return true , fmt .Errorf ("expected 200 but received %d response code from service at http://%s:8080" , resp .StatusCode , serviceIP )
129- }
130- return true , nil
131- })
132- if waitErr != nil {
133- t .Errorf ("Error from pinging service IP %s : %s" , serviceIP , waitErr )
134- }
135-
136- } else {
137- t .Errorf ("Service IP is empty." )
138- }
139105}
140106
141107func getGoHelloworldGitResource (namespace string ) * v1alpha1.PipelineResource {
@@ -197,16 +163,49 @@ func getHelmDeployTask(namespace string) *v1beta1.Task {
197163 Name : "chartname" , Type : v1beta1 .ParamTypeString , Default : & empty ,
198164 }},
199165 Steps : []v1beta1.Step {{Container : corev1.Container {
200- Image : "alpine/helm:2.14.0" ,
201- Args : []string {"init" , "--wait" },
202- }}, {Container : corev1.Container {
203- Image : "alpine/helm:2.14.0" ,
204- Args : []string {"install" ,
166+ Image : "alpine/helm:3.1.2" ,
167+ Args : []string {
168+ "upgrade" ,
169+ "--wait" ,
205170 "--debug" ,
206- "--name=$(inputs.params.chartname)" ,
171+ "--install" ,
172+ "--namespace" ,
173+ namespace ,
174+ "$(inputs.params.chartname)" ,
207175 "$(inputs.params.pathToHelmCharts)" ,
208176 "--set" ,
209177 "image.repository=$(inputs.resources.image.url)" ,
178+ "--set" ,
179+ "service.type=ClusterIP" ,
180+ },
181+ }}, {Container : corev1.Container {
182+ Image : "lachlanevenson/k8s-kubectl" ,
183+ Command : []string {"kubectl" },
184+ Args : []string {
185+ "get" ,
186+ "all" ,
187+ "--namespace" ,
188+ namespace ,
189+ },
190+ }}},
191+ },
192+ }
193+ }
194+
195+ func getCheckServiceTask (namespace string ) * v1beta1.Task {
196+ return & v1beta1.Task {
197+ ObjectMeta : metav1.ObjectMeta {Name : checkServiceTaskName , Namespace : namespace },
198+ Spec : v1beta1.TaskSpec {
199+ Params : []v1beta1.ParamSpec {{
200+ Name : "serviceUrl" , Type : v1beta1 .ParamTypeString , Description : "Service url" ,
201+ }},
202+ Steps : []v1beta1.Step {{Container : corev1.Container {
203+ Image : "jwilder/dockerize" ,
204+ Args : []string {
205+ "-wait" ,
206+ "$(inputs.params.serviceUrl)" ,
207+ "-timeout" ,
208+ "1m" ,
210209 },
211210 }}},
212211 },
@@ -251,6 +250,13 @@ func getHelmDeployPipeline(namespace string) *v1beta1.Pipeline {
251250 }, {
252251 Name : "chartname" , Value : v1beta1 .NewArrayOrString ("$(params.chartname)" ),
253252 }},
253+ }, {
254+ Name : "check-service" ,
255+ TaskRef : & v1beta1.TaskRef {Name : checkServiceTaskName },
256+ Params : []v1beta1.Param {{
257+ Name : "serviceUrl" , Value : v1beta1 .NewArrayOrString (fmt .Sprintf ("http://%s:8080" , helmDeployServiceName )),
258+ }},
259+ RunAfter : []string {"helm-deploy" },
254260 }},
255261 },
256262 }
@@ -274,37 +280,7 @@ func getHelmDeployPipelineRun(namespace string) *v1beta1.PipelineRun {
274280}
275281
276282func setupClusterBindingForHelm (c * clients , t * testing.T , namespace string ) {
277- tillerServiceAccount = & corev1.ServiceAccount {
278- ObjectMeta : metav1.ObjectMeta {
279- Name : "tiller" ,
280- Namespace : "kube-system" ,
281- },
282- }
283-
284- t .Logf ("Creating tiller service account" )
285- if _ , err := c .KubeClient .Kube .CoreV1 ().ServiceAccounts ("kube-system" ).Create (tillerServiceAccount ); err != nil {
286- if ! errors .IsAlreadyExists (err ) {
287- t .Fatalf ("Failed to create default Service account for Helm %s" , err )
288- }
289- }
290-
291283 clusterRoleBindings [0 ] = & rbacv1.ClusterRoleBinding {
292- ObjectMeta : metav1.ObjectMeta {
293- Name : names .SimpleNameGenerator .RestrictLengthWithRandomSuffix ("tiller" ),
294- },
295- RoleRef : rbacv1.RoleRef {
296- APIGroup : "rbac.authorization.k8s.io" ,
297- Kind : "ClusterRole" ,
298- Name : "cluster-admin" ,
299- },
300- Subjects : []rbacv1.Subject {{
301- Kind : "ServiceAccount" ,
302- Name : "tiller" ,
303- Namespace : "kube-system" ,
304- }},
305- }
306-
307- clusterRoleBindings [1 ] = & rbacv1.ClusterRoleBinding {
308284 ObjectMeta : metav1.ObjectMeta {
309285 Name : names .SimpleNameGenerator .RestrictLengthWithRandomSuffix ("default-tiller" ),
310286 },
@@ -320,22 +296,6 @@ func setupClusterBindingForHelm(c *clients, t *testing.T, namespace string) {
320296 }},
321297 }
322298
323- clusterRoleBindings [2 ] = & rbacv1.ClusterRoleBinding {
324- ObjectMeta : metav1.ObjectMeta {
325- Name : names .SimpleNameGenerator .RestrictLengthWithRandomSuffix ("default-tiller" ),
326- },
327- RoleRef : rbacv1.RoleRef {
328- APIGroup : "rbac.authorization.k8s.io" ,
329- Kind : "ClusterRole" ,
330- Name : "cluster-admin" ,
331- },
332- Subjects : []rbacv1.Subject {{
333- Kind : "ServiceAccount" ,
334- Name : "default" ,
335- Namespace : "kube-system" ,
336- }},
337- }
338-
339299 for _ , crb := range clusterRoleBindings {
340300 t .Logf ("Creating Cluster Role binding %s for helm" , crb .Name )
341301 if _ , err := c .KubeClient .Kube .RbacV1beta1 ().ClusterRoleBindings ().Create (crb ); err != nil {
@@ -348,12 +308,6 @@ func helmCleanup(c *clients, t *testing.T, namespace string) {
348308 t .Logf ("Cleaning up helm from cluster..." )
349309
350310 removeAllHelmReleases (c , t , namespace )
351- removeHelmFromCluster (c , t , namespace )
352-
353- t .Logf ("Deleting tiller service account" )
354- if err := c .KubeClient .Kube .CoreV1 ().ServiceAccounts ("kube-system" ).Delete ("tiller" , & metav1.DeleteOptions {}); err != nil {
355- t .Fatalf ("Failed to delete default Service account for Helm %s" , err )
356- }
357311
358312 for _ , crb := range clusterRoleBindings {
359313 t .Logf ("Deleting Cluster Role binding %s for helm" , crb .Name )
@@ -370,9 +324,9 @@ func removeAllHelmReleases(c *clients, t *testing.T, namespace string) {
370324 Spec : v1beta1.TaskSpec {
371325 Steps : []v1beta1.Step {{Container : corev1.Container {
372326 Name : "helm-remove-all" ,
373- Image : "alpine/helm:2.14.0 " ,
327+ Image : "alpine/helm:3.1.2 " ,
374328 Command : []string {"/bin/sh" },
375- Args : []string {"-c" , "helm ls --short --all | xargs -n1 helm del --purge" },
329+ Args : []string {"-c" , fmt . Sprintf ( "helm ls --short --all --namespace %s | xargs -n1 helm delete --namespace %s" , namespace , namespace ) },
376330 }}},
377331 },
378332 }
@@ -400,39 +354,3 @@ func removeAllHelmReleases(c *clients, t *testing.T, namespace string) {
400354 t .Logf ("TaskRun %s failed to finish: %s" , helmRemoveAllTaskRunName , err )
401355 }
402356}
403-
404- func removeHelmFromCluster (c * clients , t * testing.T , namespace string ) {
405- helmResetTaskName := "helm-reset-task"
406- helmResetTask := & v1beta1.Task {
407- ObjectMeta : metav1.ObjectMeta {Name : helmResetTaskName , Namespace : namespace },
408- Spec : v1beta1.TaskSpec {
409- Steps : []v1beta1.Step {{Container : corev1.Container {
410- Image : "alpine/helm:2.14.0" ,
411- Args : []string {"reset" , "--force" },
412- }}},
413- },
414- }
415-
416- helmResetTaskRunName := "helm-reset-taskrun"
417- helmResetTaskRun := & v1beta1.TaskRun {
418- ObjectMeta : metav1.ObjectMeta {Name : helmResetTaskRunName , Namespace : namespace },
419- Spec : v1beta1.TaskRunSpec {
420- TaskRef : & v1beta1.TaskRef {Name : helmResetTaskName },
421- },
422- }
423-
424- t .Logf ("Creating Task %s" , helmResetTaskName )
425- if _ , err := c .TaskClient .Create (helmResetTask ); err != nil {
426- t .Fatalf ("Failed to create Task `%s`: %s" , helmResetTaskName , err )
427- }
428-
429- t .Logf ("Creating TaskRun %s" , helmResetTaskRunName )
430- if _ , err := c .TaskRunClient .Create (helmResetTaskRun ); err != nil {
431- t .Fatalf ("Failed to create TaskRun `%s`: %s" , helmResetTaskRunName , err )
432- }
433-
434- t .Logf ("Waiting for TaskRun %s in namespace %s to complete" , helmResetTaskRunName , namespace )
435- if err := WaitForTaskRunState (c , helmResetTaskRunName , TaskRunSucceed (helmResetTaskRunName ), "TaskRunSuccess" ); err != nil {
436- t .Logf ("TaskRun %s failed to finish: %s" , helmResetTaskRunName , err )
437- }
438- }
0 commit comments