github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/test_integration/activity_integration_test.go (about) 1 // +build integration 2 3 package test_integration_test 4 5 import ( 6 "fmt" 7 "testing" 8 9 jenkinsio_v1 "github.com/jenkins-x/jx-api/pkg/apis/jenkins.io/v1" 10 "github.com/jenkins-x/jx-api/pkg/client/clientset/versioned" 11 v1 "github.com/jenkins-x/jx-api/pkg/client/clientset/versioned/typed/jenkins.io/v1" 12 "github.com/jenkins-x/jx/v2/pkg/cmd/clients" 13 "github.com/jenkins-x/jx/v2/pkg/kube" 14 core_v1 "k8s.io/api/core/v1" 15 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 16 "k8s.io/apimachinery/pkg/fields" 17 "k8s.io/apimachinery/pkg/labels" 18 "k8s.io/apimachinery/pkg/selection" 19 "k8s.io/apimachinery/pkg/util/rand" 20 "k8s.io/client-go/kubernetes" 21 22 . "github.com/onsi/ginkgo" 23 . "github.com/onsi/gomega" 24 ) 25 26 func TestPipelineActivity(t *testing.T) { 27 RegisterFailHandler(Fail) 28 RunSpecs(t, "Pipeline Activity Integration Test Suite") 29 } 30 31 var _ = Describe("PipelineActivity", func() { 32 33 Describe("#ListSelectedPipelineActivities", func() { 34 var ( 35 jxClient versioned.Interface 36 pipelineActivityClient v1.PipelineActivityInterface 37 testPipelineActivities []jenkinsio_v1.PipelineActivity 38 kubeClient kubernetes.Interface 39 testNamespace string 40 err error 41 ) 42 43 BeforeSuite(func() { 44 By("Creating JX and Kube Client") 45 factory := clients.NewFactory() 46 jxClient, _, err = factory.CreateJXClient() 47 Expect(err).Should(BeNil()) 48 49 kubeClient, _, err = factory.CreateKubeClient() 50 Expect(err).Should(BeNil()) 51 52 testNamespace = "activity-integration-test-" + rand.String(5) 53 By(fmt.Sprintf("Creating test namespace %s", testNamespace)) 54 55 err = createNamespace(kubeClient, testNamespace) 56 Expect(err).Should(BeNil()) 57 }) 58 59 BeforeEach(func() { 60 pipelineActivityClient = jxClient.JenkinsV1().PipelineActivities(testNamespace) 61 Expect(err).Should(BeNil()) 62 }) 63 64 AfterSuite(func() { 65 By(fmt.Sprintf("Deleting test namespace %s", testNamespace)) 66 err = deleteNamespace(kubeClient, testNamespace) 67 Expect(err).Should(BeNil()) 68 }) 69 70 Context("w/o PipelineActivity instances", func() { 71 It("should return the empty list with nil selectors", func() { 72 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, nil) 73 Expect(err).Should(BeNil()) 74 75 Expect(paList).ShouldNot(BeNil()) 76 Expect(len(paList.Items)).Should(Equal(0)) 77 }) 78 79 It("should return the empty list with any selectors", func() { 80 labelSelector := labels.Everything() 81 fieldSelector := fields.OneTermEqualSelector("foo", "bar") 82 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, labelSelector, fieldSelector) 83 Expect(err).Should(BeNil()) 84 85 Expect(paList).ShouldNot(BeNil()) 86 Expect(len(paList.Items)).Should(Equal(0)) 87 }) 88 }) 89 90 Context("w/ PipelineActivity instances", func() { 91 BeforeEach(func() { 92 if testPipelineActivities == nil { 93 By("Creating test PipelineActivities") 94 testPipelineActivities, err = createTestPipelineActivities(pipelineActivityClient) 95 Expect(err).Should(BeNil()) 96 } 97 }) 98 99 It("list w/o selectors should return all PipelineActivity instances", func() { 100 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, nil) 101 Expect(err).Should(BeNil()) 102 103 Expect(paList).ShouldNot(BeNil()) 104 Expect(len(paList.Items)).Should(Equal(len(testPipelineActivities))) 105 }) 106 107 It("list w/ label selectors should return PipelineActivity instances with matching label", func() { 108 requirement, err := labels.NewRequirement("gitBranch", selection.Equals, []string{"foo"}) 109 labelSelector := labels.NewSelector().Add(*requirement) 110 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, labelSelector, nil) 111 Expect(err).Should(BeNil()) 112 113 Expect(paList).ShouldNot(BeNil()) 114 Expect(len(paList.Items)).Should(Equal(0)) 115 116 requirement, err = labels.NewRequirement("branch", selection.Equals, []string{"branch-0"}) 117 labelSelector = labels.NewSelector().Add(*requirement) 118 paList, err = kube.ListSelectedPipelineActivities(pipelineActivityClient, labelSelector, nil) 119 Expect(err).Should(BeNil()) 120 121 Expect(paList).ShouldNot(BeNil()) 122 Expect(len(paList.Items)).Should(Equal(1)) 123 Expect(paList.Items[0].Spec).Should(Equal(testPipelineActivities[0].Spec)) 124 }) 125 126 It("list w/ field selectors should return PipelineActivity instances with matching fields", func() { 127 fieldSelector := fields.OneTermEqualSelector("gitOwner", "foo") 128 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, fieldSelector) 129 Expect(err).Should(BeNil()) 130 131 Expect(paList).ShouldNot(BeNil()) 132 Expect(len(paList.Items)).Should(Equal(0)) 133 134 fieldSelector = fields.OneTermEqualSelector("spec.gitOwner", "johndoe-0") 135 paList, err = kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, fieldSelector) 136 Expect(err).Should(BeNil()) 137 138 Expect(paList).ShouldNot(BeNil()) 139 Expect(len(paList.Items)).Should(Equal(1)) 140 Expect(paList.Items[0].Spec).Should(Equal(testPipelineActivities[0].Spec)) 141 142 gitOwnerSelector := fields.OneTermEqualSelector("spec.gitOwner", "johndoe-0") 143 gitRepoSelector := fields.OneTermEqualSelector("spec.gitRepository", "foo-0") 144 fieldSelector = fields.AndSelectors(gitOwnerSelector, gitRepoSelector) 145 paList, err = kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, fieldSelector) 146 Expect(err).Should(BeNil()) 147 148 Expect(paList).ShouldNot(BeNil()) 149 Expect(len(paList.Items)).Should(Equal(1)) 150 Expect(paList.Items[0].Spec).Should(Equal(testPipelineActivities[0].Spec)) 151 }) 152 153 It("list w/ multiple field selectors should return PipelineActivity instances with matching fields", func() { 154 gitOwnerSelector := fields.OneTermEqualSelector("spec.gitOwner", "johndoe-0") 155 gitRepoSelector := fields.OneTermEqualSelector("spec.gitRepository", "bar") 156 fieldSelector := fields.AndSelectors(gitOwnerSelector, gitRepoSelector) 157 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, fieldSelector) 158 Expect(err).Should(BeNil()) 159 160 Expect(paList).ShouldNot(BeNil()) 161 Expect(len(paList.Items)).Should(Equal(0)) 162 163 gitOwnerSelector = fields.OneTermEqualSelector("spec.gitOwner", "johndoe-0") 164 gitRepoSelector = fields.OneTermEqualSelector("spec.gitRepository", "foo-0") 165 fieldSelector = fields.AndSelectors(gitOwnerSelector, gitRepoSelector) 166 paList, err = kube.ListSelectedPipelineActivities(pipelineActivityClient, nil, fieldSelector) 167 Expect(err).Should(BeNil()) 168 169 Expect(paList).ShouldNot(BeNil()) 170 Expect(len(paList.Items)).Should(Equal(1)) 171 Expect(paList.Items[0].Spec).Should(Equal(testPipelineActivities[0].Spec)) 172 }) 173 174 It("list w/ field and label selectors should return matching PipelineActivity instances", func() { 175 requirement, err := labels.NewRequirement("branch", selection.Equals, []string{"branch-5"}) 176 labelSelector := labels.NewSelector().Add(*requirement) 177 178 fieldSelector := fields.OneTermEqualSelector("spec.gitRepository", "foo-5") 179 paList, err := kube.ListSelectedPipelineActivities(pipelineActivityClient, labelSelector, fieldSelector) 180 Expect(err).Should(BeNil()) 181 182 Expect(paList).ShouldNot(BeNil()) 183 Expect(len(paList.Items)).Should(Equal(2)) 184 }) 185 }) 186 }) 187 }) 188 189 func createNamespace(client kubernetes.Interface, ns string) error { 190 namespace := core_v1.Namespace{ 191 ObjectMeta: meta_v1.ObjectMeta{ 192 Name: ns, 193 }, 194 } 195 _, err := client.CoreV1().Namespaces().Create(&namespace) 196 return err 197 } 198 199 func deleteNamespace(client kubernetes.Interface, ns string) error { 200 return client.CoreV1().Namespaces().Delete(ns, &meta_v1.DeleteOptions{}) 201 } 202 203 func createTestPipelineActivities(client v1.PipelineActivityInterface) ([]jenkinsio_v1.PipelineActivity, error) { 204 var pipelineActivities []jenkinsio_v1.PipelineActivity 205 var clone jenkinsio_v1.PipelineActivity 206 207 for i := 0; i < 10; i++ { 208 pa := jenkinsio_v1.PipelineActivity{ 209 ObjectMeta: meta_v1.ObjectMeta{ 210 Name: fmt.Sprintf("pa-%d", i), 211 Labels: map[string]string{ 212 "lastCommitSHA": fmt.Sprintf("%d", i), 213 "branch": fmt.Sprintf("branch-%d", i), 214 }, 215 }, 216 Spec: jenkinsio_v1.PipelineActivitySpec{ 217 GitOwner: fmt.Sprintf("johndoe-%d", i), 218 GitRepository: fmt.Sprintf("foo-%d", i), 219 LastCommitSHA: fmt.Sprintf("%d", i), 220 GitBranch: fmt.Sprintf("branch-%d", i), 221 }, 222 } 223 224 if i == 5 { 225 clone = *pa.DeepCopy() 226 clone.Name = clone.Name + "-clone" 227 created, err := client.Create(&clone) 228 if err != nil { 229 return nil, err 230 } 231 pipelineActivities = append(pipelineActivities, *created) 232 } 233 234 created, err := client.Create(&pa) 235 if err != nil { 236 return nil, err 237 } 238 pipelineActivities = append(pipelineActivities, *created) 239 } 240 241 return pipelineActivities, nil 242 }