Browse code

Added a catch-all root hierarchy for the API path

Though libnetwork api is supposed to handle the sub router, it is given
the entire URL to deal with. But the current api.go assumes the network/
to be in the root path.
We need this patch to make it work seamlessly with docker & dnet UI & API

Signed-off-by: Madhu Venugopal <madhu@docker.com>

Madhu Venugopal authored on 2015/05/24 04:20:30
Showing 3 changed files
... ...
@@ -107,7 +107,7 @@ func (h *httpHandler) initRouter() {
107 107
 	h.r = mux.NewRouter()
108 108
 	for method, routes := range m {
109 109
 		for _, route := range routes {
110
-			r := h.r.Path(route.url).Methods(method).HandlerFunc(makeHandler(h.c, route.fct))
110
+			r := h.r.Path("/{.*}" + route.url).Methods(method).HandlerFunc(makeHandler(h.c, route.fct))
111 111
 			if route.qrs != nil {
112 112
 				r.Queries(route.qrs...)
113 113
 			}
... ...
@@ -1136,7 +1136,7 @@ func TestHttpHandlerUninit(t *testing.T) {
1136 1136
 	}
1137 1137
 
1138 1138
 	rsp := newWriter()
1139
-	req, err := http.NewRequest("GET", "/networks", nil)
1139
+	req, err := http.NewRequest("GET", "/v1.19/networks", nil)
1140 1140
 	if err != nil {
1141 1141
 		t.Fatal(err)
1142 1142
 	}
... ...
@@ -1196,7 +1196,7 @@ func TestHttpHandlerBadBody(t *testing.T) {
1196 1196
 	}
1197 1197
 	handleRequest := NewHTTPHandler(c)
1198 1198
 
1199
-	req, err := http.NewRequest("POST", "/networks", &localReader{beBad: true})
1199
+	req, err := http.NewRequest("POST", "/v1.19/networks", &localReader{beBad: true})
1200 1200
 	if err != nil {
1201 1201
 		t.Fatal(err)
1202 1202
 	}
... ...
@@ -1207,7 +1207,7 @@ func TestHttpHandlerBadBody(t *testing.T) {
1207 1207
 
1208 1208
 	body := []byte{}
1209 1209
 	lr := newLocalReader(body)
1210
-	req, err = http.NewRequest("POST", "/networks", lr)
1210
+	req, err = http.NewRequest("POST", "/v1.19/networks", lr)
1211 1211
 	if err != nil {
1212 1212
 		t.Fatal(err)
1213 1213
 	}
... ...
@@ -1235,7 +1235,7 @@ func TestEndToEnd(t *testing.T) {
1235 1235
 		t.Fatal(err)
1236 1236
 	}
1237 1237
 	lr := newLocalReader(body)
1238
-	req, err := http.NewRequest("POST", "/networks", lr)
1238
+	req, err := http.NewRequest("POST", "/v1.19/networks", lr)
1239 1239
 	if err != nil {
1240 1240
 		t.Fatal(err)
1241 1241
 	}
... ...
@@ -1254,7 +1254,7 @@ func TestEndToEnd(t *testing.T) {
1254 1254
 	}
1255 1255
 
1256 1256
 	// Query networks collection
1257
-	req, err = http.NewRequest("GET", "/networks", nil)
1257
+	req, err = http.NewRequest("GET", "/v1.19/networks", nil)
1258 1258
 	if err != nil {
1259 1259
 		t.Fatal(err)
1260 1260
 	}
... ...
@@ -1266,7 +1266,7 @@ func TestEndToEnd(t *testing.T) {
1266 1266
 	b0 := make([]byte, len(rsp.body))
1267 1267
 	copy(b0, rsp.body)
1268 1268
 
1269
-	req, err = http.NewRequest("GET", "/networks?name=network-fiftyfive", nil)
1269
+	req, err = http.NewRequest("GET", "/v1.19/networks?name=network-fiftyfive", nil)
1270 1270
 	if err != nil {
1271 1271
 		t.Fatal(err)
1272 1272
 	}
... ...
@@ -1280,7 +1280,7 @@ func TestEndToEnd(t *testing.T) {
1280 1280
 	}
1281 1281
 
1282 1282
 	// Query network by name
1283
-	req, err = http.NewRequest("GET", "/networks?name=culo", nil)
1283
+	req, err = http.NewRequest("GET", "/v1.19/networks?name=culo", nil)
1284 1284
 	if err != nil {
1285 1285
 		t.Fatal(err)
1286 1286
 	}
... ...
@@ -1298,7 +1298,7 @@ func TestEndToEnd(t *testing.T) {
1298 1298
 		t.Fatalf("Expected empty list. Got %v", list)
1299 1299
 	}
1300 1300
 
1301
-	req, err = http.NewRequest("GET", "/networks?name=network-fiftyfive", nil)
1301
+	req, err = http.NewRequest("GET", "/v1.19/networks?name=network-fiftyfive", nil)
1302 1302
 	if err != nil {
1303 1303
 		t.Fatal(err)
1304 1304
 	}
... ...
@@ -1321,7 +1321,7 @@ func TestEndToEnd(t *testing.T) {
1321 1321
 	// Query network by partial id
1322 1322
 	chars := []byte(nid)
1323 1323
 	partial := string(chars[0 : len(chars)/2])
1324
-	req, err = http.NewRequest("GET", "/networks?partial-id="+partial, nil)
1324
+	req, err = http.NewRequest("GET", "/v1.19/networks?partial-id="+partial, nil)
1325 1325
 	if err != nil {
1326 1326
 		t.Fatal(err)
1327 1327
 	}
... ...
@@ -1342,7 +1342,7 @@ func TestEndToEnd(t *testing.T) {
1342 1342
 	}
1343 1343
 
1344 1344
 	// Get network by id
1345
-	req, err = http.NewRequest("GET", "/networks/"+nid, nil)
1345
+	req, err = http.NewRequest("GET", "/v1.19/networks/"+nid, nil)
1346 1346
 	if err != nil {
1347 1347
 		t.Fatal(err)
1348 1348
 	}
... ...
@@ -1367,7 +1367,7 @@ func TestEndToEnd(t *testing.T) {
1367 1367
 	}
1368 1368
 
1369 1369
 	lr = newLocalReader(eb)
1370
-	req, err = http.NewRequest("POST", "/networks/"+nid+"/endpoints", lr)
1370
+	req, err = http.NewRequest("POST", "/v1.19/networks/"+nid+"/endpoints", lr)
1371 1371
 	if err != nil {
1372 1372
 		t.Fatal(err)
1373 1373
 	}
... ...
@@ -1386,7 +1386,7 @@ func TestEndToEnd(t *testing.T) {
1386 1386
 	}
1387 1387
 
1388 1388
 	// Query endpoint(s)
1389
-	req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints", nil)
1389
+	req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints", nil)
1390 1390
 	if err != nil {
1391 1391
 		t.Fatal(err)
1392 1392
 	}
... ...
@@ -1395,7 +1395,7 @@ func TestEndToEnd(t *testing.T) {
1395 1395
 		t.Fatalf("Expected StatusOK. Got (%d): %s", rsp.statusCode, rsp.body)
1396 1396
 	}
1397 1397
 
1398
-	req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints?name=bla", nil)
1398
+	req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints?name=bla", nil)
1399 1399
 	if err != nil {
1400 1400
 		t.Fatal(err)
1401 1401
 	}
... ...
@@ -1413,7 +1413,7 @@ func TestEndToEnd(t *testing.T) {
1413 1413
 	}
1414 1414
 
1415 1415
 	// Query endpoint by name
1416
-	req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints?name=ep-TwentyTwo", nil)
1416
+	req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints?name=ep-TwentyTwo", nil)
1417 1417
 	if err != nil {
1418 1418
 		t.Fatal(err)
1419 1419
 	}
... ...
@@ -1436,7 +1436,7 @@ func TestEndToEnd(t *testing.T) {
1436 1436
 	// Query endpoint by partial id
1437 1437
 	chars = []byte(eid)
1438 1438
 	partial = string(chars[0 : len(chars)/2])
1439
-	req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints?partial-id="+partial, nil)
1439
+	req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints?partial-id="+partial, nil)
1440 1440
 	if err != nil {
1441 1441
 		t.Fatal(err)
1442 1442
 	}
... ...
@@ -1457,7 +1457,7 @@ func TestEndToEnd(t *testing.T) {
1457 1457
 	}
1458 1458
 
1459 1459
 	// Get endpoint by id
1460
-	req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints/"+eid, nil)
1460
+	req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints/"+eid, nil)
1461 1461
 	if err != nil {
1462 1462
 		t.Fatal(err)
1463 1463
 	}
... ...
@@ -113,7 +113,7 @@ func (d *dnetConnection) dnetDaemon() error {
113 113
 	}
114 114
 	httpHandler := api.NewHTTPHandler(controller)
115 115
 	r := mux.NewRouter().StrictSlash(false)
116
-	post := r.PathPrefix("/networks").Subrouter()
116
+	post := r.PathPrefix("/{.*}/networks").Subrouter()
117 117
 	post.Methods("GET", "PUT", "POST", "DELETE").HandlerFunc(httpHandler)
118 118
 	return http.ListenAndServe(d.addr, r)
119 119
 }
... ...
@@ -141,7 +141,7 @@ func (d *dnetConnection) httpCall(method, path string, data interface{}, headers
141 141
 		return nil, -1, err
142 142
 	}
143 143
 
144
-	req, err := http.NewRequest(method, fmt.Sprintf("%s", path), in)
144
+	req, err := http.NewRequest(method, fmt.Sprintf("/dnet%s", path), in)
145 145
 	if err != nil {
146 146
 		return nil, -1, err
147 147
 	}