Testing the controller

Unit Tests

As is the convention in go, unit tests for the .go file you want to test live in the same folder and end with _test.go. We use the ginkgo/gomega testing framework for writing the tests.

To execute the tests, use

go test -v -tags unittest ./...

E2E Tests

E2E tests are going to test the specific scenarios with a real AKS and App Gateway setup with AGIC installed on it.

E2E tests are automatically run every day 3 AM in the morning using an E2E pipeline.

If you have cluster with AGIC installed, you can run e2e tests simply by:

go test -v -tags e2e ./...

You can also execute the run-e2e.sh which is used in the E2E pipeline to invoke the tests. This script will install AGIC with the version provided.

export version="<agic-version>"
export applicationGatewayId="<resource-id>"
export identityResourceId="<agic-identity-resource-id>"
export identityClientId="<agic-identity-client-id>"

./scripts/e2e/run-e2e.sh

Testing Tips

  • If you just want to run a specific set of tests, then an easy way is add F (Focus) to the It, Context, Describe directive in the test. For example:

    FContext("Test obtaining a single certificate for an existing host", func() {
        cb := newConfigBuilderFixture(nil)
        ingress := tests.NewIngressFixture()
        hostnameSecretIDMap := cb.newHostToSecretMap(ingress)
        actualSecret, actualSecretID := cb.getCertificate(ingress, host1, hostnameSecretIDMap)
    
        It("should have generated the expected secret", func() {
            Expect(*actualSecret).To(Equal("eHl6"))
        })
    
        It("should have generated the correct secretID struct", func() {
            Expect(*actualSecretID).To(Equal(expectedSecret))
        })
    })