github.com/wdesplas/cloud-service-broker@v0.0.0-20211027135251-516a8547ca4c/integrationtest/catalog_test.go (about) 1 package integrationtest_test 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path" 8 "time" 9 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 . "github.com/onsi/gomega/gbytes" 13 . "github.com/onsi/gomega/gexec" 14 "github.com/pborman/uuid" 15 _ "gorm.io/driver/sqlite" 16 ) 17 18 var _ = Describe("Catalog", func() { 19 20 var ( 21 originalDir string 22 fixturesDir string 23 workDir string 24 brokerPort int 25 brokerUsername string 26 brokerPassword string 27 brokerSession *Session 28 databaseFile string 29 runBrokerCommand *exec.Cmd 30 ) 31 32 BeforeEach(func() { 33 var err error 34 originalDir, err = os.Getwd() 35 Expect(err).NotTo(HaveOccurred()) 36 fixturesDir = path.Join(originalDir, "fixtures", "brokerpak-for-catalog-test") 37 38 workDir, err = os.MkdirTemp("", "*-csb-test") 39 Expect(err).NotTo(HaveOccurred()) 40 err = os.Chdir(workDir) 41 Expect(err).NotTo(HaveOccurred()) 42 43 buildBrokerpakCommand := exec.Command(csb, "pak", "build", fixturesDir) 44 session, err := Start(buildBrokerpakCommand, GinkgoWriter, GinkgoWriter) 45 Expect(err).NotTo(HaveOccurred()) 46 Eventually(session, 10*time.Minute).Should(Exit(0)) 47 48 brokerUsername = uuid.New() 49 brokerPassword = uuid.New() 50 brokerPort = freePort() 51 databaseFile = path.Join(workDir, "databaseFile.dat") 52 runBrokerCommand = exec.Command(csb, "serve") 53 }) 54 55 AfterEach(func() { 56 brokerSession.Terminate() 57 58 err := os.Chdir(originalDir) 59 Expect(err).NotTo(HaveOccurred()) 60 61 err = os.RemoveAll(workDir) 62 Expect(err).NotTo(HaveOccurred()) 63 }) 64 65 When("a service offering has duplicate plan IDs", func() { 66 JustBeforeEach(func() { 67 userProvidedPlan := "[{\"name\": \"user-plan\",\"id\":\"8b52a460-b246-11eb-a8f5-d349948e2480\"}]" 68 runBrokerCommand.Env = append( 69 os.Environ(), 70 "CSB_LISTENER_HOST=localhost", 71 "DB_TYPE=sqlite3", 72 fmt.Sprintf("DB_PATH=%s", databaseFile), 73 fmt.Sprintf("PORT=%d", brokerPort), 74 fmt.Sprintf("SECURITY_USER_NAME=%s", brokerUsername), 75 fmt.Sprintf("SECURITY_USER_PASSWORD=%s", brokerPassword), 76 fmt.Sprintf("GSB_SERVICE_ALPHA_SERVICE_PLANS=%s", userProvidedPlan), 77 ) 78 }) 79 80 It("fails to start", func() { 81 var err error 82 brokerSession, err = Start(runBrokerCommand, GinkgoWriter, GinkgoWriter) 83 Expect(err).NotTo(HaveOccurred()) 84 brokerSession.Wait(time.Minute) 85 86 Expect(brokerSession.ExitCode()).NotTo(BeZero()) 87 Expect(brokerSession.Err).To(Say("duplicated value, must be unique: 8b52a460-b246-11eb-a8f5-d349948e2480: Plans\\[1\\].Id\n")) 88 }) 89 }) 90 91 When("two service offerings have duplicate plan IDs", func() { 92 JustBeforeEach(func() { 93 userProvidedPlan := "[{\"name\": \"user-plan\",\"id\":\"8b52a460-b246-11eb-a8f5-d349948e2480\"}]" 94 runBrokerCommand.Env = append( 95 os.Environ(), 96 "CSB_LISTENER_HOST=localhost", 97 "DB_TYPE=sqlite3", 98 fmt.Sprintf("DB_PATH=%s", databaseFile), 99 fmt.Sprintf("PORT=%d", brokerPort), 100 fmt.Sprintf("SECURITY_USER_NAME=%s", brokerUsername), 101 fmt.Sprintf("SECURITY_USER_PASSWORD=%s", brokerPassword), 102 fmt.Sprintf("GSB_SERVICE_BETA_SERVICE_PLANS=%s", userProvidedPlan), 103 ) 104 }) 105 106 It("fails to start", func() { 107 var err error 108 brokerSession, err = Start(runBrokerCommand, GinkgoWriter, GinkgoWriter) 109 Expect(err).NotTo(HaveOccurred()) 110 brokerSession.Wait(10 * time.Minute) 111 112 Expect(brokerSession.ExitCode()).NotTo(BeZero()) 113 Expect(brokerSession.Err).To(Say("duplicated value, must be unique: 8b52a460-b246-11eb-a8f5-d349948e2480: services\\[1\\].Plans\\[1\\].Id\n")) 114 }) 115 }) 116 })