Skip to content

Commit

Permalink
ci: add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pmalek committed Nov 25, 2024
1 parent 4f50eb7 commit 9287ae5
Show file tree
Hide file tree
Showing 9 changed files with 273 additions and 0 deletions.
53 changes: 53 additions & 0 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
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'
schedule:
- cron: '30 2 * * *'
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 }}
12 changes: 12 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,15 @@ 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:
KONNECT_TEST_RUN_ID=$(shell cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w 10 | head -1) \
go test -v -race $(GOTESTFLAGS) \
./test/integration/...
7 changes: 7 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -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=
82 changes: 82 additions & 0 deletions test/integration/controlplane_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package integration

import (
"context"
"testing"

"github.com/stretchr/testify/require"

sdkkonnectcomp "github.com/Kong/sdk-konnect-go/models/components"
sdkkonnectops "github.com/Kong/sdk-konnect-go/models/operations"
)

func TestControlPlaneCreateDelete(t *testing.T) {
t.Parallel()

sdk := SDK(t)
runID := KonnectTestRunID(t)

ctx := context.Background()
req := sdkkonnectcomp.CreateControlPlaneRequest{
Name: NamePrefix(t) + "-" + runID,
Labels: Labels(t),
}
resp, err := sdk.ControlPlanes.CreateControlPlane(ctx, req)
require.NoError(t, err)
t.Cleanup(func() {
_, err := sdk.ControlPlanes.DeleteControlPlane(ctx, resp.ControlPlane.ID)
require.NoError(t, err)
})

require.NotNil(t, resp)
require.NotEmpty(t, resp.ControlPlane.ID)
require.NotEmpty(t, resp.ControlPlane.Name)
require.NotNil(t, resp.ControlPlane.Labels)
require.EqualValues(t, Labels(t), resp.ControlPlane.Labels)
}

func TestControlPlaneList(t *testing.T) {
t.Parallel()

sdk := SDK(t)

ctx := context.Background()
reqList := sdkkonnectops.ListControlPlanesRequest{
// TODO listing doesn't work with criteria yet.
}
respList, err := sdk.ControlPlanes.ListControlPlanes(ctx, reqList)
require.NoError(t, err)
require.NotNil(t, respList.ListControlPlanesResponse)

// TODO listing doesn't work with criteria yet.

// require.Empty(t, respList.ListControlPlanesResponse.Data)

// req := sdkkonnectcomp.CreateControlPlaneRequest{
// Name: cpName,
// Labels: Labels(t),
// }
// resp, err := sdk.ControlPlanes.CreateControlPlane(ctx, req)
// require.NoError(t, err)
// t.Cleanup(func() {
// _, err := sdk.ControlPlanes.DeleteControlPlane(ctx, resp.ControlPlane.ID)
// require.NoError(t, err)
// })

// require.NotNil(t, resp)

// reqList = sdkkonnectops.ListControlPlanesRequest{
// Filter: &sdkkonnectcomp.ControlPlaneFilterParameters{
// ID: &sdkkonnectcomp.ID{
// StringFieldOEQFilter: &sdkkonnectcomp.StringFieldOEQFilter{
// Oeq: resp.ControlPlane.GetID(),
// },
// },
// },
// }
// respList, err = sdk.ControlPlanes.ListControlPlanes(ctx, reqList)
// require.NoError(t, err)
// require.NotEmpty(t, respList.ListControlPlanesResponse.Data)
// require.Len(t, respList.ListControlPlanesResponse.Data, 1)
// require.Equal(t, respList.ListControlPlanesResponse.Data[0].ID, resp.ControlPlane.ID)
}
38 changes: 38 additions & 0 deletions test/integration/envs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
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"
// KonnectTestRunIDEnv is the environment variable name for the Konnect test run ID.
KonnectTestRunIDEnv = "KONNECT_TEST_RUN_ID"
)

// 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
}

// KonnectTestRunID returns the Konnect test run ID from the environment.
func KonnectTestRunID(t *testing.T) string {
id := os.Getenv(KonnectTestRunIDEnv)
require.NotEmptyf(t, id, "%s is not set", KonnectTestRunIDEnv)
return id
}
16 changes: 16 additions & 0 deletions test/integration/funcs.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package integration

import "testing"

// NamePrefix returns a prefix for the test name.
func NamePrefix(t *testing.T) string {
return "sdk-konnect-go-test-integration-" + t.Name()
}

func Labels(t *testing.T) map[string]string {
return map[string]string{
"sdk-konnect-go": "true",
"test_name": NamePrefix(t),
"test_run_id": KonnectTestRunID(t),
}
}
28 changes: 28 additions & 0 deletions test/integration/me_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package integration

import (
"context"
"testing"

"github.com/stretchr/testify/require"

sdkkonnectops "github.com/Kong/sdk-konnect-go/models/operations"
)

func TestMe(t *testing.T) {
t.Parallel()

sdk := SDK(t)
url := KonnectURL(t)

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)
}
27 changes: 27 additions & 0 deletions test/integration/sdk.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package integration

import (
"testing"

"github.com/stretchr/testify/require"

sdkkonnectgo "github.com/Kong/sdk-konnect-go"
sdkkonnectcomp "github.com/Kong/sdk-konnect-go/models/components"
)

// SDK returns a new SDK instance. It requires the KONNECT_API_PAT and KONNECT_API_URL
// environment variables to be set.
func SDK(t *testing.T) *sdkkonnectgo.SDK {
pat := KonnectPersonalAccessToken(t)
url := KonnectURL(t)
sdk := sdkkonnectgo.New(
sdkkonnectgo.WithSecurity(
sdkkonnectcomp.Security{
PersonalAccessToken: sdkkonnectgo.String(pat),
},
),
sdkkonnectgo.WithServerURL(url),
)
require.NotNil(t, sdk)
return sdk
}

0 comments on commit 9287ae5

Please sign in to comment.