diff --git a/.travis.yml b/.travis.yml index 9d9a12b70..69baae606 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,4 @@ install: - sudo pip install -r expandybird/requirements.txt script: - - make test + - make setup-gotools test diff --git a/Makefile b/Makefile index ccc9d537b..507ad93a2 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +include include.mk + SUBDIRS := expandybird/. resourcifier/. manager/. TARGETS := all build test push container clean diff --git a/expandybird/Makefile b/expandybird/Makefile index 77cbec02b..8490e7bf3 100644 --- a/expandybird/Makefile +++ b/expandybird/Makefile @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +include ../include.mk + .PHONY : all build test push container clean DOCKER_REGISTRY := gcr.io @@ -21,12 +23,6 @@ TAG := latest DIR := . -info: - @echo "Build tag: ${TAG}" - @echo "Registry: ${DOCKER_REGISTRY}" - @echo "Project: ${PROJECT}" - @echo "Image: ${IMAGE}" - push: container ifeq ($(DOCKER_REGISTRY),gcr.io) gcloud docker push $(PREFIX)/$(IMAGE):$(TAG) @@ -47,3 +43,5 @@ clean: -docker rmi $(PREFIX)/$(IMAGE):$(TAG) rm -f expandybird +.PHONY: test +test: lint vet test-unit diff --git a/include.mk b/include.mk new file mode 100644 index 000000000..fba7d5f4e --- /dev/null +++ b/include.mk @@ -0,0 +1,30 @@ +.PHONY: info +info: + @echo "Build tag: ${TAG}" + @echo "Registry: ${DOCKER_REGISTRY}" + @echo "Project: ${PROJECT}" + @echo "Image: ${IMAGE}" + +.PHONY: test-unit +test-unit: + @echo Running tests... + go test -v ./... + +.PHONY: lint +lint: + @echo Running golint... + golint ./... + @echo ----------------- + +.PHONY: vet +vet: + @echo Running go vet... + go vet ./... + @echo ----------------- + +.PHONY: setup-gotools +setup-gotools: + @echo Installing golint + go get -u github.com/golang/lint/golint + @echo Installing vet + go get -u -v golang.org/x/tools/cmd/vet diff --git a/manager/Makefile b/manager/Makefile index be9da45c3..2e3a2ad55 100644 --- a/manager/Makefile +++ b/manager/Makefile @@ -12,7 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -.PHONY : all build test push container clean .project +include ../include.mk + +.PHONY : all build push container clean .project DOCKER_REGISTRY := gcr.io PREFIX := $(DOCKER_REGISTRY)/$(PROJECT) @@ -22,12 +24,6 @@ TAG := latest ROOT_DIR := $(abspath ./..) DIR = $(ROOT_DIR) -info: - @echo "Build tag: ${TAG}" - @echo "Registry: ${DOCKER_REGISTRY}" - @echo "Project: ${PROJECT}" - @echo "Image: ${IMAGE}" - push: container ifeq ($(DOCKER_REGISTRY),gcr.io) gcloud docker push $(PREFIX)/$(IMAGE):$(TAG) @@ -41,3 +37,5 @@ container: clean: -docker rmi $(PREFIX)/$(IMAGE):$(TAG) +.PHONY: test +test: lint vet test-unit diff --git a/manager/manager/manager_test.go b/manager/manager/manager_test.go index 2c4d0ca15..305f38114 100644 --- a/manager/manager/manager_test.go +++ b/manager/manager/manager_test.go @@ -325,7 +325,7 @@ func TestCreateDeployment(t *testing.T) { d, err := testManager.CreateDeployment(&template) if !reflect.DeepEqual(d, &deployment) || err != nil { t.Fatalf("Expected a different set of response values from invoking CreateDeployment."+ - "Received: %s, %s. Expected: %s, %s.", d, err, &deployment, "nil") + "Received: %v, %s. Expected: %#v, %s.", d, err, &deployment, "nil") } if testRepository.Created[0] != template.Name { @@ -383,7 +383,7 @@ func TestCreateDeploymentCreationFailure(t *testing.T) { if err != errTest || d != nil { t.Fatalf("Expected a different set of response values from invoking CreateDeployment."+ - "Received: %s, %s. Expected: %s, %s.", d, err, "nil", errTest) + "Received: %v, %s. Expected: %s, %s.", d, err, "nil", errTest) } if testRepository.TypeInstancesCleared { @@ -437,7 +437,7 @@ func TestDeleteDeploymentForget(t *testing.T) { d, err := testManager.CreateDeployment(&template) if !reflect.DeepEqual(d, &deployment) || err != nil { t.Fatalf("Expected a different set of response values from invoking CreateDeployment."+ - "Received: %s, %s. Expected: %s, %s.", d, err, &deployment, "nil") + "Received: %v, %s. Expected: %#v, %s.", d, err, &deployment, "nil") } if testRepository.Created[0] != template.Name { diff --git a/manager/manager/typeresolver_test.go b/manager/manager/typeresolver_test.go index 57da1035b..a3bdd6c75 100644 --- a/manager/manager/typeresolver_test.go +++ b/manager/manager/typeresolver_test.go @@ -298,20 +298,20 @@ func TestShortGithubUrl(t *testing.T) { } downloadResponses := map[string]registry.DownloadResponse{ - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py": registry.DownloadResponse{nil, http.StatusOK, "my-content"}, - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py.schema": registry.DownloadResponse{nil, http.StatusNotFound, ""}, - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py": registry.DownloadResponse{nil, http.StatusOK, "my-content-2"}, - "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py.schema": registry.DownloadResponse{nil, http.StatusNotFound, ""}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py": registry.DownloadResponse{Err: nil, Code: http.StatusOK, Body: "my-content"}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py.schema": registry.DownloadResponse{Err: nil, Code: http.StatusNotFound, Body: ""}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py": registry.DownloadResponse{Err: nil, Code: http.StatusOK, Body: "my-content-2"}, + "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py.schema": registry.DownloadResponse{Err: nil, Code: http.StatusNotFound, Body: ""}, } githubUrlMaps := map[registry.Type]registry.TestURLAndError{ - registry.NewTypeOrDie("common", "replicatedservice", "v1"): registry.TestURLAndError{"https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py", nil}, - registry.NewTypeOrDie("common", "replicatedservice", "v2"): registry.TestURLAndError{"https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py", nil}, + registry.NewTypeOrDie("common", "replicatedservice", "v1"): registry.TestURLAndError{URL: "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py", Err: nil}, + registry.NewTypeOrDie("common", "replicatedservice", "v2"): registry.TestURLAndError{URL: "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py", Err: nil}, } gcsUrlMaps := map[registry.Type]registry.TestURLAndError{ - registry.NewTypeOrDie("common", "replicatedservice", "v1"): registry.TestURLAndError{"https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py", nil}, - registry.NewTypeOrDie("common", "replicatedservice", "v2"): registry.TestURLAndError{"https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py", nil}, + registry.NewTypeOrDie("common", "replicatedservice", "v1"): registry.TestURLAndError{URL: "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v1/replicatedservice.py", Err: nil}, + registry.NewTypeOrDie("common", "replicatedservice", "v2"): registry.TestURLAndError{URL: "https://raw.githubusercontent.com/kubernetes/application-dm-templates/master/common/replicatedservice/v2/replicatedservice.py", Err: nil}, } grp := registry.NewTestGithubRegistryProviderWithDownloads("github.com/kubernetes/application-dm-templates", githubUrlMaps, downloadResponses) diff --git a/registry/filebased_credential_provider_test.go b/registry/filebased_credential_provider_test.go index c1f5980e8..bec6ea542 100644 --- a/registry/filebased_credential_provider_test.go +++ b/registry/filebased_credential_provider_test.go @@ -55,6 +55,6 @@ func TestSetAndGetBasicAuthFilebased(t *testing.T) { } tc := &testCase{"test2", &common.RegistryCredential{ - BasicAuth: common.BasicAuthCredential{"user", "password"}}, nil} + BasicAuth: common.BasicAuthCredential{Username: "user", Password: "password"}}, nil} testGetCredential(t, cp, tc) } diff --git a/registry/inmem_credential_provider.go b/registry/inmem_credential_provider.go index f9938aba2..e21f12600 100644 --- a/registry/inmem_credential_provider.go +++ b/registry/inmem_credential_provider.go @@ -38,6 +38,6 @@ func (fcp *InmemCredentialProvider) GetCredential(name string) (*common.Registry } func (fcp *InmemCredentialProvider) SetCredential(name string, credential *common.RegistryCredential) error { - fcp.credentials[name] = &common.RegistryCredential{credential.APIToken, credential.BasicAuth, credential.ServiceAccount} + fcp.credentials[name] = &common.RegistryCredential{APIToken: credential.APIToken, BasicAuth: credential.BasicAuth, ServiceAccount: credential.ServiceAccount} return nil } diff --git a/registry/inmem_credential_provider_test.go b/registry/inmem_credential_provider_test.go index f1279b08b..6b650eb05 100644 --- a/registry/inmem_credential_provider_test.go +++ b/registry/inmem_credential_provider_test.go @@ -68,6 +68,6 @@ func TestSetAndGetBasicAuth(t *testing.T) { cp := NewInmemCredentialProvider() tc := &testCase{"testcredential", &common.RegistryCredential{ - BasicAuth: common.BasicAuthCredential{"user", "pass"}}, nil} + BasicAuth: common.BasicAuthCredential{Username: "user", Password: "pass"}}, nil} verifySetAndGetCredential(t, cp, tc) } diff --git a/registry/registryprovider.go b/registry/registryprovider.go index c4120834f..48d77451e 100644 --- a/registry/registryprovider.go +++ b/registry/registryprovider.go @@ -74,7 +74,7 @@ func NewRegistryProvider(rs common.RegistryService, grp GithubRegistryProvider, return rp } -func (rp registryProvider) getRegistry(cr common.Registry) (Registry, error) { +func (rp *registryProvider) getRegistry(cr common.Registry) (Registry, error) { switch cr.Type { case common.GithubRegistryType: return rp.grp.GetGithubRegistry(cr) @@ -86,7 +86,7 @@ func (rp registryProvider) getRegistry(cr common.Registry) (Registry, error) { } } -func (rp registryProvider) GetRegistryByShortURL(URL string) (Registry, error) { +func (rp *registryProvider) GetRegistryByShortURL(URL string) (Registry, error) { rp.RLock() defer rp.RUnlock() @@ -111,7 +111,7 @@ func (rp registryProvider) GetRegistryByShortURL(URL string) (Registry, error) { // findRegistryByShortURL trims the scheme from both the supplied URL // and the short URL returned by GetRegistryShortURL. -func (rp registryProvider) findRegistryByShortURL(URL string) Registry { +func (rp *registryProvider) findRegistryByShortURL(URL string) Registry { trimmed := util.TrimURLScheme(URL) for _, r := range rp.registries { if strings.HasPrefix(trimmed, util.TrimURLScheme(r.GetRegistryShortURL())) { @@ -122,7 +122,7 @@ func (rp registryProvider) findRegistryByShortURL(URL string) Registry { return nil } -func (rp registryProvider) GetRegistryByName(registryName string) (Registry, error) { +func (rp *registryProvider) GetRegistryByName(registryName string) (Registry, error) { rp.RLock() defer rp.RUnlock() diff --git a/resourcifier/Makefile b/resourcifier/Makefile index 2a04fecab..1b80a7dca 100644 --- a/resourcifier/Makefile +++ b/resourcifier/Makefile @@ -14,7 +14,9 @@ # If you update this image please check the tag value before pushing. -.PHONY : all build test push container clean +include ../include.mk + +.PHONY : all build push container clean DOCKER_REGISTRY := gcr.io PREFIX := $(DOCKER_REGISTRY)/$(PROJECT) @@ -24,12 +26,6 @@ TAG := latest ROOT_DIR := $(abspath ./..) DIR = $(ROOT_DIR) -info: - @echo "Build tag: ${TAG}" - @echo "Registry: ${DOCKER_REGISTRY}" - @echo "Project: ${PROJECT}" - @echo "Image: ${IMAGE}" - push: container ifeq ($(DOCKER_REGISTRY),gcr.io) gcloud docker push $(PREFIX)/$(IMAGE):$(TAG) @@ -42,3 +38,6 @@ container: clean: -docker rmi $(PREFIX)/$(IMAGE):$(TAG) + +.PHONY: test +test: lint vet test-unit diff --git a/resourcifier/configurations.go b/resourcifier/configurations.go index 7465cdc10..904e5d2b2 100644 --- a/resourcifier/configurations.go +++ b/resourcifier/configurations.go @@ -77,7 +77,7 @@ func listConfigurationsHandlerFunc(w http.ResponseWriter, r *http.Request) { } c := &common.Configuration{ - []*common.Resource{ + Resources: []*common.Resource{ {Type: rtype}, }, } @@ -106,7 +106,7 @@ func getConfigurationHandlerFunc(w http.ResponseWriter, r *http.Request) { } c := &common.Configuration{ - []*common.Resource{ + Resources: []*common.Resource{ {Name: rname, Type: rtype}, }, }