Skip to content

Commit

Permalink
Merge pull request #261 from fabi200123/integration-tests
Browse files Browse the repository at this point in the history
Refactor Integration tests
  • Loading branch information
gabriel-samfira authored Jun 17, 2024
2 parents 4c7c9b0 + 9d4c0a9 commit a66cbcc
Show file tree
Hide file tree
Showing 25 changed files with 1,672 additions and 1,737 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/go-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
go-version: 'stable'
- uses: actions/checkout@v3
- name: make lint
run: make golangci-lint && GOLANGCI_LINT_EXTRA_ARGS="--timeout=8m --build-tags testing" make lint
run: make golangci-lint && GOLANGCI_LINT_EXTRA_ARGS="--timeout=8m --build-tags=testing,integration" make lint
- name: Verify go vendor, go modules and gofmt
run: |
sudo apt-get install -y jq
Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ release: build-static create-release-files ## Create a release
##@ Lint / Verify
.PHONY: lint
lint: golangci-lint $(GOLANGCI_LINT) ## Run linting.
$(GOLANGCI_LINT) run -v --build-tags testing $(GOLANGCI_LINT_EXTRA_ARGS)
$(GOLANGCI_LINT) run -v --build-tags=testing,integration $(GOLANGCI_LINT_EXTRA_ARGS)

.PHONY: lint-fix
lint-fix: golangci-lint $(GOLANGCI_LINT) ## Lint the codebase and run auto-fixers if supported by the linte
Expand All @@ -84,7 +84,7 @@ integration: build ## Run integration tests
}
trap cleanup EXIT
@./test/integration/scripts/setup-garm.sh
@$(GO) run ./test/integration/main.go
@$(GO) test -v ./test/integration/. -timeout=30m -tags=integration

##@ Development

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package e2e
package integration

import (
"github.com/go-openapi/runtime"
Expand Down Expand Up @@ -67,16 +67,6 @@ func deleteGithubCredentials(apiCli *client.GarmAPI, apiAuthToken runtime.Client
apiAuthToken)
}

func getGithubCredential(apiCli *client.GarmAPI, apiAuthToken runtime.ClientAuthInfoWriter, credentialsID int64) (*params.GithubCredentials, error) {
getCredentialsResponse, err := apiCli.Credentials.GetCredentials(
clientCredentials.NewGetCredentialsParams().WithID(credentialsID),
apiAuthToken)
if err != nil {
return nil, err
}
return &getCredentialsResponse.Payload, nil
}

func updateGithubCredentials(apiCli *client.GarmAPI, apiAuthToken runtime.ClientAuthInfoWriter, credentialsID int64, credentialsParams params.UpdateGithubCredentialsParams) (*params.GithubCredentials, error) {
updateCredentialsResponse, err := apiCli.Credentials.UpdateCredentials(
clientCredentials.NewUpdateCredentialsParams().WithID(credentialsID).WithBody(credentialsParams),
Expand Down Expand Up @@ -501,16 +491,6 @@ func updatePool(apiCli *client.GarmAPI, apiAuthToken runtime.ClientAuthInfoWrite
return &updatePoolResponse.Payload, nil
}

func listPoolInstances(apiCli *client.GarmAPI, apiAuthToken runtime.ClientAuthInfoWriter, poolID string) (params.Instances, error) {
listPoolInstancesResponse, err := apiCli.Instances.ListPoolInstances(
clientInstances.NewListPoolInstancesParams().WithPoolID(poolID),
apiAuthToken)
if err != nil {
return nil, err
}
return listPoolInstancesResponse.Payload, nil
}

func deletePool(apiCli *client.GarmAPI, apiAuthToken runtime.ClientAuthInfoWriter, poolID string) error {
return apiCli.Pools.DeletePool(
clientPools.NewDeletePoolParams().WithPoolID(poolID),
Expand Down
233 changes: 233 additions & 0 deletions test/integration/credentials_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
//go:build integration
// +build integration

package integration

import (
"github.com/cloudbase/garm/params"
)

const (
defaultEndpointName string = "github.com"
dummyCredentialsName string = "dummy"
)

func (suite *GarmSuite) TestGithubCredentialsErrorOnDuplicateCredentialsName() {
t := suite.T()
t.Log("Testing error on duplicate credentials name")
creds, err := suite.createDummyCredentials(dummyCredentialsName, defaultEndpointName)
suite.NoError(err)
t.Cleanup(func() {
suite.DeleteGithubCredential(int64(creds.ID))
})

createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: defaultEndpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthTypePAT,
PAT: params.GithubPAT{
OAuth2Token: "dummy",
},
}
_, err = createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with duplicate name")
}

func (suite *GarmSuite) TestGithubCredentialsFailsToDeleteWhenInUse() {
t := suite.T()
t.Log("Testing error when deleting credentials in use")
creds, err := suite.createDummyCredentials(dummyCredentialsName, defaultEndpointName)
suite.NoError(err)

orgName := "dummy-owner"
repoName := "dummy-repo"
createParams := params.CreateRepoParams{
Owner: orgName,
Name: repoName,
CredentialsName: creds.Name,
WebhookSecret: "superSecret@123BlaBla",
}

t.Logf("Create repository with owner_name: %s, repo_name: %s", orgName, repoName)
repo, err := createRepo(suite.cli, suite.authToken, createParams)
suite.NoError(err)
t.Cleanup(func() {
deleteRepo(suite.cli, suite.authToken, repo.ID)
deleteGithubCredentials(suite.cli, suite.authToken, int64(creds.ID))
})

err = deleteGithubCredentials(suite.cli, suite.authToken, int64(creds.ID))
suite.Error(err, "expected error when deleting credentials in use")
}

func (suite *GarmSuite) TestGithubCredentialsFailsOnInvalidAuthType() {
t := suite.T()
t.Log("Testing error on invalid auth type")
createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: defaultEndpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthType("invalid"),
PAT: params.GithubPAT{
OAuth2Token: "dummy",
},
}
_, err := createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with invalid auth type")
expectAPIStatusCode(err, 400)
}

func (suite *GarmSuite) TestGithubCredentialsFailsWhenAuthTypeParamsAreIncorrect() {
t := suite.T()
t.Log("Testing error when auth type params are incorrect")
privateKeyBytes, err := getTestFileContents("certs/srv-key.pem")
suite.NoError(err)
createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: defaultEndpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthTypePAT,
App: params.GithubApp{
AppID: 123,
InstallationID: 456,
PrivateKeyBytes: privateKeyBytes,
},
}
_, err = createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with invalid auth type params")

expectAPIStatusCode(err, 400)
}

func (suite *GarmSuite) TestGithubCredentialsFailsWhenAuthTypeParamsAreMissing() {
t := suite.T()
t.Log("Testing error when auth type params are missing")
createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: defaultEndpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthTypeApp,
}
_, err := createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with missing auth type params")
expectAPIStatusCode(err, 400)
}

func (suite *GarmSuite) TestGithubCredentialsUpdateFailsWhenBothPATAndAppAreSupplied() {
t := suite.T()
t.Log("Testing error when both PAT and App are supplied")
creds, err := suite.createDummyCredentials(dummyCredentialsName, defaultEndpointName)
suite.NoError(err)
t.Cleanup(func() {
suite.DeleteGithubCredential(int64(creds.ID))
})

privateKeyBytes, err := getTestFileContents("certs/srv-key.pem")
suite.NoError(err)
updateCredsParams := params.UpdateGithubCredentialsParams{
PAT: &params.GithubPAT{
OAuth2Token: "dummy",
},
App: &params.GithubApp{
AppID: 123,
InstallationID: 456,
PrivateKeyBytes: privateKeyBytes,
},
}
_, err = updateGithubCredentials(suite.cli, suite.authToken, int64(creds.ID), updateCredsParams)
suite.Error(err, "expected error when updating credentials with both PAT and App")
expectAPIStatusCode(err, 400)
}

func (suite *GarmSuite) TestGithubCredentialsFailWhenAppKeyIsInvalid() {
t := suite.T()
t.Log("Testing error when app key is invalid")
createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: defaultEndpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthTypeApp,
App: params.GithubApp{
AppID: 123,
InstallationID: 456,
PrivateKeyBytes: []byte("invalid"),
},
}
_, err := createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with invalid app key")
expectAPIStatusCode(err, 400)
}

func (suite *GarmSuite) TestGithubCredentialsFailWhenEndpointDoesntExist() {
t := suite.T()
t.Log("Testing error when endpoint doesn't exist")
createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: "iDontExist.example.com",
Description: "GARM test credentials",
AuthType: params.GithubAuthTypePAT,
PAT: params.GithubPAT{
OAuth2Token: "dummy",
},
}
_, err := createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with invalid endpoint")
expectAPIStatusCode(err, 404)
}

func (suite *GarmSuite) TestGithubCredentialsFailsOnDuplicateName() {
t := suite.T()
t.Log("Testing error on duplicate credentials name")
creds, err := suite.createDummyCredentials(dummyCredentialsName, defaultEndpointName)
suite.NoError(err)
t.Cleanup(func() {
suite.DeleteGithubCredential(int64(creds.ID))
})

createCredsParams := params.CreateGithubCredentialsParams{
Name: dummyCredentialsName,
Endpoint: defaultEndpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthTypePAT,
PAT: params.GithubPAT{
OAuth2Token: "dummy",
},
}
_, err = createGithubCredentials(suite.cli, suite.authToken, createCredsParams)
suite.Error(err, "expected error when creating credentials with duplicate name")
expectAPIStatusCode(err, 409)
}

func (suite *GarmSuite) createDummyCredentials(name, endpointName string) (*params.GithubCredentials, error) {
createCredsParams := params.CreateGithubCredentialsParams{
Name: name,
Endpoint: endpointName,
Description: "GARM test credentials",
AuthType: params.GithubAuthTypePAT,
PAT: params.GithubPAT{
OAuth2Token: "dummy",
},
}
return suite.CreateGithubCredentials(createCredsParams)
}

func (suite *GarmSuite) CreateGithubCredentials(credentialsParams params.CreateGithubCredentialsParams) (*params.GithubCredentials, error) {
t := suite.T()
t.Log("Create GitHub credentials")
credentials, err := createGithubCredentials(suite.cli, suite.authToken, credentialsParams)
if err != nil {
return nil, err
}

return credentials, nil
}

func (suite *GarmSuite) DeleteGithubCredential(id int64) error {
t := suite.T()
t.Log("Delete GitHub credential")
if err := deleteGithubCredentials(suite.cli, suite.authToken, id); err != nil {
return err
}
return nil
}
61 changes: 0 additions & 61 deletions test/integration/e2e/client.go

This file was deleted.

Loading

0 comments on commit a66cbcc

Please sign in to comment.