gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/router/table_test.go (about) 1 package router 2 3 import "testing" 4 5 func testSetup() (*table, Route) { 6 table := newTable() 7 8 route := Route{ 9 Service: "dest.svc", 10 Address: "dest.addr", 11 Gateway: "dest.gw", 12 Network: "dest.network", 13 Router: "src.router", 14 Link: "det.link", 15 Metric: 10, 16 } 17 18 return table, route 19 } 20 21 func TestCreate(t *testing.T) { 22 table, route := testSetup() 23 24 if err := table.Create(route); err != nil { 25 t.Errorf("error adding route: %s", err) 26 } 27 28 // adds new route for the original destination 29 route.Gateway = "dest.gw2" 30 31 if err := table.Create(route); err != nil { 32 t.Errorf("error adding route: %s", err) 33 } 34 35 // adding the same route under Insert policy must error 36 if err := table.Create(route); err != ErrDuplicateRoute { 37 t.Errorf("error adding route. Expected error: %s, found: %s", ErrDuplicateRoute, err) 38 } 39 } 40 41 func TestDelete(t *testing.T) { 42 table, route := testSetup() 43 44 if err := table.Create(route); err != nil { 45 t.Errorf("error adding route: %s", err) 46 } 47 48 // should fail to delete non-existant route 49 prevSvc := route.Service 50 route.Service = "randDest" 51 52 if err := table.Delete(route); err != ErrRouteNotFound { 53 t.Errorf("error deleting route. Expected: %s, found: %s", ErrRouteNotFound, err) 54 } 55 56 // we should be able to delete the existing route 57 route.Service = prevSvc 58 59 if err := table.Delete(route); err != nil { 60 t.Errorf("error deleting route: %s", err) 61 } 62 } 63 64 func TestUpdate(t *testing.T) { 65 table, route := testSetup() 66 67 if err := table.Create(route); err != nil { 68 t.Errorf("error adding route: %s", err) 69 } 70 71 // change the metric of the original route 72 route.Metric = 200 73 74 if err := table.Update(route); err != nil { 75 t.Errorf("error updating route: %s", err) 76 } 77 78 // this should add a new route 79 route.Service = "rand.dest" 80 81 if err := table.Update(route); err != nil { 82 t.Errorf("error updating route: %s", err) 83 } 84 } 85 86 func TestList(t *testing.T) { 87 table, route := testSetup() 88 89 svc := []string{"one.svc", "two.svc", "three.svc"} 90 91 for i := 0; i < len(svc); i++ { 92 route.Service = svc[i] 93 if err := table.Create(route); err != nil { 94 t.Errorf("error adding route: %s", err) 95 } 96 } 97 98 routes, err := table.List() 99 if err != nil { 100 t.Errorf("error listing routes: %s", err) 101 } 102 103 if len(routes) != len(svc) { 104 t.Errorf("incorrect number of routes listed. Expected: %d, found: %d", len(svc), len(routes)) 105 } 106 } 107 108 func TestQuery(t *testing.T) { 109 table, route := testSetup() 110 111 svc := []string{"svc1", "svc2", "svc3"} 112 net := []string{"net1", "net2", "net1"} 113 gw := []string{"gw1", "gw2", "gw3"} 114 rtr := []string{"rtr1", "rt2", "rt3"} 115 116 for i := 0; i < len(svc); i++ { 117 route.Service = svc[i] 118 route.Network = net[i] 119 route.Gateway = gw[i] 120 route.Router = rtr[i] 121 if err := table.Create(route); err != nil { 122 t.Errorf("error adding route: %s", err) 123 } 124 } 125 126 // return all routes 127 routes, err := table.Query() 128 if err != nil { 129 t.Errorf("error looking up routes: %s", err) 130 } else if len(routes) == 0 { 131 t.Errorf("error looking up routes: not found") 132 } 133 134 // query routes particular network 135 network := "net1" 136 137 routes, err = table.Query(QueryNetwork(network)) 138 if err != nil { 139 t.Errorf("error looking up routes: %s", err) 140 } 141 142 if len(routes) != 2 { 143 t.Errorf("incorrect number of routes returned. Expected: %d, found: %d", 2, len(routes)) 144 } 145 146 for _, route := range routes { 147 if route.Network != network { 148 t.Errorf("incorrect route returned. Expected network: %s, found: %s", network, route.Network) 149 } 150 } 151 152 // query routes for particular gateway 153 gateway := "gw1" 154 155 routes, err = table.Query(QueryGateway(gateway)) 156 if err != nil { 157 t.Errorf("error looking up routes: %s", err) 158 } 159 160 if len(routes) != 1 { 161 t.Errorf("incorrect number of routes returned. Expected: %d, found: %d", 1, len(routes)) 162 } 163 164 if routes[0].Gateway != gateway { 165 t.Errorf("incorrect route returned. Expected gateway: %s, found: %s", gateway, routes[0].Gateway) 166 } 167 168 // query routes for particular router 169 router := "rtr1" 170 171 routes, err = table.Query(QueryRouter(router)) 172 if err != nil { 173 t.Errorf("error looking up routes: %s", err) 174 } 175 176 if len(routes) != 1 { 177 t.Errorf("incorrect number of routes returned. Expected: %d, found: %d", 1, len(routes)) 178 } 179 180 if routes[0].Router != router { 181 t.Errorf("incorrect route returned. Expected router: %s, found: %s", router, routes[0].Router) 182 } 183 184 // query particular gateway and network 185 query := []QueryOption{ 186 QueryGateway(gateway), 187 QueryNetwork(network), 188 QueryRouter(router), 189 } 190 191 routes, err = table.Query(query...) 192 if err != nil { 193 t.Errorf("error looking up routes: %s", err) 194 } 195 196 if len(routes) != 1 { 197 t.Errorf("incorrect number of routes returned. Expected: %d, found: %d", 1, len(routes)) 198 } 199 200 if routes[0].Gateway != gateway { 201 t.Errorf("incorrect route returned. Expected gateway: %s, found: %s", gateway, routes[0].Gateway) 202 } 203 204 if routes[0].Network != network { 205 t.Errorf("incorrect network returned. Expected network: %s, found: %s", network, routes[0].Network) 206 } 207 208 if routes[0].Router != router { 209 t.Errorf("incorrect route returned. Expected router: %s, found: %s", router, routes[0].Router) 210 } 211 212 // non-existen route query 213 routes, err = table.Query(QueryService("foobar")) 214 if err != ErrRouteNotFound { 215 t.Errorf("error looking up routes. Expected: %s, found: %s", ErrRouteNotFound, err) 216 } 217 218 if len(routes) != 0 { 219 t.Errorf("incorrect number of routes returned. Expected: %d, found: %d", 0, len(routes)) 220 } 221 }