From 7239e9c6c61f3d346d49e0a86bef937484594749 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 16 Nov 2022 13:51:32 +0300 Subject: [PATCH] Add more tests. --- default.go | 4 ++-- default_test.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ yaconf_test.go | 20 ++++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/default.go b/default.go index 3541d0e..1edb260 100644 --- a/default.go +++ b/default.go @@ -65,7 +65,7 @@ func setDefaultValue(v reflect.Value) error { if isInt(v.Field(i)) { value, err := strconv.ParseInt(defaultValue, 10, 64) if err != nil { - return fmt.Errorf("%s is invalid value for int", defaultValue) + return fmt.Errorf("%s is invalid value for %s", defaultValue, v.Field(i).Type().Kind()) } v.Field(i).SetInt(value) continue @@ -73,7 +73,7 @@ func setDefaultValue(v reflect.Value) error { if isUint(v.Field(i)) { value, err := strconv.ParseUint(defaultValue, 10, 64) if err != nil { - return fmt.Errorf("%s is invalid value for int", defaultValue) + return fmt.Errorf("%s is invalid value for %s", defaultValue, v.Field(i).Type().Kind()) } v.Field(i).SetUint(value) continue diff --git a/default_test.go b/default_test.go index 26971a6..9f90838 100644 --- a/default_test.go +++ b/default_test.go @@ -28,6 +28,46 @@ func TestFillDefaultValues(t *testing.T) { require.Equal(t, 5432, config.DB.Port) require.Equal(t, 2*time.Second, config.DB.Timeout) require.Equal(t, true, config.DB.Debug) + + // Test empty + config2 := &struct { + Count int `yaconf:"default"` + }{} + err = fillDefaultValues(&config2) + require.Nil(t, err) + + // Test invalid int + config3 := &struct { + Count int `yaconf:"default=yes"` + }{} + err = fillDefaultValues(&config3) + require.NotNil(t, err) + require.Equal(t, "yes is invalid value for int", err.Error()) + + // Test invalid uint + config4 := &struct { + Count uint `yaconf:"default=a"` + }{} + err = fillDefaultValues(&config4) + require.NotNil(t, err) + require.Equal(t, "a is invalid value for uint", err.Error()) + + // Test invalid duration + config5 := &struct { + Timeout time.Duration `yaconf:"default=22"` + }{} + err = fillDefaultValues(&config5) + require.NotNil(t, err) + require.Equal(t, "22 is invalid value for time.Duration", err.Error()) + + // Test invalid bool + config6 := &struct { + Debug bool `yaconf:"default=22"` + }{} + err = fillDefaultValues(&config6) + require.NotNil(t, err) + require.Equal(t, "22 is invalid value for bool", err.Error()) + } func TestSetDefaultValue(t *testing.T) { @@ -47,6 +87,15 @@ func TestSetDefaultValue(t *testing.T) { require.Nil(t, err) require.Empty(t, config.private) require.Equal(t, "localhost", config.DB.Host) + + // Test empty + + // Test invalid bool + config2 := struct { + Debug bool `yaconf:"default=22"` + }{} + err = setDefaultValue(reflect.ValueOf(config2)) + require.NotNil(t, err) } func TestIsDuration(t *testing.T) { diff --git a/yaconf_test.go b/yaconf_test.go index c6bf6bc..444420d 100644 --- a/yaconf_test.go +++ b/yaconf_test.go @@ -45,7 +45,27 @@ func TestRead(t *testing.T) { err = Read(file.Name(), &config2) require.NotNil(t, err) + // Test invalid unmarshal + config3 := struct { + LogLevel int `yaml:"log_level"` + }{} + err = Read(file.Name(), &config3) + require.NotNil(t, err) + + // Test invalid default valud + config4 := struct { + Pid int `yaml:"pid" yaconf:"default=yes"` + }{} + err = Read(file.Name(), &config4) + require.NotNil(t, err) + require.Equal(t, "yes is invalid value for int", err.Error()) + // Test with custom validator err = Read(file.Name(), &testConfig3{}) require.NotNil(t, err) + require.Equal(t, "invalid", err.Error()) + + // Test invalid file + err = Read("/tmp/yaconf/test.yml", &testConfig3{}) + require.NotNil(t, err) }