Huawei Cloud Provider implementation (#241)
* add huawei CCI provider * add readme * add vender * add huawei provider mock test
This commit is contained in:
151
providers/huawei/cciMock.go
Normal file
151
providers/huawei/cciMock.go
Normal file
@@ -0,0 +1,151 @@
|
||||
package huawei
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"k8s.io/api/core/v1"
|
||||
)
|
||||
|
||||
// CCIMock implements a CCI service mock server.
|
||||
type CCIMock struct {
|
||||
server *httptest.Server
|
||||
OnCreateProject func(*v1.Namespace) (int, interface{})
|
||||
OnCreatePod func(*v1.Pod) (int, interface{})
|
||||
OnGetPods func() (int, interface{})
|
||||
OnGetPod func(string, string) (int, interface{})
|
||||
}
|
||||
|
||||
// fakeSigner signature HWS meta
|
||||
type fakeSigner struct {
|
||||
AppKey string
|
||||
AppSecret string
|
||||
Region string
|
||||
Service string
|
||||
}
|
||||
|
||||
// Sign set Authorization header
|
||||
func (s *fakeSigner) Sign(r *http.Request) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
const (
|
||||
cciProjectRoute = "/api/v1/namespaces"
|
||||
cciPodsRoute = cciProjectRoute + "/{namespaceID}/pods"
|
||||
cciPodRoute = cciPodsRoute + "/{podID}"
|
||||
)
|
||||
|
||||
// NewCCIMock creates a CCI service mock server.
|
||||
func NewCCIMock() *CCIMock {
|
||||
mock := new(CCIMock)
|
||||
mock.start()
|
||||
|
||||
return mock
|
||||
}
|
||||
|
||||
// Start the CCI service mock service.
|
||||
func (mock *CCIMock) start() {
|
||||
if mock.server != nil {
|
||||
return
|
||||
}
|
||||
|
||||
router := mux.NewRouter()
|
||||
router.HandleFunc(
|
||||
cciProjectRoute,
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
var ns v1.Namespace
|
||||
if err := json.NewDecoder(r.Body).Decode(&ns); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if mock.OnCreatePod != nil {
|
||||
statusCode, response := mock.OnCreateProject(&ns)
|
||||
w.WriteHeader(statusCode)
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(response)
|
||||
w.Write(b.Bytes())
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}).Methods("PUT")
|
||||
|
||||
router.HandleFunc(
|
||||
cciPodsRoute,
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
var pod v1.Pod
|
||||
if err := json.NewDecoder(r.Body).Decode(&pod); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if mock.OnCreatePod != nil {
|
||||
statusCode, response := mock.OnCreatePod(&pod)
|
||||
w.WriteHeader(statusCode)
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(response)
|
||||
w.Write(b.Bytes())
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}).Methods("PUT")
|
||||
|
||||
router.HandleFunc(
|
||||
cciPodRoute,
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
namespace, _ := mux.Vars(r)["namespaceID"]
|
||||
podname, _ := mux.Vars(r)["podID"]
|
||||
|
||||
if mock.OnGetPod != nil {
|
||||
statusCode, response := mock.OnGetPod(namespace, podname)
|
||||
w.WriteHeader(statusCode)
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(response)
|
||||
w.Write(b.Bytes())
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}).Methods("GET")
|
||||
|
||||
router.HandleFunc(
|
||||
cciPodsRoute,
|
||||
func(w http.ResponseWriter, r *http.Request) {
|
||||
if mock.OnGetPods != nil {
|
||||
statusCode, response := mock.OnGetPods()
|
||||
w.WriteHeader(statusCode)
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(response)
|
||||
w.Write(b.Bytes())
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
}).Methods("GET")
|
||||
|
||||
mock.server = httptest.NewServer(router)
|
||||
}
|
||||
|
||||
// GetServerURL returns the mock server URL.
|
||||
func (mock *CCIMock) GetServerURL() string {
|
||||
if mock.server != nil {
|
||||
return mock.server.URL
|
||||
}
|
||||
|
||||
panic("Mock server is not initialized.")
|
||||
}
|
||||
|
||||
// Close terminates the CCI mock server.
|
||||
func (mock *CCIMock) Close() {
|
||||
if mock.server != nil {
|
||||
mock.server.Close()
|
||||
mock.server = nil
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user