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  }