github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/util/configv3/env_test.go (about)

     1  package configv3_test
     2  
     3  import (
     4  	"os"
     5  	"time"
     6  
     7  	. "code.cloudfoundry.org/cli/util/configv3"
     8  
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/ginkgo/extensions/table"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Config", func() {
    15  	var (
    16  		config  *Config
    17  		homeDir string
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		homeDir = setup()
    22  	})
    23  
    24  	AfterEach(func() {
    25  		teardown(homeDir)
    26  	})
    27  
    28  	Context("when there are environment variables", func() {
    29  		BeforeEach(func() {
    30  			Expect(os.Setenv("CF_DIAL_TIMEOUT", "1234")).ToNot(HaveOccurred())
    31  			Expect(os.Setenv("CF_DOCKER_PASSWORD", "banana")).ToNot(HaveOccurred())
    32  			Expect(os.Setenv("CF_STAGING_TIMEOUT", "8675")).ToNot(HaveOccurred())
    33  			Expect(os.Setenv("CF_STARTUP_TIMEOUT", "309")).ToNot(HaveOccurred())
    34  			Expect(os.Setenv("https_proxy", "proxy.com")).ToNot(HaveOccurred())
    35  
    36  			var err error
    37  			config, err = LoadConfig()
    38  			Expect(err).ToNot(HaveOccurred())
    39  			Expect(config).ToNot(BeNil())
    40  		})
    41  
    42  		AfterEach(func() {
    43  			Expect(os.Unsetenv("CF_DIAL_TIMEOUT")).ToNot(HaveOccurred())
    44  			Expect(os.Unsetenv("CF_DOCKER_PASSWORD")).ToNot(HaveOccurred())
    45  			Expect(os.Unsetenv("CF_STAGING_TIMEOUT")).ToNot(HaveOccurred())
    46  			Expect(os.Unsetenv("CF_STARTUP_TIMEOUT")).ToNot(HaveOccurred())
    47  			Expect(os.Unsetenv("https_proxy")).ToNot(HaveOccurred())
    48  		})
    49  
    50  		It("overrides specific config values", func() {
    51  			Expect(config.DialTimeout()).To(Equal(1234 * time.Second))
    52  			Expect(config.DockerPassword()).To(Equal("banana"))
    53  			Expect(config.HTTPSProxy()).To(Equal("proxy.com"))
    54  			Expect(config.StagingTimeout()).To(Equal(time.Duration(8675) * time.Minute))
    55  			Expect(config.StartupTimeout()).To(Equal(time.Duration(309) * time.Minute))
    56  		})
    57  	})
    58  
    59  	Describe("BinaryName", func() {
    60  		It("returns the name used to invoke", func() {
    61  			config, err := LoadConfig()
    62  			Expect(err).ToNot(HaveOccurred())
    63  			Expect(config).ToNot(BeNil())
    64  
    65  			// Ginkgo will uses a config file as the first test argument, so that
    66  			// will be considered the binary name
    67  			Expect(config.BinaryName()).To(Equal("configv3.test"))
    68  		})
    69  	})
    70  
    71  	Describe("BinaryVersion", func() {
    72  		It("returns back version.BinaryVersion", func() {
    73  			conf := Config{}
    74  			Expect(conf.BinaryVersion()).To(Equal("0.0.0-unknown-version"))
    75  		})
    76  	})
    77  
    78  	DescribeTable("Experimental",
    79  		func(envVal string, expected bool) {
    80  			setConfig(homeDir, `{}`)
    81  
    82  			defer os.Unsetenv("CF_CLI_EXPERIMENTAL")
    83  			Expect(os.Unsetenv("CF_CLI_EXPERIMENTAL")).ToNot(HaveOccurred())
    84  			if envVal != "" {
    85  				Expect(os.Setenv("CF_CLI_EXPERIMENTAL", envVal)).ToNot(HaveOccurred())
    86  			}
    87  
    88  			config, err := LoadConfig()
    89  			Expect(err).ToNot(HaveOccurred())
    90  			Expect(config).ToNot(BeNil())
    91  
    92  			Expect(config.Experimental()).To(Equal(expected))
    93  		},
    94  
    95  		Entry("uses default value of false if environment value is not set", "", false),
    96  		Entry("uses environment value if a valid environment value is set", "true", true),
    97  		Entry("uses default value of false if an invalid environment value is set", "something-invalid", false),
    98  	)
    99  
   100  	DescribeTable("LogLevel",
   101  		func(envVal string, expectedLevel int) {
   102  			config := Config{ENV: EnvOverride{CFLogLevel: envVal}}
   103  			Expect(config.LogLevel()).To(Equal(expectedLevel))
   104  		},
   105  
   106  		Entry("Default to 0", "", 0),
   107  		Entry("panic returns 0", "panic", 0),
   108  		Entry("fatal returns 1", "fatal", 1),
   109  		Entry("error returns 2", "error", 2),
   110  		Entry("warn returns 3", "warn", 3),
   111  		Entry("info returns 4", "info", 4),
   112  		Entry("debug returns 5", "debug", 5),
   113  		Entry("dEbUg returns 5", "dEbUg", 5),
   114  	)
   115  })