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

Add tests for type bytes

tags/v2.0.0-rc1
9seconds 5 лет назад
Родитель
Сommit
bc4b14c83d
4 измененных файлов: 137 добавлений и 20 удалений
  1. 8
    5
      config/type_bytes.go
  2. 114
    0
      config/type_bytes_test.go
  3. 7
    7
      mtglib/network/proxy_dialer_internal_test.go
  4. 8
    8
      mtglib/secret_test.go

+ 8
- 5
config/type_bytes.go Просмотреть файл

8
 )
8
 )
9
 
9
 
10
 type TypeBytes struct {
10
 type TypeBytes struct {
11
-	value uint
11
+	value units.Base2Bytes
12
 }
12
 }
13
 
13
 
14
 func (c *TypeBytes) UnmarshalText(data []byte) error {
14
 func (c *TypeBytes) UnmarshalText(data []byte) error {
16
 		return nil
16
 		return nil
17
 	}
17
 	}
18
 
18
 
19
-	value, err := units.ParseStrictBytes(strings.ToUpper(string(data)))
19
+	normalizedData := strings.ToUpper(string(data))
20
+	normalizedData = strings.ReplaceAll(normalizedData, "IB", "iB")
21
+
22
+	value, err := units.ParseBase2Bytes(normalizedData)
20
 	if err != nil {
23
 	if err != nil {
21
 		return fmt.Errorf("incorrect bytes value: %w", err)
24
 		return fmt.Errorf("incorrect bytes value: %w", err)
22
 	}
25
 	}
25
 		return fmt.Errorf("%d should be positive number", value)
28
 		return fmt.Errorf("%d should be positive number", value)
26
 	}
29
 	}
27
 
30
 
28
-	c.value = uint(value)
31
+	c.value = value
29
 
32
 
30
 	return nil
33
 	return nil
31
 }
34
 }
35
 }
38
 }
36
 
39
 
37
 func (c TypeBytes) String() string {
40
 func (c TypeBytes) String() string {
38
-	return units.ToString(int64(c.value), 1024, "ib", "b")
41
+	return strings.ToLower(c.value.String())
39
 }
42
 }
40
 
43
 
41
 func (c TypeBytes) Value(defaultValue uint) uint {
44
 func (c TypeBytes) Value(defaultValue uint) uint {
43
 		return defaultValue
46
 		return defaultValue
44
 	}
47
 	}
45
 
48
 
46
-	return c.value
49
+	return uint(c.value)
47
 }
50
 }

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

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 typeBytesTestStruct struct {
13
+	Value config.TypeBytes `json:"value"`
14
+}
15
+
16
+type TypeBytesTestSuite struct {
17
+	suite.Suite
18
+}
19
+
20
+func (suite *TypeBytesTestSuite) TestUnmarshalFail() {
21
+	testData := []string{
22
+		"1m",
23
+		"1",
24
+		"-1kb",
25
+		"-1kib",
26
+		"-1QB",
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, &typeBytesTestStruct{}))
37
+		})
38
+	}
39
+}
40
+
41
+func (suite *TypeBytesTestSuite) TestUnmarshalOk() {
42
+	testData := map[string]uint{
43
+		"1b":   1,
44
+		"1kb":  1024,
45
+		"1kib": 1024,
46
+		"2mb":  2 * 1024 * 1024,
47
+		"2mib": 2 * 1024 * 1024,
48
+	}
49
+
50
+	for k, v := range testData {
51
+		value := v
52
+
53
+		data, err := json.Marshal(map[string]string{
54
+			"value": k,
55
+		})
56
+		suite.NoError(err)
57
+
58
+		suite.T().Run(k, func(t *testing.T) {
59
+			testStruct := &typeBytesTestStruct{}
60
+
61
+			assert.NoError(t, json.Unmarshal(data, testStruct))
62
+			assert.Equal(t, int(value), int(testStruct.Value.Value(0)))
63
+		})
64
+	}
65
+}
66
+
67
+func (suite *TypeBytesTestSuite) TestMarshalOk() {
68
+	testData := []string{
69
+		"1b",
70
+		"1kib",
71
+		"2mib",
72
+	}
73
+
74
+	for _, v := range testData {
75
+		name := v
76
+
77
+		data, err := json.Marshal(map[string]string{
78
+			"value": name,
79
+		})
80
+		suite.NoError(err)
81
+
82
+		suite.T().Run(name, func(t *testing.T) {
83
+			testStruct := &typeBytesTestStruct{}
84
+
85
+			assert.NoError(t, json.Unmarshal(data, testStruct))
86
+			assert.Equal(t, name, testStruct.Value.String())
87
+
88
+			marshalled, err := testStruct.Value.MarshalText()
89
+			assert.NoError(t, err)
90
+			assert.Equal(t, string(marshalled), name)
91
+		})
92
+	}
93
+}
94
+
95
+func (suite *TypeBytesTestSuite) TestValue() {
96
+	testStruct := &typeBytesTestStruct{}
97
+
98
+	suite.EqualValues(0, testStruct.Value.Value(0))
99
+	suite.EqualValues(1, testStruct.Value.Value(1))
100
+
101
+	data, err := json.Marshal(map[string]string{
102
+		"value": "1kb",
103
+	})
104
+	suite.NoError(err)
105
+	suite.NoError(json.Unmarshal(data, testStruct))
106
+
107
+	suite.EqualValues(1024, testStruct.Value.Value(0))
108
+	suite.EqualValues(1024, testStruct.Value.Value(1))
109
+}
110
+
111
+func TestTypeBytes(t *testing.T) {
112
+	t.Parallel()
113
+	suite.Run(t, &TypeBytesTestSuite{})
114
+}

+ 7
- 7
mtglib/network/proxy_dialer_internal_test.go Просмотреть файл

1
 package network
1
 package network
2
 
2
 
3
 import (
3
 import (
4
-	"fmt"
5
 	"net/url"
4
 	"net/url"
6
 	"testing"
5
 	"testing"
7
 	"time"
6
 	"time"
8
 
7
 
8
+	"github.com/stretchr/testify/assert"
9
 	"github.com/stretchr/testify/suite"
9
 	"github.com/stretchr/testify/suite"
10
 )
10
 )
11
 
11
 
49
 
49
 
50
 	for _, v := range params {
50
 	for _, v := range params {
51
 		param := v
51
 		param := v
52
-		suite.T().Run(fmt.Sprintf("param=%s", v), func(t *testing.T) {
52
+		suite.T().Run(v, func(t *testing.T) {
53
 			query.Set("open_threshold", param)
53
 			query.Set("open_threshold", param)
54
 
54
 
55
 			suite.u.RawQuery = query.Encode()
55
 			suite.u.RawQuery = query.Encode()
56
 			d := newProxyDialer(&DialerMock{}, suite.u).(*circuitBreakerDialer)
56
 			d := newProxyDialer(&DialerMock{}, suite.u).(*circuitBreakerDialer)
57
 
57
 
58
-			suite.EqualValues(ProxyDialerOpenThreshold, d.openThreshold)
58
+			assert.EqualValues(t, ProxyDialerOpenThreshold, d.openThreshold)
59
 		})
59
 		})
60
 	}
60
 	}
61
 }
61
 }
66
 
66
 
67
 	for _, v := range params {
67
 	for _, v := range params {
68
 		param := v
68
 		param := v
69
-		suite.T().Run(fmt.Sprintf("param=%s", v), func(t *testing.T) {
69
+		suite.T().Run(v, func(t *testing.T) {
70
 			query.Set("half_open_timeout", param)
70
 			query.Set("half_open_timeout", param)
71
 
71
 
72
 			suite.u.RawQuery = query.Encode()
72
 			suite.u.RawQuery = query.Encode()
73
 			d := newProxyDialer(&DialerMock{}, suite.u).(*circuitBreakerDialer)
73
 			d := newProxyDialer(&DialerMock{}, suite.u).(*circuitBreakerDialer)
74
 
74
 
75
-			suite.EqualValues(ProxyDialerHalfOpenTimeout, d.halfOpenTimeout)
75
+			assert.EqualValues(t, ProxyDialerHalfOpenTimeout, d.halfOpenTimeout)
76
 		})
76
 		})
77
 	}
77
 	}
78
 }
78
 }
83
 
83
 
84
 	for _, v := range params {
84
 	for _, v := range params {
85
 		param := v
85
 		param := v
86
-		suite.T().Run(fmt.Sprintf("param=%s", v), func(t *testing.T) {
86
+		suite.T().Run(v, func(t *testing.T) {
87
 			query.Set("reset_failures_timeout", param)
87
 			query.Set("reset_failures_timeout", param)
88
 
88
 
89
 			suite.u.RawQuery = query.Encode()
89
 			suite.u.RawQuery = query.Encode()
90
 			d := newProxyDialer(&DialerMock{}, suite.u).(*circuitBreakerDialer)
90
 			d := newProxyDialer(&DialerMock{}, suite.u).(*circuitBreakerDialer)
91
 
91
 
92
-			suite.EqualValues(ProxyDialerHalfOpenTimeout, d.halfOpenTimeout)
92
+			assert.EqualValues(t, ProxyDialerHalfOpenTimeout, d.halfOpenTimeout)
93
 		})
93
 		})
94
 	}
94
 	}
95
 }
95
 }

+ 8
- 8
mtglib/secret_test.go Просмотреть файл

6
 	"testing"
6
 	"testing"
7
 
7
 
8
 	"github.com/9seconds/mtg/v2/mtglib"
8
 	"github.com/9seconds/mtg/v2/mtglib"
9
+	"github.com/stretchr/testify/assert"
9
 	"github.com/stretchr/testify/suite"
10
 	"github.com/stretchr/testify/suite"
10
 )
11
 )
11
 
12
 
32
 		suite.T().Run(name, func(t *testing.T) {
33
 		suite.T().Run(name, func(t *testing.T) {
33
 			parsed, err := mtglib.ParseSecret(param)
34
 			parsed, err := mtglib.ParseSecret(param)
34
 
35
 
35
-			suite.NoError(err)
36
-			suite.Equal(s.Key, parsed.Key)
37
-			suite.Equal(s.Host, parsed.Host)
36
+			assert.NoError(t, err)
37
+			assert.Equal(t, s.Key, parsed.Key)
38
+			assert.Equal(t, s.Host, parsed.Host)
38
 
39
 
39
 			newSecret := mtglib.Secret{}
40
 			newSecret := mtglib.Secret{}
40
 
41
 
41
-			suite.NoError(newSecret.UnmarshalText([]byte(param)))
42
-
43
-			suite.Equal(s.Key, newSecret.Key)
44
-			suite.Equal(s.Host, newSecret.Host)
42
+			assert.NoError(t, newSecret.UnmarshalText([]byte(param)))
43
+			assert.Equal(t, s.Key, newSecret.Key)
44
+			assert.Equal(t, s.Host, newSecret.Host)
45
 		})
45
 		})
46
 	}
46
 	}
47
 }
47
 }
88
 		suite.T().Run(param, func(t *testing.T) {
88
 		suite.T().Run(param, func(t *testing.T) {
89
 			_, err := mtglib.ParseSecret(param)
89
 			_, err := mtglib.ParseSecret(param)
90
 
90
 
91
-			suite.Error(err)
91
+			assert.Error(t, err)
92
 		})
92
 		})
93
 	}
93
 	}
94
 }
94
 }

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