From 428010880e9adf761feb6d029301e29c3b97e534 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Fri, 12 Mar 2021 10:28:08 +0300 Subject: [PATCH] Add tests for prefer ip config type --- config/type_ip.go | 6 +- config/type_prefer_ip.go | 9 ++- config/type_prefer_ip_test.go | 136 ++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 4 deletions(-) create mode 100644 config/type_prefer_ip_test.go diff --git a/config/type_ip.go b/config/type_ip.go index 76d61b0..0fe61e7 100644 --- a/config/type_ip.go +++ b/config/type_ip.go @@ -29,11 +29,11 @@ func (c *TypeIP) MarshalText() ([]byte, error) { } func (c TypeIP) String() string { - if c.value == nil { - return "" + if len(c.value) > 0 { + return c.value.String() } - return c.value.String() + return "" } func (c TypeIP) Value(defaultValue net.IP) net.IP { diff --git a/config/type_prefer_ip.go b/config/type_prefer_ip.go index b0763db..3d150d4 100644 --- a/config/type_prefer_ip.go +++ b/config/type_prefer_ip.go @@ -5,6 +5,13 @@ import ( "strings" ) +const ( + TypePreferIPPreferIPv4 = "prefer-ipv4" + TypePreferIPPreferIPv6 = "prefer-ipv6" + TypePreferOnlyIPv4 = "only-ipv4" + TypePreferOnlyIPv6 = "only-ipv6" +) + type TypePreferIP struct { value string } @@ -17,7 +24,7 @@ func (c *TypePreferIP) UnmarshalText(data []byte) error { text := strings.ToLower(string(data)) switch text { - case "prefer-ipv4", "prefer-ipv6", "only-ipv4", "only-ipv6": + case TypePreferIPPreferIPv4, TypePreferIPPreferIPv6, TypePreferOnlyIPv4, TypePreferOnlyIPv6: c.value = text default: return fmt.Errorf("incorrect prefer-ip value: %s", string(data)) diff --git a/config/type_prefer_ip_test.go b/config/type_prefer_ip_test.go new file mode 100644 index 0000000..30eb5ea --- /dev/null +++ b/config/type_prefer_ip_test.go @@ -0,0 +1,136 @@ +package config_test + +import ( + "encoding/json" + "strings" + "testing" + + "github.com/9seconds/mtg/v2/config" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/suite" +) + +type typePreferIPTestStruct struct { + Value config.TypePreferIP `json:"value"` +} + +type TypePreferIPTestSuite struct { + suite.Suite +} + +func (suite *TypePreferIPTestSuite) TestUnmarshalFail() { + testData := []string{ + "p", + "ipv4", + "onlyipv4", + "ipv6prefer", + } + + for _, v := range testData { + data, err := json.Marshal(map[string]string{ + "value": v, + }) + suite.NoError(err) + + suite.T().Run(v, func(t *testing.T) { + assert.Error(t, json.Unmarshal(data, &typePreferIPTestStruct{})) + }) + } +} + +func (suite *TypePreferIPTestSuite) TestUnmarshalOk() { + testData := []string{ + config.TypePreferIPPreferIPv4, + config.TypePreferIPPreferIPv6, + config.TypePreferOnlyIPv4, + config.TypePreferOnlyIPv6, + strings.ToUpper(config.TypePreferIPPreferIPv4), + strings.ToUpper(config.TypePreferIPPreferIPv6), + strings.ToUpper(config.TypePreferOnlyIPv4), + strings.ToUpper(config.TypePreferOnlyIPv6), + strings.ToLower(config.TypePreferIPPreferIPv4), + strings.ToLower(config.TypePreferIPPreferIPv6), + strings.ToLower(config.TypePreferOnlyIPv4), + strings.ToLower(config.TypePreferOnlyIPv6), + } + + for _, v := range testData { + value := v + + data, err := json.Marshal(map[string]string{ + "value": v, + }) + suite.NoError(err) + + suite.T().Run(v, func(t *testing.T) { + testStruct := &typePreferIPTestStruct{} + + assert.NoError(t, json.Unmarshal(data, testStruct)) + assert.EqualValues(t, + strings.ToLower(value), + testStruct.Value.Value(config.TypePreferIPPreferIPv4)) + }) + } +} + +func (suite *TypePreferIPTestSuite) TestMarshalOk() { + testData := []string{ + config.TypePreferIPPreferIPv4, + config.TypePreferIPPreferIPv6, + config.TypePreferOnlyIPv4, + config.TypePreferOnlyIPv6, + strings.ToUpper(config.TypePreferIPPreferIPv4), + strings.ToUpper(config.TypePreferIPPreferIPv6), + strings.ToUpper(config.TypePreferOnlyIPv4), + strings.ToUpper(config.TypePreferOnlyIPv6), + strings.ToLower(config.TypePreferIPPreferIPv4), + strings.ToLower(config.TypePreferIPPreferIPv6), + strings.ToLower(config.TypePreferOnlyIPv4), + strings.ToLower(config.TypePreferOnlyIPv6), + } + + for _, v := range testData { + value := v + + data, err := json.Marshal(map[string]string{ + "value": v, + }) + suite.NoError(err) + + suite.T().Run(v, func(t *testing.T) { + testStruct := &typePreferIPTestStruct{} + + assert.NoError(t, json.Unmarshal(data, testStruct)) + assert.Equal(t, strings.ToLower(value), testStruct.Value.String()) + + marshalled, err := testStruct.Value.MarshalText() + assert.NoError(t, err) + assert.Equal(t, strings.ToLower(value), string(marshalled)) + }) + } +} + +func (suite *TypePreferIPTestSuite) TestValue() { + testStruct := &typePreferIPTestStruct{} + + suite.EqualValues(config.TypePreferIPPreferIPv4, + testStruct.Value.Value(config.TypePreferIPPreferIPv4)) + suite.EqualValues(config.TypePreferIPPreferIPv6, + testStruct.Value.Value(config.TypePreferIPPreferIPv6)) + + data, err := json.Marshal(map[string]string{ + "value": config.TypePreferOnlyIPv4, + }) + suite.NoError(err) + suite.NoError(json.Unmarshal(data, testStruct)) + + suite.EqualValues(config.TypePreferOnlyIPv4, + testStruct.Value.Value(config.TypePreferOnlyIPv6)) + suite.EqualValues(config.TypePreferOnlyIPv4, + testStruct.Value.Value(config.TypePreferIPPreferIPv6)) +} + +func TestTypePreferIP(t *testing.T) { + t.Parallel() + suite.Run(t, &TypePreferIPTestSuite{}) +}