github.com/Microsoft/fabrikate@v0.0.0-20190420002442-bff75be28d02/core/componentConfig_test.go (about) 1 package core 2 3 import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestLoad(t *testing.T) { 12 config := ComponentConfig{ 13 Path: "../test/fixtures/load", 14 } 15 16 err := config.Load("test") 17 assert.Nil(t, err) 18 19 assert.Equal(t, "bar", config.Config["foo"]) 20 assert.Equal(t, "myapp", config.Namespace) 21 } 22 23 func TestMerge(t *testing.T) { 24 currentConfig := NewComponentConfig("../test/fixtures/merge") 25 err := currentConfig.Load("current") 26 assert.Nil(t, err) 27 28 newConfig := NewComponentConfig("../test/fixtures/merge") 29 err = newConfig.Load("new") 30 assert.Nil(t, err) 31 32 err = currentConfig.Merge(newConfig) 33 assert.Nil(t, err) 34 35 jaegerSubcomponent := currentConfig.Subcomponents["jaeger"] 36 37 provisionConfig := jaegerSubcomponent.Config["provisionDataStore"].(map[string]interface{}) 38 39 cassandraValue := provisionConfig["cassandra"].(bool) 40 assert.Equal(t, false, cassandraValue) 41 42 elasticsearchValue := provisionConfig["elasticsearch"].(bool) 43 assert.Equal(t, false, elasticsearchValue) 44 45 mixed := provisionConfig["mixed"].(int) 46 assert.Equal(t, 1, mixed) 47 48 sliceValues := provisionConfig["slice"].([]interface{}) 49 assert.Equal(t, 1, sliceValues[1].(int)) 50 } 51 52 func TestSet(t *testing.T) { 53 config := NewComponentConfig("../test/fixtures/load") 54 55 err := config.Load("test") 56 assert.Nil(t, err) 57 58 // can override a config value successfully 59 config.SetConfig([]string{}, []string{"foo"}, "fee") 60 assert.Equal(t, "fee", config.Config["foo"]) 61 62 // can create a value successfully 63 config.SetConfig([]string{}, []string{"new"}, "value") 64 assert.Equal(t, "value", config.Config["new"]) 65 66 // can override a subcomponent value successfully 67 config.SetConfig([]string{"myapp"}, []string{"zoo"}, "zee") 68 assert.Equal(t, "zee", config.Subcomponents["myapp"].Config["zoo"]) 69 70 // can create a new deeper subcomponent config level successfully 71 config.SetConfig([]string{"myapp"}, []string{"data", "storageClass"}, "fast") 72 dataMap := config.Subcomponents["myapp"].Config["data"].(map[string]interface{}) 73 assert.Equal(t, "fast", dataMap["storageClass"]) 74 } 75 76 func TestWriteYAML(t *testing.T) { 77 _ = os.Remove("../test/fixtures/write/config/test.yaml") 78 79 config := ComponentConfig{ 80 Path: "../test/fixtures/write", 81 Serialization: "yaml", 82 Config: map[string]interface{}{ 83 "foo": "bar", 84 }, 85 Subcomponents: map[string]ComponentConfig{ 86 "myapp": ComponentConfig{ 87 Config: map[string]interface{}{ 88 "zoo": "zar", 89 }, 90 }, 91 }, 92 } 93 94 err := config.Write("test") 95 assert.Nil(t, err) 96 97 configContents, err := ioutil.ReadFile("../test/fixtures/write/config/test.yaml") 98 assert.Nil(t, err) 99 assert.Equal(t, 70, len(configContents)) 100 } 101 102 func TestWriteJSON(t *testing.T) { 103 _ = os.Remove("../test/fixtures/write/config/test.json") 104 105 config := ComponentConfig{ 106 Path: "../test/fixtures/write", 107 Serialization: "json", 108 Config: map[string]interface{}{ 109 "foo": "bar", 110 }, 111 Subcomponents: map[string]ComponentConfig{ 112 "myapp": ComponentConfig{ 113 Config: map[string]interface{}{ 114 "zoo": "zar", 115 }, 116 }, 117 }, 118 } 119 120 err := config.Write("test") 121 assert.Nil(t, err) 122 123 configContents, err := ioutil.ReadFile("../test/fixtures/write/config/test.json") 124 assert.Nil(t, err) 125 assert.Equal(t, 132, len(configContents)) 126 }