diff --git a/README.md b/README.md index 82515de..3a6c687 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,8 @@ cat > .config "pass": "abc123", "org": "cf-sli", "space": "dev", - "domain": "example.com" + "domain": "example.com", + "skip_ssl_validation": false } ``` diff --git a/config/config.go b/config/config.go index ea158e4..a4a9dda 100644 --- a/config/config.go +++ b/config/config.go @@ -6,12 +6,13 @@ import ( ) type Config struct { - Api string `json:"api"` - User string `json:"user"` - Password string `json:"pass"` - Domain string `json:"domain"` - Org string `json:"org"` - Space string `json:"space"` + Api string `json:"api"` + User string `json:"user"` + Password string `json:"pass"` + Domain string `json:"domain"` + Org string `json:"org"` + Space string `json:"space"` + SkipSslValidation bool `json:"skip_ssl_validation"` } func (c *Config) LoadConfig(filename string) error { diff --git a/config/config_test.go b/config/config_test.go index 0b0b435..33543d3 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -17,6 +17,7 @@ var _ = Describe("LoadConfig", func() { Expect(c.Org).To(Equal("fake_org")) Expect(c.Space).To(Equal("fake_space")) Expect(c.Domain).To(Equal("fake_domain")) + Expect(c.SkipSslValidation).To(Equal(false)) }) It("returns an error reading a none-existing file", func() { diff --git a/sli_executor/sli_executor.go b/sli_executor/sli_executor.go index 894da16..61df8b9 100644 --- a/sli_executor/sli_executor.go +++ b/sli_executor/sli_executor.go @@ -28,8 +28,12 @@ func (s SliExecutor) cf(commands ...string) error { return s.Cf_wrapper.RunCF(commands...) } -func (s SliExecutor) Prepare(api string, user string, password string, org string, space string) error { - err := s.cf("api", api) +func (s SliExecutor) Prepare(api string, user string, password string, org string, space string, skipSslValidation bool) error { + cfApiArgs := []string{"api", api} + if skipSslValidation { + cfApiArgs = append(cfApiArgs, "--skip-ssl-validation") + } + err := s.cf(cfApiArgs...) if err != nil { return err } @@ -87,7 +91,7 @@ func (s SliExecutor) CleanupSli(app_name string) error { func (s SliExecutor) RunTest(app_name string, app_buildpack string, path string, c config.Config) (*Result, error) { defer s.CleanupSli(app_name) - err := s.Prepare(c.Api, c.User, c.Password, c.Org, c.Space) + err := s.Prepare(c.Api, c.User, c.Password, c.Org, c.Space, c.SkipSslValidation) if err != nil { result := &Result{ StartStatus: 0, diff --git a/sli_executor/sli_executor_test.go b/sli_executor/sli_executor_test.go index 4102fee..4ca6522 100644 --- a/sli_executor/sli_executor_test.go +++ b/sli_executor/sli_executor_test.go @@ -13,6 +13,7 @@ import ( var _ = Describe("SliExecutor", func() { var expected_api_calls = []string{"api", "fake_api"} + var expected_api_without_ssl_validation_calls = []string{"api", "fake_api", "--skip-ssl-validation"} var expected_auth_calls = []string{"auth", "fake_user", "fake_pass"} var expected_target_calls = []string{"target", "-o", "fake_org", "-s", "fake_space"} var expected_push_calls = []string{"push", "-p", "./fake_path", "-b", "fake_buildpack", "fake_app_name", "-d", "fake_domain", "--no-start"} @@ -35,7 +36,7 @@ var _ = Describe("SliExecutor", func() { Context("#Prepare", func() { It("returns nil if cf command executes successfully", func() { - err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space") + err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space", false) Expect(err).NotTo(HaveOccurred()) Expect(fakeCf).To(HaveReceived("RunCF").With(expected_api_calls)) @@ -43,21 +44,30 @@ var _ = Describe("SliExecutor", func() { Expect(fakeCf).To(HaveReceived("RunCF").With(expected_target_calls)) }) + It("skips SSL validation on `cf api` if skipSslValidation is true", func() { + err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space", true) + Expect(err).NotTo(HaveOccurred()) + + Expect(fakeCf).To(HaveReceived("RunCF").With(expected_api_without_ssl_validation_calls)) + Expect(fakeCf).To(HaveReceived("RunCF").With(expected_auth_calls)) + Expect(fakeCf).To(HaveReceived("RunCF").With(expected_target_calls)) + }) + It("returns err when cf api fails", func() { fakeCf.StubFailingCF("api") - err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space") + err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space", false) Expect(err).To(HaveOccurred()) }) It("returns err when cf auth fails", func() { fakeCf.StubFailingCF("auth") - err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space") + err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space", false) Expect(err).To(HaveOccurred()) }) It("returns err when cf target fails", func() { fakeCf.StubFailingCF("target") - err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space") + err := sli.Prepare("fake_api", "fake_user", "fake_pass", "fake_org", "fake_space", false) Expect(err).To(HaveOccurred()) }) }) @@ -154,6 +164,19 @@ var _ = Describe("SliExecutor", func() { Expect(fakeCf).To(HaveReceived("RunCF").With(expected_logout_calls)) }) + Context("when skipSslValidation is true", func() { + BeforeEach(func() { + config.SkipSslValidation = true + }) + + It("skips SSL validation on `cf api`", func() { + _, err := sli.RunTest("fake_app_name", "fake_buildpack", "./fake_path", config) + Expect(err).NotTo(HaveOccurred()) + + Expect(fakeCf).To(HaveReceived("RunCF").With(expected_api_without_ssl_validation_calls)) + }) + }) + Context("When something in the prepare step fails", func() { It("Cleans up the app", func() { fakeCf.StubFailingCF("api")