Kaynağa Gözat

Add tests for prefer ip config type

tags/v2.0.0-rc1
9seconds 5 yıl önce
ebeveyn
işleme
428010880e
3 değiştirilmiş dosya ile 147 ekleme ve 4 silme
  1. 3
    3
      config/type_ip.go
  2. 8
    1
      config/type_prefer_ip.go
  3. 136
    0
      config/type_prefer_ip_test.go

+ 3
- 3
config/type_ip.go Dosyayı Görüntüle

@@ -29,11 +29,11 @@ func (c *TypeIP) MarshalText() ([]byte, error) {
29 29
 }
30 30
 
31 31
 func (c TypeIP) String() string {
32
-	if c.value == nil {
33
-		return ""
32
+	if len(c.value) > 0 {
33
+		return c.value.String()
34 34
 	}
35 35
 
36
-	return c.value.String()
36
+	return ""
37 37
 }
38 38
 
39 39
 func (c TypeIP) Value(defaultValue net.IP) net.IP {

+ 8
- 1
config/type_prefer_ip.go Dosyayı Görüntüle

@@ -5,6 +5,13 @@ import (
5 5
 	"strings"
6 6
 )
7 7
 
8
+const (
9
+	TypePreferIPPreferIPv4 = "prefer-ipv4"
10
+	TypePreferIPPreferIPv6 = "prefer-ipv6"
11
+	TypePreferOnlyIPv4     = "only-ipv4"
12
+	TypePreferOnlyIPv6     = "only-ipv6"
13
+)
14
+
8 15
 type TypePreferIP struct {
9 16
 	value string
10 17
 }
@@ -17,7 +24,7 @@ func (c *TypePreferIP) UnmarshalText(data []byte) error {
17 24
 	text := strings.ToLower(string(data))
18 25
 
19 26
 	switch text {
20
-	case "prefer-ipv4", "prefer-ipv6", "only-ipv4", "only-ipv6":
27
+	case TypePreferIPPreferIPv4, TypePreferIPPreferIPv6, TypePreferOnlyIPv4, TypePreferOnlyIPv6:
21 28
 		c.value = text
22 29
 	default:
23 30
 		return fmt.Errorf("incorrect prefer-ip value: %s", string(data))

+ 136
- 0
config/type_prefer_ip_test.go Dosyayı Görüntüle

@@ -0,0 +1,136 @@
1
+package config_test
2
+
3
+import (
4
+	"encoding/json"
5
+	"strings"
6
+	"testing"
7
+
8
+	"github.com/9seconds/mtg/v2/config"
9
+	"github.com/stretchr/testify/assert"
10
+	"github.com/stretchr/testify/suite"
11
+)
12
+
13
+type typePreferIPTestStruct struct {
14
+	Value config.TypePreferIP `json:"value"`
15
+}
16
+
17
+type TypePreferIPTestSuite struct {
18
+	suite.Suite
19
+}
20
+
21
+func (suite *TypePreferIPTestSuite) TestUnmarshalFail() {
22
+	testData := []string{
23
+		"p",
24
+		"ipv4",
25
+		"onlyipv4",
26
+		"ipv6prefer",
27
+	}
28
+
29
+	for _, v := range testData {
30
+		data, err := json.Marshal(map[string]string{
31
+			"value": v,
32
+		})
33
+		suite.NoError(err)
34
+
35
+		suite.T().Run(v, func(t *testing.T) {
36
+			assert.Error(t, json.Unmarshal(data, &typePreferIPTestStruct{}))
37
+		})
38
+	}
39
+}
40
+
41
+func (suite *TypePreferIPTestSuite) TestUnmarshalOk() {
42
+	testData := []string{
43
+		config.TypePreferIPPreferIPv4,
44
+		config.TypePreferIPPreferIPv6,
45
+		config.TypePreferOnlyIPv4,
46
+		config.TypePreferOnlyIPv6,
47
+		strings.ToUpper(config.TypePreferIPPreferIPv4),
48
+		strings.ToUpper(config.TypePreferIPPreferIPv6),
49
+		strings.ToUpper(config.TypePreferOnlyIPv4),
50
+		strings.ToUpper(config.TypePreferOnlyIPv6),
51
+		strings.ToLower(config.TypePreferIPPreferIPv4),
52
+		strings.ToLower(config.TypePreferIPPreferIPv6),
53
+		strings.ToLower(config.TypePreferOnlyIPv4),
54
+		strings.ToLower(config.TypePreferOnlyIPv6),
55
+	}
56
+
57
+	for _, v := range testData {
58
+		value := v
59
+
60
+		data, err := json.Marshal(map[string]string{
61
+			"value": v,
62
+		})
63
+		suite.NoError(err)
64
+
65
+		suite.T().Run(v, func(t *testing.T) {
66
+			testStruct := &typePreferIPTestStruct{}
67
+
68
+			assert.NoError(t, json.Unmarshal(data, testStruct))
69
+			assert.EqualValues(t,
70
+				strings.ToLower(value),
71
+				testStruct.Value.Value(config.TypePreferIPPreferIPv4))
72
+		})
73
+	}
74
+}
75
+
76
+func (suite *TypePreferIPTestSuite) TestMarshalOk() {
77
+	testData := []string{
78
+		config.TypePreferIPPreferIPv4,
79
+		config.TypePreferIPPreferIPv6,
80
+		config.TypePreferOnlyIPv4,
81
+		config.TypePreferOnlyIPv6,
82
+		strings.ToUpper(config.TypePreferIPPreferIPv4),
83
+		strings.ToUpper(config.TypePreferIPPreferIPv6),
84
+		strings.ToUpper(config.TypePreferOnlyIPv4),
85
+		strings.ToUpper(config.TypePreferOnlyIPv6),
86
+		strings.ToLower(config.TypePreferIPPreferIPv4),
87
+		strings.ToLower(config.TypePreferIPPreferIPv6),
88
+		strings.ToLower(config.TypePreferOnlyIPv4),
89
+		strings.ToLower(config.TypePreferOnlyIPv6),
90
+	}
91
+
92
+	for _, v := range testData {
93
+		value := v
94
+
95
+		data, err := json.Marshal(map[string]string{
96
+			"value": v,
97
+		})
98
+		suite.NoError(err)
99
+
100
+		suite.T().Run(v, func(t *testing.T) {
101
+			testStruct := &typePreferIPTestStruct{}
102
+
103
+			assert.NoError(t, json.Unmarshal(data, testStruct))
104
+			assert.Equal(t, strings.ToLower(value), testStruct.Value.String())
105
+
106
+			marshalled, err := testStruct.Value.MarshalText()
107
+			assert.NoError(t, err)
108
+			assert.Equal(t, strings.ToLower(value), string(marshalled))
109
+		})
110
+	}
111
+}
112
+
113
+func (suite *TypePreferIPTestSuite) TestValue() {
114
+	testStruct := &typePreferIPTestStruct{}
115
+
116
+	suite.EqualValues(config.TypePreferIPPreferIPv4,
117
+		testStruct.Value.Value(config.TypePreferIPPreferIPv4))
118
+	suite.EqualValues(config.TypePreferIPPreferIPv6,
119
+		testStruct.Value.Value(config.TypePreferIPPreferIPv6))
120
+
121
+	data, err := json.Marshal(map[string]string{
122
+		"value": config.TypePreferOnlyIPv4,
123
+	})
124
+	suite.NoError(err)
125
+	suite.NoError(json.Unmarshal(data, testStruct))
126
+
127
+	suite.EqualValues(config.TypePreferOnlyIPv4,
128
+		testStruct.Value.Value(config.TypePreferOnlyIPv6))
129
+	suite.EqualValues(config.TypePreferOnlyIPv4,
130
+		testStruct.Value.Value(config.TypePreferIPPreferIPv6))
131
+}
132
+
133
+func TestTypePreferIP(t *testing.T) {
134
+	t.Parallel()
135
+	suite.Run(t, &TypePreferIPTestSuite{})
136
+}

Loading…
İptal
Kaydet