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 }