github.com/lyft/flytestdlib@v0.3.12-0.20210213045714-8cdd111ecda1/logger/config_flags_test.go (about) 1 // Code generated by go generate; DO NOT EDIT. 2 // This file was generated by robots. 3 4 package logger 5 6 import ( 7 "encoding/json" 8 "fmt" 9 "reflect" 10 "strings" 11 "testing" 12 13 "github.com/mitchellh/mapstructure" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 var dereferencableKindsConfig = map[reflect.Kind]struct{}{ 18 reflect.Array: {}, reflect.Chan: {}, reflect.Map: {}, reflect.Ptr: {}, reflect.Slice: {}, 19 } 20 21 // Checks if t is a kind that can be dereferenced to get its underlying type. 22 func canGetElementConfig(t reflect.Kind) bool { 23 _, exists := dereferencableKindsConfig[t] 24 return exists 25 } 26 27 // This decoder hook tests types for json unmarshaling capability. If implemented, it uses json unmarshal to build the 28 // object. Otherwise, it'll just pass on the original data. 29 func jsonUnmarshalerHookConfig(_, to reflect.Type, data interface{}) (interface{}, error) { 30 unmarshalerType := reflect.TypeOf((*json.Unmarshaler)(nil)).Elem() 31 if to.Implements(unmarshalerType) || reflect.PtrTo(to).Implements(unmarshalerType) || 32 (canGetElementConfig(to.Kind()) && to.Elem().Implements(unmarshalerType)) { 33 34 raw, err := json.Marshal(data) 35 if err != nil { 36 fmt.Printf("Failed to marshal Data: %v. Error: %v. Skipping jsonUnmarshalHook", data, err) 37 return data, nil 38 } 39 40 res := reflect.New(to).Interface() 41 err = json.Unmarshal(raw, &res) 42 if err != nil { 43 fmt.Printf("Failed to umarshal Data: %v. Error: %v. Skipping jsonUnmarshalHook", data, err) 44 return data, nil 45 } 46 47 return res, nil 48 } 49 50 return data, nil 51 } 52 53 func decode_Config(input, result interface{}) error { 54 config := &mapstructure.DecoderConfig{ 55 TagName: "json", 56 WeaklyTypedInput: true, 57 Result: result, 58 DecodeHook: mapstructure.ComposeDecodeHookFunc( 59 mapstructure.StringToTimeDurationHookFunc(), 60 mapstructure.StringToSliceHookFunc(","), 61 jsonUnmarshalerHookConfig, 62 ), 63 } 64 65 decoder, err := mapstructure.NewDecoder(config) 66 if err != nil { 67 return err 68 } 69 70 return decoder.Decode(input) 71 } 72 73 func join_Config(arr interface{}, sep string) string { 74 listValue := reflect.ValueOf(arr) 75 strs := make([]string, 0, listValue.Len()) 76 for i := 0; i < listValue.Len(); i++ { 77 strs = append(strs, fmt.Sprintf("%v", listValue.Index(i))) 78 } 79 80 return strings.Join(strs, sep) 81 } 82 83 func testDecodeJson_Config(t *testing.T, val, result interface{}) { 84 assert.NoError(t, decode_Config(val, result)) 85 } 86 87 func testDecodeSlice_Config(t *testing.T, vStringSlice, result interface{}) { 88 assert.NoError(t, decode_Config(vStringSlice, result)) 89 } 90 91 func TestConfig_GetPFlagSet(t *testing.T) { 92 val := Config{} 93 cmdFlags := val.GetPFlagSet("") 94 assert.True(t, cmdFlags.HasFlags()) 95 } 96 97 func TestConfig_SetFlags(t *testing.T) { 98 actual := Config{} 99 cmdFlags := actual.GetPFlagSet("") 100 assert.True(t, cmdFlags.HasFlags()) 101 102 t.Run("Test_show-source", func(t *testing.T) { 103 t.Run("DefaultValue", func(t *testing.T) { 104 // Test that default value is set properly 105 if vBool, err := cmdFlags.GetBool("show-source"); err == nil { 106 assert.Equal(t, bool(defaultConfig.IncludeSourceCode), vBool) 107 } else { 108 assert.FailNow(t, err.Error()) 109 } 110 }) 111 112 t.Run("Override", func(t *testing.T) { 113 testValue := "1" 114 115 cmdFlags.Set("show-source", testValue) 116 if vBool, err := cmdFlags.GetBool("show-source"); err == nil { 117 testDecodeJson_Config(t, fmt.Sprintf("%v", vBool), &actual.IncludeSourceCode) 118 119 } else { 120 assert.FailNow(t, err.Error()) 121 } 122 }) 123 }) 124 t.Run("Test_mute", func(t *testing.T) { 125 t.Run("DefaultValue", func(t *testing.T) { 126 // Test that default value is set properly 127 if vBool, err := cmdFlags.GetBool("mute"); err == nil { 128 assert.Equal(t, bool(defaultConfig.Mute), vBool) 129 } else { 130 assert.FailNow(t, err.Error()) 131 } 132 }) 133 134 t.Run("Override", func(t *testing.T) { 135 testValue := "1" 136 137 cmdFlags.Set("mute", testValue) 138 if vBool, err := cmdFlags.GetBool("mute"); err == nil { 139 testDecodeJson_Config(t, fmt.Sprintf("%v", vBool), &actual.Mute) 140 141 } else { 142 assert.FailNow(t, err.Error()) 143 } 144 }) 145 }) 146 t.Run("Test_level", func(t *testing.T) { 147 t.Run("DefaultValue", func(t *testing.T) { 148 // Test that default value is set properly 149 if vInt, err := cmdFlags.GetInt("level"); err == nil { 150 assert.Equal(t, int(defaultConfig.Level), vInt) 151 } else { 152 assert.FailNow(t, err.Error()) 153 } 154 }) 155 156 t.Run("Override", func(t *testing.T) { 157 testValue := "1" 158 159 cmdFlags.Set("level", testValue) 160 if vInt, err := cmdFlags.GetInt("level"); err == nil { 161 testDecodeJson_Config(t, fmt.Sprintf("%v", vInt), &actual.Level) 162 163 } else { 164 assert.FailNow(t, err.Error()) 165 } 166 }) 167 }) 168 t.Run("Test_formatter.type", func(t *testing.T) { 169 t.Run("DefaultValue", func(t *testing.T) { 170 // Test that default value is set properly 171 if vString, err := cmdFlags.GetString("formatter.type"); err == nil { 172 assert.Equal(t, string(defaultConfig.Formatter.Type), vString) 173 } else { 174 assert.FailNow(t, err.Error()) 175 } 176 }) 177 178 t.Run("Override", func(t *testing.T) { 179 testValue := "1" 180 181 cmdFlags.Set("formatter.type", testValue) 182 if vString, err := cmdFlags.GetString("formatter.type"); err == nil { 183 testDecodeJson_Config(t, fmt.Sprintf("%v", vString), &actual.Formatter.Type) 184 185 } else { 186 assert.FailNow(t, err.Error()) 187 } 188 }) 189 }) 190 }