Skip to content

Instantly share code, notes, and snippets.

@madamkiwi
Last active May 3, 2018 20:53
Show Gist options
  • Save madamkiwi/4ebe7ce853545ba3c191cb202c2e0a07 to your computer and use it in GitHub Desktop.
Save madamkiwi/4ebe7ce853545ba3c191cb202c2e0a07 to your computer and use it in GitHub Desktop.

Current world:

package manifest_test

import (
	"os"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("Logging", func() {
	Describe("traffic controller", func() {
		var err error
		It("disables support for forwarding syslog to metron", func() {
			err = product.RenderService.Configure(map[string]interface{}{}) // Configure accepts "override" keys to change the base config file
			Expect(err).NotTo(HaveOccurred())

			manifest, err := product.RenderService.RenderManifest(productConfig) // productConfig.ConfigFile is a filepath to a base config
			Expect(err).NotTo(HaveOccurred())

			agent, err := manifest.FindInstanceGroupJob("loggregator_trafficcontroller", "metron_agent")
			Expect(err).NotTo(HaveOccurred())

			syslogForwardingEnabled, err := agent.Property("syslog_daemon_config/enable")
			Expect(syslogForwardingEnabled).To(BeFalse())
		})
	})
})

Combine Configure and RenderManifest into single call:

package manifest_test

import (
	"os"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
)

var _ = Describe("Logging", func() {
  Describe("traffic controller", func() {
    var (
      inputs map[string]interface{}
    )
    BeforeEach(func() {
      // caller can use fixture file in whatever format they want, or inline a map for smaller tiles
      fixtureContents, err := ioutil.Readfile(fixturePath)
      Expect(err).NotTo(HaveOccurred())
      err = yaml.Unmarshal(fixtureContents, inputs)
      Expect(err).NotTo(HaveOccurred())
    })
    
    It("disables support for forwarding syslog to metron", func() {
      // could support a GenerateManifestFromFile as convenience method
      manifest, err := product.GenerateManifest(inputs)
      Expect(err).NotTo(HaveOccurred())

      agent, err := manifest.FindInstanceGroupJob("loggregator_trafficcontroller", "metron_agent")
      Expect(err).NotTo(HaveOccurred())

      syslogForwardingEnabled, err := agent.Property("syslog_daemon_config/enable")
      Expect(syslogForwardingEnabled).To(BeFalse())
    })
    
    Context("when a checkbox is checked", func() {
      BeforeEach(func() {
        inputs["some-checkbox"] = true
      })
      
      It("enables something", func() {
        ...
        syslogForwardingEnabled, err := agent.Property("syslog_daemon_config/enable")
        Expect(syslogForwardingEnabled).To(BeTrue())
      })
    })
  })
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment