github.com/lyft/flytestdlib@v0.3.12-0.20210213045714-8cdd111ecda1/config/port_test.go (about) 1 package config 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "reflect" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 type PortTestCase struct { 13 Expected Port 14 Input interface{} 15 } 16 17 func TestPort_MarshalJSON(t *testing.T) { 18 validPorts := []PortTestCase{ 19 {Expected: Port{Port: 8080}, Input: 8080}, 20 {Expected: Port{Port: 1}, Input: 1}, 21 {Expected: Port{Port: 65535}, Input: "65535"}, 22 {Expected: Port{Port: 65535}, Input: 65535}, 23 } 24 25 for i, validPort := range validPorts { 26 t.Run(fmt.Sprintf("Valid %v [%v]", i, validPort.Input), func(t *testing.T) { 27 b, err := json.Marshal(validPort.Input) 28 assert.NoError(t, err) 29 30 actual := Port{} 31 err = actual.UnmarshalJSON(b) 32 assert.NoError(t, err) 33 34 assert.True(t, reflect.DeepEqual(validPort.Expected, actual)) 35 }) 36 } 37 } 38 39 func TestPort_UnmarshalJSON(t *testing.T) { 40 invalidValues := []interface{}{ 41 "%gh&%ij", 42 1000000, 43 true, 44 } 45 46 for i, invalidPort := range invalidValues { 47 t.Run(fmt.Sprintf("Invalid %v", i), func(t *testing.T) { 48 raw, err := json.Marshal(invalidPort) 49 assert.NoError(t, err) 50 51 actual := URL{} 52 err = actual.UnmarshalJSON(raw) 53 assert.Error(t, err) 54 }) 55 } 56 57 t.Run("Invalid json", func(t *testing.T) { 58 actual := Port{} 59 err := actual.UnmarshalJSON([]byte{}) 60 assert.Error(t, err) 61 }) 62 63 t.Run("Invalid Range", func(t *testing.T) { 64 b, err := json.Marshal(float64(100000)) 65 assert.NoError(t, err) 66 67 actual := Port{} 68 err = actual.UnmarshalJSON(b) 69 assert.Error(t, err) 70 }) 71 72 t.Run("Unmarshal Empty", func(t *testing.T) { 73 p := Port{} 74 raw, err := json.Marshal(p) 75 assert.NoError(t, err) 76 77 actual := Port{} 78 assert.NoError(t, actual.UnmarshalJSON(raw)) 79 assert.Equal(t, 0, actual.Port) 80 }) 81 }