Add tests for type bytes

This commit is contained in:
9seconds
2021-03-11 16:33:29 +03:00
parent 6b9b437a5a
commit bc4b14c83d
4 changed files with 137 additions and 20 deletions
+8 -5
View File
@@ -8,7 +8,7 @@ import (
)
type TypeBytes struct {
value uint
value units.Base2Bytes
}
func (c *TypeBytes) UnmarshalText(data []byte) error {
@@ -16,7 +16,10 @@ func (c *TypeBytes) UnmarshalText(data []byte) error {
return nil
}
value, err := units.ParseStrictBytes(strings.ToUpper(string(data)))
normalizedData := strings.ToUpper(string(data))
normalizedData = strings.ReplaceAll(normalizedData, "IB", "iB")
value, err := units.ParseBase2Bytes(normalizedData)
if err != nil {
return fmt.Errorf("incorrect bytes value: %w", err)
}
@@ -25,7 +28,7 @@ func (c *TypeBytes) UnmarshalText(data []byte) error {
return fmt.Errorf("%d should be positive number", value)
}
c.value = uint(value)
c.value = value
return nil
}
@@ -35,7 +38,7 @@ func (c TypeBytes) MarshalText() ([]byte, error) {
}
func (c TypeBytes) String() string {
return units.ToString(int64(c.value), 1024, "ib", "b")
return strings.ToLower(c.value.String())
}
func (c TypeBytes) Value(defaultValue uint) uint {
@@ -43,5 +46,5 @@ func (c TypeBytes) Value(defaultValue uint) uint {
return defaultValue
}
return c.value
return uint(c.value)
}
+114
View File
@@ -0,0 +1,114 @@
package config_test
import (
"encoding/json"
"testing"
"github.com/9seconds/mtg/v2/config"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
type typeBytesTestStruct struct {
Value config.TypeBytes `json:"value"`
}
type TypeBytesTestSuite struct {
suite.Suite
}
func (suite *TypeBytesTestSuite) TestUnmarshalFail() {
testData := []string{
"1m",
"1",
"-1kb",
"-1kib",
"-1QB",
}
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, &typeBytesTestStruct{}))
})
}
}
func (suite *TypeBytesTestSuite) TestUnmarshalOk() {
testData := map[string]uint{
"1b": 1,
"1kb": 1024,
"1kib": 1024,
"2mb": 2 * 1024 * 1024,
"2mib": 2 * 1024 * 1024,
}
for k, v := range testData {
value := v
data, err := json.Marshal(map[string]string{
"value": k,
})
suite.NoError(err)
suite.T().Run(k, func(t *testing.T) {
testStruct := &typeBytesTestStruct{}
assert.NoError(t, json.Unmarshal(data, testStruct))
assert.Equal(t, int(value), int(testStruct.Value.Value(0)))
})
}
}
func (suite *TypeBytesTestSuite) TestMarshalOk() {
testData := []string{
"1b",
"1kib",
"2mib",
}
for _, v := range testData {
name := v
data, err := json.Marshal(map[string]string{
"value": name,
})
suite.NoError(err)
suite.T().Run(name, func(t *testing.T) {
testStruct := &typeBytesTestStruct{}
assert.NoError(t, json.Unmarshal(data, testStruct))
assert.Equal(t, name, testStruct.Value.String())
marshalled, err := testStruct.Value.MarshalText()
assert.NoError(t, err)
assert.Equal(t, string(marshalled), name)
})
}
}
func (suite *TypeBytesTestSuite) TestValue() {
testStruct := &typeBytesTestStruct{}
suite.EqualValues(0, testStruct.Value.Value(0))
suite.EqualValues(1, testStruct.Value.Value(1))
data, err := json.Marshal(map[string]string{
"value": "1kb",
})
suite.NoError(err)
suite.NoError(json.Unmarshal(data, testStruct))
suite.EqualValues(1024, testStruct.Value.Value(0))
suite.EqualValues(1024, testStruct.Value.Value(1))
}
func TestTypeBytes(t *testing.T) {
t.Parallel()
suite.Run(t, &TypeBytesTestSuite{})
}