NewRouter supports custom backend clients 35/82835/1
authorKiran Kamineni <kiran.k.kamineni@intel.com>
Wed, 20 Mar 2019 17:32:23 +0000 (10:32 -0700)
committerKiran Kamineni <kiran.k.kamineni@intel.com>
Wed, 20 Mar 2019 17:32:27 +0000 (10:32 -0700)
NewRouter needs to support custom clients
This is needed where the backend clients are mocked
and we need url path parameters to be available in our
unit tests.
Using the same router code allows us to do this.

Issue-ID: MULTICLOUD-547
Change-Id: Id51b6f0a9afe4965efaf2611fc642bccb9ac1d39
Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
src/k8splugin/api/api.go
src/k8splugin/api/handler_test.go
src/k8splugin/cmd/main.go

index b566609..67a9128 100644 (file)
@@ -20,7 +20,8 @@ import (
 )
 
 // NewRouter creates a router instance that serves the VNFInstance web methods
-func NewRouter(kubeconfig string) *mux.Router {
+func NewRouter(kubeconfig string, defClient rb.DefinitionManager,
+       profileClient rb.ProfileManager) *mux.Router {
        router := mux.NewRouter()
 
        vnfInstanceHandler := router.PathPrefix("/v1/vnf_instances").Subrouter()
@@ -30,22 +31,28 @@ func NewRouter(kubeconfig string) *mux.Router {
        vnfInstanceHandler.HandleFunc("/{cloudRegionID}/{namespace}/{externalVNFID}", GetHandler).Methods("GET")
 
        //rbd is resource bundle definition
+       if defClient == nil {
+               defClient = rb.NewDefinitionClient()
+       }
+       defHandler := rbDefinitionHandler{client: defClient}
        resRouter := router.PathPrefix("/v1/rb").Subrouter()
-       rbdef := rbDefinitionHandler{client: rb.NewDefinitionClient()}
-       resRouter.HandleFunc("/definition", rbdef.createHandler).Methods("POST")
-       resRouter.HandleFunc("/definition/{rbdID}/content", rbdef.uploadHandler).Methods("POST")
-       resRouter.HandleFunc("/definition", rbdef.listHandler).Methods("GET")
-       resRouter.HandleFunc("/definition/{rbdID}", rbdef.getHandler).Methods("GET")
-       resRouter.HandleFunc("/definition/{rbdID}", rbdef.deleteHandler).Methods("DELETE")
+       resRouter.HandleFunc("/definition", defHandler.createHandler).Methods("POST")
+       resRouter.HandleFunc("/definition/{rbdID}/content", defHandler.uploadHandler).Methods("POST")
+       resRouter.HandleFunc("/definition", defHandler.listHandler).Methods("GET")
+       resRouter.HandleFunc("/definition/{rbdID}", defHandler.getHandler).Methods("GET")
+       resRouter.HandleFunc("/definition/{rbdID}", defHandler.deleteHandler).Methods("DELETE")
 
        //rbp is resource bundle profile
-       rbprofile := rbProfileHandler{client: rb.NewProfileClient()}
-       resRouter.HandleFunc("/profile", rbprofile.createHandler).Methods("POST")
-       resRouter.HandleFunc("/profile/{rbpID}/content", rbprofile.uploadHandler).Methods("POST")
-       resRouter.HandleFunc("/profile/help", rbprofile.helpHandler).Methods("GET")
-       resRouter.HandleFunc("/profile", rbprofile.listHandler).Methods("GET")
-       resRouter.HandleFunc("/profile/{rbpID}", rbprofile.getHandler).Methods("GET")
-       resRouter.HandleFunc("/profile/{rbpID}", rbprofile.deleteHandler).Methods("DELETE")
+       if profileClient == nil {
+               profileClient = rb.NewProfileClient()
+       }
+       profileHandler := rbProfileHandler{client: profileClient}
+       resRouter.HandleFunc("/profile", profileHandler.createHandler).Methods("POST")
+       resRouter.HandleFunc("/profile/{rbpID}/content", profileHandler.uploadHandler).Methods("POST")
+       resRouter.HandleFunc("/profile/help", profileHandler.helpHandler).Methods("GET")
+       resRouter.HandleFunc("/profile", profileHandler.listHandler).Methods("GET")
+       resRouter.HandleFunc("/profile/{rbpID}", profileHandler.getHandler).Methods("GET")
+       resRouter.HandleFunc("/profile/{rbpID}", profileHandler.deleteHandler).Methods("DELETE")
 
        // (TODO): Fix update method
        // vnfInstanceHandler.HandleFunc("/{vnfInstanceId}", UpdateHandler).Methods("PUT")
index 2bac311..40d198b 100644 (file)
@@ -48,7 +48,7 @@ func (c *mockCSAR) DestroyVNF(data map[string][]string, namespace string,
 }
 
 func executeRequest(req *http.Request) *httptest.ResponseRecorder {
-       router := NewRouter("")
+       router := NewRouter("", nil, nil)
        recorder := httptest.NewRecorder()
        router.ServeHTTP(recorder, req)
 
index c07446a..e0e715b 100644 (file)
@@ -43,7 +43,7 @@ func main() {
                log.Fatal(err)
        }
 
-       httpRouter := api.NewRouter(kubeconfig)
+       httpRouter := api.NewRouter(kubeconfig, nil, nil)
        loggedRouter := handlers.LoggingHandler(os.Stdout, httpRouter)
        log.Println("Starting Kubernetes Multicloud API")