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>
This commit is contained in:
Madhu Venugopal 2015-05-23 12:20:30 -07:00
parent c14334bfc7
commit a1c3dce3e9
3 changed files with 19 additions and 19 deletions

View file

@ -107,7 +107,7 @@ func (h *httpHandler) initRouter() {
h.r = mux.NewRouter()
for method, routes := range m {
for _, route := range routes {
r := h.r.Path(route.url).Methods(method).HandlerFunc(makeHandler(h.c, route.fct))
r := h.r.Path("/{.*}" + route.url).Methods(method).HandlerFunc(makeHandler(h.c, route.fct))
if route.qrs != nil {
r.Queries(route.qrs...)
}

View file

@ -1136,7 +1136,7 @@ func TestHttpHandlerUninit(t *testing.T) {
}
rsp := newWriter()
req, err := http.NewRequest("GET", "/networks", nil)
req, err := http.NewRequest("GET", "/v1.19/networks", nil)
if err != nil {
t.Fatal(err)
}
@ -1196,7 +1196,7 @@ func TestHttpHandlerBadBody(t *testing.T) {
}
handleRequest := NewHTTPHandler(c)
req, err := http.NewRequest("POST", "/networks", &localReader{beBad: true})
req, err := http.NewRequest("POST", "/v1.19/networks", &localReader{beBad: true})
if err != nil {
t.Fatal(err)
}
@ -1207,7 +1207,7 @@ func TestHttpHandlerBadBody(t *testing.T) {
body := []byte{}
lr := newLocalReader(body)
req, err = http.NewRequest("POST", "/networks", lr)
req, err = http.NewRequest("POST", "/v1.19/networks", lr)
if err != nil {
t.Fatal(err)
}
@ -1235,7 +1235,7 @@ func TestEndToEnd(t *testing.T) {
t.Fatal(err)
}
lr := newLocalReader(body)
req, err := http.NewRequest("POST", "/networks", lr)
req, err := http.NewRequest("POST", "/v1.19/networks", lr)
if err != nil {
t.Fatal(err)
}
@ -1254,7 +1254,7 @@ func TestEndToEnd(t *testing.T) {
}
// Query networks collection
req, err = http.NewRequest("GET", "/networks", nil)
req, err = http.NewRequest("GET", "/v1.19/networks", nil)
if err != nil {
t.Fatal(err)
}
@ -1266,7 +1266,7 @@ func TestEndToEnd(t *testing.T) {
b0 := make([]byte, len(rsp.body))
copy(b0, rsp.body)
req, err = http.NewRequest("GET", "/networks?name=network-fiftyfive", nil)
req, err = http.NewRequest("GET", "/v1.19/networks?name=network-fiftyfive", nil)
if err != nil {
t.Fatal(err)
}
@ -1280,7 +1280,7 @@ func TestEndToEnd(t *testing.T) {
}
// Query network by name
req, err = http.NewRequest("GET", "/networks?name=culo", nil)
req, err = http.NewRequest("GET", "/v1.19/networks?name=culo", nil)
if err != nil {
t.Fatal(err)
}
@ -1298,7 +1298,7 @@ func TestEndToEnd(t *testing.T) {
t.Fatalf("Expected empty list. Got %v", list)
}
req, err = http.NewRequest("GET", "/networks?name=network-fiftyfive", nil)
req, err = http.NewRequest("GET", "/v1.19/networks?name=network-fiftyfive", nil)
if err != nil {
t.Fatal(err)
}
@ -1321,7 +1321,7 @@ func TestEndToEnd(t *testing.T) {
// Query network by partial id
chars := []byte(nid)
partial := string(chars[0 : len(chars)/2])
req, err = http.NewRequest("GET", "/networks?partial-id="+partial, nil)
req, err = http.NewRequest("GET", "/v1.19/networks?partial-id="+partial, nil)
if err != nil {
t.Fatal(err)
}
@ -1342,7 +1342,7 @@ func TestEndToEnd(t *testing.T) {
}
// Get network by id
req, err = http.NewRequest("GET", "/networks/"+nid, nil)
req, err = http.NewRequest("GET", "/v1.19/networks/"+nid, nil)
if err != nil {
t.Fatal(err)
}
@ -1367,7 +1367,7 @@ func TestEndToEnd(t *testing.T) {
}
lr = newLocalReader(eb)
req, err = http.NewRequest("POST", "/networks/"+nid+"/endpoints", lr)
req, err = http.NewRequest("POST", "/v1.19/networks/"+nid+"/endpoints", lr)
if err != nil {
t.Fatal(err)
}
@ -1386,7 +1386,7 @@ func TestEndToEnd(t *testing.T) {
}
// Query endpoint(s)
req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints", nil)
req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints", nil)
if err != nil {
t.Fatal(err)
}
@ -1395,7 +1395,7 @@ func TestEndToEnd(t *testing.T) {
t.Fatalf("Expected StatusOK. Got (%d): %s", rsp.statusCode, rsp.body)
}
req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints?name=bla", nil)
req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints?name=bla", nil)
if err != nil {
t.Fatal(err)
}
@ -1413,7 +1413,7 @@ func TestEndToEnd(t *testing.T) {
}
// Query endpoint by name
req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints?name=ep-TwentyTwo", nil)
req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints?name=ep-TwentyTwo", nil)
if err != nil {
t.Fatal(err)
}
@ -1436,7 +1436,7 @@ func TestEndToEnd(t *testing.T) {
// Query endpoint by partial id
chars = []byte(eid)
partial = string(chars[0 : len(chars)/2])
req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints?partial-id="+partial, nil)
req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints?partial-id="+partial, nil)
if err != nil {
t.Fatal(err)
}
@ -1457,7 +1457,7 @@ func TestEndToEnd(t *testing.T) {
}
// Get endpoint by id
req, err = http.NewRequest("GET", "/networks/"+nid+"/endpoints/"+eid, nil)
req, err = http.NewRequest("GET", "/v1.19/networks/"+nid+"/endpoints/"+eid, nil)
if err != nil {
t.Fatal(err)
}

View file

@ -113,7 +113,7 @@ func (d *dnetConnection) dnetDaemon() error {
}
httpHandler := api.NewHTTPHandler(controller)
r := mux.NewRouter().StrictSlash(false)
post := r.PathPrefix("/networks").Subrouter()
post := r.PathPrefix("/{.*}/networks").Subrouter()
post.Methods("GET", "PUT", "POST", "DELETE").HandlerFunc(httpHandler)
return http.ListenAndServe(d.addr, r)
}
@ -141,7 +141,7 @@ func (d *dnetConnection) httpCall(method, path string, data interface{}, headers
return nil, -1, err
}
req, err := http.NewRequest(method, fmt.Sprintf("%s", path), in)
req, err := http.NewRequest(method, fmt.Sprintf("/dnet%s", path), in)
if err != nil {
return nil, -1, err
}