package main import ( "bytes" "encoding/json" "net/http" "net/http/httptest" "net/url" "regexp" "testing" "github.com/kubernetes/helm/cmd/manager/router" "github.com/kubernetes/helm/pkg/common" "github.com/kubernetes/helm/pkg/httputil" "github.com/kubernetes/helm/pkg/registry" ) func TestHealthz(t *testing.T) { c := stubContext() s := httpHarness(c, "GET /", healthz) defer s.Close() res, err := http.Get(s.URL) if err != nil { t.Fatalf("Failed to GET healthz: %s", err) } else if res.StatusCode != 200 { t.Fatalf("Unexpected status: %d", res.StatusCode) } // TODO: Get the body and check on the content type and the body. } func TestCreateDeployments(t *testing.T) { c := stubContext() tpl := &common.Template{Name: "foo"} s := httpHarness(c, "POST /deployments", createDeploymentHandlerFunc) defer s.Close() var b bytes.Buffer if err := json.NewEncoder(&b).Encode(tpl); err != nil { t.Fatal(err) } res, err := http.Post(s.URL+"/deployments", "application/json", &b) if err != nil { t.Errorf("Failed POST: %s", err) } else if res.StatusCode != http.StatusCreated { t.Errorf("Expected status %d, got %d", http.StatusCreated, res.StatusCode) } } // httpHarness is a simple test server fixture. // Simple fixture for standing up a test server with a single route. // // You must Close() the returned server. func httpHarness(c *router.Context, route string, fn router.HandlerFunc) *httptest.Server { h := router.NewHandler(c) h.Add(route, fn) return httptest.NewServer(h) } // stubContext creates a stub of a Context object. // // This creates a stub context with the following properties: // - Config is initialized to empty values // - Encoder is initialized to httputil.DefaultEncoder // - CredentialProvider is initialized to registry.InmemCredentialProvider // - Manager is initialized to mockManager. func stubContext() *router.Context { return &router.Context{ Config: &router.Config{}, Manager: &mockManager{}, CredentialProvider: registry.NewInmemCredentialProvider(), Encoder: httputil.DefaultEncoder, } } type mockManager struct{} func (m *mockManager) ListDeployments() ([]common.Deployment, error) { return []common.Deployment{}, nil } func (m *mockManager) GetDeployment(name string) (*common.Deployment, error) { return &common.Deployment{}, nil } func (m *mockManager) CreateDeployment(t *common.Template) (*common.Deployment, error) { return &common.Deployment{}, nil } func (m *mockManager) DeleteDeployment(name string, forget bool) (*common.Deployment, error) { return &common.Deployment{}, nil } func (m *mockManager) PutDeployment(name string, t *common.Template) (*common.Deployment, error) { return &common.Deployment{}, nil } func (m *mockManager) ListManifests(deploymentName string) (map[string]*common.Manifest, error) { return map[string]*common.Manifest{}, nil } func (m *mockManager) GetManifest(deploymentName string, manifest string) (*common.Manifest, error) { return &common.Manifest{}, nil } func (m *mockManager) Expand(t *common.Template) (*common.Manifest, error) { return &common.Manifest{}, nil } func (m *mockManager) ListTypes() ([]string, error) { return []string{}, nil } func (m *mockManager) ListInstances(typeName string) ([]*common.TypeInstance, error) { return []*common.TypeInstance{}, nil } func (m *mockManager) GetRegistryForType(typeName string) (string, error) { return "", nil } func (m *mockManager) GetMetadataForType(typeName string) (string, error) { return "", nil } func (m *mockManager) ListRegistries() ([]*common.Registry, error) { return []*common.Registry{}, nil } func (m *mockManager) CreateRegistry(pr *common.Registry) error { return nil } func (m *mockManager) GetRegistry(name string) (*common.Registry, error) { return &common.Registry{}, nil } func (m *mockManager) DeleteRegistry(name string) error { return nil } func (m *mockManager) ListRegistryTypes(registryName string, regex *regexp.Regexp) ([]registry.Type, error) { return []registry.Type{}, nil } func (m *mockManager) GetDownloadURLs(registryName string, t registry.Type) ([]*url.URL, error) { return []*url.URL{}, nil } func (m *mockManager) GetFile(registryName string, url string) (string, error) { return "", nil } func (m *mockManager) CreateCredential(name string, c *common.RegistryCredential) error { return nil } func (m *mockManager) GetCredential(name string) (*common.RegistryCredential, error) { return &common.RegistryCredential{}, nil }