github.com/beanworks/dcm@v0.0.0-20230726194615-49d2d0417e04/src/config_test.go (about) 1 package main 2 3 import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 var yamlFixtureGoodVersion1 string = ` 13 foo: 14 bar: 15 baz: qux 16 another: value 17 yet: 18 another: 19 - value1 20 - value2 21 - value3 22 ` 23 24 var yamlFixtureGoodVersion2 string = ` 25 version: "2" 26 services: 27 foo: 28 bar: 29 baz: qux 30 another: value 31 yet: 32 another: 33 - value1 34 - value2 35 - value3 36 ` 37 38 var yamlFixtureBad string = ` 39 foo: bar 40 - baz: qux 41 ` 42 43 func TestCreateNewConfig(t *testing.T) { 44 os.Unsetenv("DCM_DIR") 45 os.Unsetenv("DCM_PROJECT") 46 47 c := NewConfig() 48 wd, _ := os.Getwd() 49 50 assert.Equal(t, &Config{ 51 Dir: wd, 52 Project: "dcm", 53 File: wd + "/dcm.yml", 54 Srv: wd + "/srv/dcm", 55 }, c) 56 } 57 58 func TestCreateNewConfigWithEnvVars(t *testing.T) { 59 os.Setenv("DCM_DIR", "/test/dcm/dir") 60 os.Setenv("DCM_PROJECT", "testproj") 61 62 c := NewConfig() 63 64 assert.Equal(t, &Config{ 65 Dir: "/test/dcm/dir", 66 Project: "testproj", 67 File: "/test/dcm/dir/testproj.yml", 68 Srv: "/test/dcm/dir/srv/testproj", 69 }, c) 70 } 71 72 func helperCreateTestFile(t *testing.T, prefix, fixture string) string { 73 tf, err := ioutil.TempFile("", prefix) 74 require.Nil(t, err) 75 76 _, err = tf.WriteString(fixture) 77 require.Nil(t, err) 78 79 err = tf.Close() 80 require.Nil(t, err) 81 82 return tf.Name() 83 } 84 85 func TestCreateNewConfigFile(t *testing.T) { 86 var ( 87 file string 88 err error 89 config *Config 90 ) 91 92 // Negative case: Bad YAML file name 93 os.Setenv("DCM_CONFIG_FILE", "bad_file_name.yml") 94 _, err = NewConfigFile() 95 assert.Error(t, err) 96 97 // Negative case: Bad YAML config formatting 98 file = helperCreateTestFile(t, "bad_yaml", yamlFixtureBad) 99 defer os.Remove(file) 100 os.Setenv("DCM_CONFIG_FILE", file) 101 _, err = NewConfigFile() 102 assert.Error(t, err) 103 104 // Positive case: success 105 expectedYaml := yamlConfig{ 106 "foo": yamlConfig{ 107 "bar": yamlConfig{ 108 "baz": "qux", 109 }, 110 }, 111 "another": "value", 112 "yet": yamlConfig{ 113 "another": []interface{}{ 114 "value1", 115 "value2", 116 "value3", 117 }, 118 }, 119 } 120 121 file = helperCreateTestFile(t, "good_yaml_ver1", yamlFixtureGoodVersion1) 122 defer os.Remove(file) 123 os.Setenv("DCM_CONFIG_FILE", file) 124 config, err = NewConfigFile() 125 assert.NoError(t, err) 126 assert.Equal(t, expectedYaml, config.Config) 127 128 file = helperCreateTestFile(t, "good_yaml_ver2", yamlFixtureGoodVersion2) 129 defer os.Remove(file) 130 os.Setenv("DCM_CONFIG_FILE", file) 131 config, err = NewConfigFile() 132 assert.NoError(t, err) 133 assert.Equal(t, expectedYaml, config.Config) 134 } 135 136 func TestIsDockerComposeVersion2(t *testing.T) { 137 assert.False(t, isDockerComposeVersion2(yamlConfig{ 138 "foo": "bar", 139 })) 140 141 assert.False(t, isDockerComposeVersion2(yamlConfig{ 142 "version": "2", 143 "foo": "bar", 144 })) 145 146 assert.False(t, isDockerComposeVersion2(yamlConfig{ 147 "services": yamlConfig{ 148 "foo": "bar", 149 }, 150 })) 151 152 assert.True(t, isDockerComposeVersion2(yamlConfig{ 153 "version": "2", 154 "services": yamlConfig{ 155 "foo": "bar", 156 }, 157 })) 158 }