github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/fleetmanager/topology/compare_test.go (about)

     1  package topology
     2  
     3  import (
     4  	"net"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  var (
    10  	ipAddrOne = net.IP{1, 2, 3, 4}
    11  	ipAddrTwo = net.IP{5, 6, 7, 8}
    12  )
    13  
    14  func testNonzero(t *testing.T, valueValue reflect.Value, equalTest func(),
    15  	notEqualTest func()) {
    16  	valueType := valueValue.Type()
    17  	for index := 0; index < valueValue.NumField(); index++ {
    18  		fieldValue := valueValue.Field(index)
    19  		if !fieldValue.CanSet() {
    20  			continue
    21  		}
    22  		fieldKind := fieldValue.Kind()
    23  		switch fieldKind {
    24  		case reflect.Bool:
    25  			equalTest()
    26  			fieldValue.SetBool(true)
    27  			notEqualTest()
    28  			fieldValue.SetBool(false)
    29  			equalTest()
    30  		case reflect.Map:
    31  			equalTest()
    32  			mapValue := reflect.MakeMap(fieldValue.Type())
    33  			fieldValue.Set(mapValue)
    34  			mapValue.SetMapIndex(reflect.ValueOf("key"),
    35  				reflect.ValueOf("value"))
    36  			notEqualTest()
    37  			fieldValue.Set(reflect.MakeMap(fieldValue.Type()))
    38  			equalTest()
    39  		case reflect.Slice:
    40  			for index := 0; index < fieldValue.Len(); index++ {
    41  				testNonzero(t, fieldValue.Index(index), equalTest, notEqualTest)
    42  			}
    43  		case reflect.String:
    44  			equalTest()
    45  			fieldValue.SetString(valueType.Field(index).Name)
    46  			notEqualTest()
    47  			fieldValue.SetString("")
    48  			equalTest()
    49  		case reflect.Struct:
    50  			testNonzero(t, fieldValue, equalTest, notEqualTest)
    51  		case reflect.Uint:
    52  			equalTest()
    53  			fieldValue.SetUint(1)
    54  			notEqualTest()
    55  			fieldValue.SetUint(0)
    56  			equalTest()
    57  		default:
    58  			t.Fatalf("Unsupported field type: %s", fieldKind)
    59  		}
    60  	}
    61  }
    62  
    63  func TestCompareAllDirectoryFields(t *testing.T) {
    64  	left := &Directory{}
    65  	right := &Directory{}
    66  	if got := left.equal(right); got != true {
    67  		t.Errorf("equal(%v, %v) = %v", left, right, got)
    68  	}
    69  	testNonzero(t, reflect.ValueOf(right).Elem(),
    70  		func() { // Function to check for equality.
    71  			if got := left.equal(right); got != true {
    72  				t.Errorf("equal(%v, %v) = %v", left, right, got)
    73  			}
    74  		},
    75  		func() { // Function to check for non-equality.
    76  			if got := left.equal(right); got != false {
    77  				t.Errorf("equal(%v, %v) = %v", left, right, got)
    78  			}
    79  		})
    80  }
    81  
    82  func TestCompareAllSubnetFields(t *testing.T) {
    83  	left := &Subnet{}
    84  	right := &Subnet{}
    85  	if got := left.equal(right); got != true {
    86  		t.Errorf("equal(%v, %v) = %v", left, right, got)
    87  	}
    88  	testNonzero(t, reflect.ValueOf(right).Elem(),
    89  		func() { // Function to check for equality.
    90  			if got := left.equal(right); got != true {
    91  				t.Errorf("equal(%v, %v) = %v", left, right, got)
    92  			}
    93  		},
    94  		func() { // Function to check for non-equality.
    95  			if got := left.equal(right); got != false {
    96  				t.Errorf("equal(%v, %v) = %v", left, right, got)
    97  			}
    98  		})
    99  }
   100  
   101  func TestCompareFirstAuto(t *testing.T) {
   102  	left := &Subnet{}
   103  	right := &Subnet{}
   104  	if got := left.equal(right); got != true {
   105  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   106  	}
   107  	left.FirstAutoIP = ipAddrOne
   108  	if got := left.equal(right); got != false {
   109  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   110  	}
   111  	right.FirstAutoIP = ipAddrOne
   112  	if got := left.equal(right); got != true {
   113  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   114  	}
   115  	right.FirstAutoIP = ipAddrTwo
   116  	if got := left.equal(right); got != false {
   117  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   118  	}
   119  	left.FirstAutoIP = nil
   120  	if got := left.equal(right); got != false {
   121  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   122  	}
   123  }
   124  
   125  func TestCompareLastAuto(t *testing.T) {
   126  	left := &Subnet{}
   127  	right := &Subnet{}
   128  	if got := left.equal(right); got != true {
   129  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   130  	}
   131  	left.LastAutoIP = ipAddrOne
   132  	if got := left.equal(right); got != false {
   133  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   134  	}
   135  	right.LastAutoIP = ipAddrOne
   136  	if got := left.equal(right); got != true {
   137  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   138  	}
   139  	right.LastAutoIP = ipAddrTwo
   140  	if got := left.equal(right); got != false {
   141  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   142  	}
   143  	left.LastAutoIP = nil
   144  	if got := left.equal(right); got != false {
   145  		t.Errorf("equal(%v, %v) = %v", left, right, got)
   146  	}
   147  }