diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..eb77853 --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,51 @@ +name: tests +run-name: tests, branch:${{ github.ref_name }}, triggered by @${{ github.actor }} + +concurrency: + # Run only for most recent commit in PRs but for all tags and commits on main + # Ref: https://docs.github.com/en/actions/using-jobs/using-concurrency + group: ${{ github.workflow }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + +on: + pull_request: + branches: + - '*' + push: + branches: + - 'main' + workflow_dispatch: {} + +jobs: + unit-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: run unit tests + run: make test.unit + + integration-tests: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - konnect-api-url: https://us.api.konghq.tech + - konnect-api-url: https://eu.api.konghq.tech + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-go@v5 + with: + go-version-file: go.mod + + - name: run integration tests + run: make test.integration + env: + KONNECT_API_URL: ${{ matrix.konnect-api-url }} + KONNECT_API_PAT: ${{ secrets.KONNECT_API_PAT }} diff --git a/Makefile b/Makefile index 04e026a..ed53034 100644 --- a/Makefile +++ b/Makefile @@ -107,3 +107,13 @@ generate.sdk: speakeasy generate sdk --lang go --out . --schema ./$(OPENAPI_FILE) $(MAKE) _generate.omitempty go mod tidy + +.PHONY: test +test: test.unit test.integration + +.PHONY: test.unit +test.unit: + +.PHONY: test.integration +test.integration: + go test -v -race ./test/integration/... diff --git a/go.mod b/go.mod index aa715cd..8442e3b 100644 --- a/go.mod +++ b/go.mod @@ -5,4 +5,11 @@ go 1.20 require ( github.com/cenkalti/backoff/v4 v4.2.0 github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 + github.com/stretchr/testify v1.10.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index f955779..7f63c8a 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,14 @@ github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05 h1:S92OBrGuLLZsyM5ybUzgc/mPjIYk2AZqufieooe98uw= github.com/ericlagergren/decimal v0.0.0-20221120152707-495c53812d05/go.mod h1:M9R1FoZ3y//hwwnJtO51ypFGwm8ZfpxPT/ZLtO1mcgQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/test/integration/envs.go b/test/integration/envs.go new file mode 100644 index 0000000..7f4eff7 --- /dev/null +++ b/test/integration/envs.go @@ -0,0 +1,29 @@ +package integration + +import ( + "os" + "testing" + + "github.com/stretchr/testify/require" +) + +const ( + // KonnectPersonalAccessTokenEnv is the environment variable name for the Konnect PAT. + KonnectPersonalAccessTokenEnv = "KONNECT_API_PAT" + // KonnectURLEnv is the environment variable name for the Konnect URL. + KonnectURLEnv = "KONNECT_API_URL" +) + +// KonnectPersonalAccessToken returns the Konnect PAT from the environment. +func KonnectPersonalAccessToken(t *testing.T) string { + token := os.Getenv(KonnectPersonalAccessTokenEnv) + require.NotEmptyf(t, token, "%s is not set", KonnectPersonalAccessTokenEnv) + return token +} + +// KonnectURL returns the Konnect url from the environment. +func KonnectURL(t *testing.T) string { + url := os.Getenv(KonnectURLEnv) + require.NotEmptyf(t, url, "%s is not set", KonnectURLEnv) + return url +} diff --git a/test/integration/me_test.go b/test/integration/me_test.go new file mode 100644 index 0000000..2c10d5b --- /dev/null +++ b/test/integration/me_test.go @@ -0,0 +1,37 @@ +package integration + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + sdkkonnectgo "github.com/Kong/sdk-konnect-go" + sdkkonnectcomp "github.com/Kong/sdk-konnect-go/models/components" + sdkkonnectops "github.com/Kong/sdk-konnect-go/models/operations" +) + +func TestMe(t *testing.T) { + pat := KonnectPersonalAccessToken(t) + url := KonnectURL(t) + sdk := sdkkonnectgo.New( + sdkkonnectgo.WithSecurity( + sdkkonnectcomp.Security{ + PersonalAccessToken: sdkkonnectgo.String(pat), + }, + ), + sdkkonnectgo.WithServerURL(url), + ) + require.NotNil(t, sdk) + + ctx := context.Background() + // NOTE: This is needed because currently the SDK only lists the prod global API as supported: + // https://github.com/Kong/sdk-konnect-go/blob/999d9a987e1aa7d2e09ac11b1450f4563adf21ea/models/operations/getorganizationsme.go#L10-L12 + respOrg, err := sdk.Me.GetOrganizationsMe(ctx, sdkkonnectops.WithServerURL(url)) + require.NoError(t, err) + require.NotNil(t, respOrg) + require.NotEmpty(t, respOrg.MeOrganization.ID) + require.NotEmpty(t, respOrg.MeOrganization.Name) + require.NotNil(t, respOrg.MeOrganization.State) + require.EqualValues(t, "active", *respOrg.MeOrganization.State) +}