Просмотр исходного кода

Add tests for config type port

tags/v2.0.0-rc1
9seconds 5 лет назад
Родитель
Сommit
1218f18af9
4 измененных файлов: 222 добавлений и 2 удалений
  1. 109
    0
      config/type_metric_prefix_test.go
  2. 1
    1
      config/type_port.go
  3. 111
    0
      config/type_port_test.go
  4. 1
    1
      config/type_url.go

+ 109
- 0
config/type_metric_prefix_test.go Просмотреть файл

@@ -0,0 +1,109 @@
1
+package config_test
2
+
3
+import (
4
+	"encoding/json"
5
+	"testing"
6
+
7
+	"github.com/9seconds/mtg/v2/config"
8
+	"github.com/stretchr/testify/assert"
9
+	"github.com/stretchr/testify/suite"
10
+)
11
+
12
+type typeMetricPrefixTestStruct struct {
13
+	Value config.TypeMetricPrefix `json:"value"`
14
+}
15
+
16
+type TypeMetricPrefixTestSuite struct {
17
+	suite.Suite
18
+}
19
+
20
+func (suite *TypeMetricPrefixTestSuite) TestUnmarshalFail() {
21
+	testData := []string{
22
+		"aaa.aaa",
23
+		"aaa-bbb",
24
+		"aaa:ccc",
25
+		"metric prefix",
26
+	}
27
+
28
+	for _, v := range testData {
29
+		data, err := json.Marshal(map[string]string{
30
+			"value": v,
31
+		})
32
+		suite.NoError(err)
33
+
34
+		suite.T().Run(v, func(t *testing.T) {
35
+			assert.Error(t, json.Unmarshal(data, &typeMetricPrefixTestStruct{}))
36
+		})
37
+	}
38
+}
39
+
40
+func (suite *TypeMetricPrefixTestSuite) TestUnmarshalOk() {
41
+	testData := []string{
42
+		"mtg",
43
+		"mtg111",
44
+	}
45
+
46
+	for _, v := range testData {
47
+		value := v
48
+
49
+		data, err := json.Marshal(map[string]string{
50
+			"value": v,
51
+		})
52
+		suite.NoError(err)
53
+
54
+		suite.T().Run(v, func(t *testing.T) {
55
+			testStruct := &typeMetricPrefixTestStruct{}
56
+
57
+			assert.NoError(t, json.Unmarshal(data, testStruct))
58
+			assert.Equal(t, value, testStruct.Value.Value(""))
59
+		})
60
+	}
61
+}
62
+
63
+func (suite *TypeMetricPrefixTestSuite) TestMarshalOk() {
64
+	testData := []string{
65
+		"mtg",
66
+		"mtg111",
67
+	}
68
+
69
+	for _, v := range testData {
70
+		value := v
71
+
72
+		data, err := json.Marshal(map[string]string{
73
+			"value": v,
74
+		})
75
+		suite.NoError(err)
76
+
77
+		suite.T().Run(v, func(t *testing.T) {
78
+			testStruct := &typeMetricPrefixTestStruct{}
79
+
80
+			assert.NoError(t, json.Unmarshal(data, testStruct))
81
+			assert.Equal(t, value, testStruct.Value.String())
82
+
83
+			marshalled, err := testStruct.Value.MarshalText()
84
+			assert.NoError(t, err)
85
+			assert.Equal(t, value, string(marshalled))
86
+		})
87
+	}
88
+}
89
+
90
+func (suite *TypeMetricPrefixTestSuite) TestValue() {
91
+	testStruct := &typeMetricPrefixTestStruct{}
92
+
93
+	suite.Equal("mtg", testStruct.Value.Value("mtg"))
94
+	suite.Equal("vvv", testStruct.Value.Value("vvv"))
95
+
96
+	data, err := json.Marshal(map[string]string{
97
+		"value": "aaa",
98
+	})
99
+	suite.NoError(err)
100
+	suite.NoError(json.Unmarshal(data, testStruct))
101
+
102
+	suite.Equal("aaa", testStruct.Value.Value("mtg"))
103
+	suite.Equal("aaa", testStruct.Value.Value("vvv"))
104
+}
105
+
106
+func TestTypeMetricPrefix(t *testing.T) {
107
+	t.Parallel()
108
+	suite.Run(t, &TypeMetricPrefixTestSuite{})
109
+}

+ 1
- 1
config/type_port.go Просмотреть файл

@@ -19,7 +19,7 @@ func (c *TypePort) UnmarshalJSON(data []byte) error {
19 19
 		return fmt.Errorf("port number is not a number: %w", err)
20 20
 	}
21 21
 
22
-	if intValue == 0 || intValue > 65536 {
22
+	if intValue == 0 || intValue >= 65536 {
23 23
 		return fmt.Errorf("port number should be 0 < portNo < 65536: %d", intValue)
24 24
 	}
25 25
 

+ 111
- 0
config/type_port_test.go Просмотреть файл

@@ -0,0 +1,111 @@
1
+package config_test
2
+
3
+import (
4
+	"encoding/json"
5
+	"strconv"
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 typePortTestStruct struct {
14
+	Value config.TypePort `json:"value"`
15
+}
16
+
17
+type TypePortTestSuite struct {
18
+	suite.Suite
19
+}
20
+
21
+func (suite *TypePortTestSuite) TestUnmarshalFail() {
22
+	testData := []int{
23
+		-1,
24
+		1_000_000,
25
+	}
26
+
27
+	for _, v := range testData {
28
+		data, err := json.Marshal(map[string]int{
29
+			"value": v,
30
+		})
31
+		suite.NoError(err)
32
+
33
+		suite.T().Run(strconv.Itoa(v), func(t *testing.T) {
34
+			assert.Error(t, json.Unmarshal(data, &typePortTestStruct{}))
35
+		})
36
+	}
37
+}
38
+
39
+func (suite *TypePortTestSuite) TestUnmarshalOk() {
40
+	testData := []int{
41
+		1,
42
+		1_000,
43
+		65535,
44
+	}
45
+
46
+	for _, v := range testData {
47
+		value := v
48
+
49
+		data, err := json.Marshal(map[string]int{
50
+			"value": v,
51
+		})
52
+		suite.NoError(err)
53
+
54
+		suite.T().Run(strconv.Itoa(v), func(t *testing.T) {
55
+			testStruct := &typePortTestStruct{}
56
+
57
+			assert.NoError(t, json.Unmarshal(data, testStruct))
58
+			assert.EqualValues(t, value, testStruct.Value.Value(0))
59
+		})
60
+	}
61
+}
62
+
63
+func (suite *TypePortTestSuite) TestMarshalOk() {
64
+	testData := map[string]int{
65
+		"1":     1,
66
+		"1000":  1000,
67
+		"65535": 65535,
68
+	}
69
+
70
+	for k, v := range testData {
71
+		name := k
72
+		value := v
73
+
74
+		data, err := json.Marshal(map[string]int{
75
+			"value": value,
76
+		})
77
+		suite.NoError(err)
78
+
79
+		suite.T().Run(name, func(t *testing.T) {
80
+			testStruct := &typePortTestStruct{}
81
+
82
+			assert.NoError(t, json.Unmarshal(data, testStruct))
83
+			assert.Equal(t, name, testStruct.Value.String())
84
+
85
+			marshalled, err := testStruct.Value.MarshalJSON()
86
+			assert.NoError(t, err)
87
+			assert.Equal(t, name, string(marshalled))
88
+		})
89
+	}
90
+}
91
+
92
+func (suite *TypePortTestSuite) TestValue() {
93
+	testStruct := &typePortTestStruct{}
94
+
95
+	suite.EqualValues(0, testStruct.Value.Value(0))
96
+	suite.EqualValues(1, testStruct.Value.Value(1))
97
+
98
+	data, err := json.Marshal(map[string]int{
99
+		"value": 5,
100
+	})
101
+	suite.NoError(err)
102
+	suite.NoError(json.Unmarshal(data, testStruct))
103
+
104
+	suite.EqualValues(5, testStruct.Value.Value(0))
105
+	suite.EqualValues(5, testStruct.Value.Value(1))
106
+}
107
+
108
+func TestTypePort(t *testing.T) {
109
+	t.Parallel()
110
+	suite.Run(t, &TypePortTestSuite{})
111
+}

+ 1
- 1
config/type_url.go Просмотреть файл

@@ -10,7 +10,7 @@ type TypeURL struct {
10 10
 	value *url.URL
11 11
 }
12 12
 
13
-func (c *TypeURL) UnmarshalText(data []byte) error {
13
+func (c *TypeURL) UnmarshalText(data []byte) error { // nolint: cyclop
14 14
 	if len(data) == 0 {
15 15
 		return nil
16 16
 	}

Загрузка…
Отмена
Сохранить