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  }