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  })