Search code examples
goterratest

How to install Azure terratest module


I am getting the following error while installing azure module.

code:

package test

import (
    "testing"
    "github.com/Azure/azure-sdk-for-go/profiles/latest/cosmos-db/mgmt/documentdb"
    "github.com/gruntwork-io/terratest/modules/azure"
    "github.com/stretchr/testify/assert"
)

func TestTerraformAzureCosmosDBExample(t *testing.T) {
    foo
    boo
}

Execution:

C:\foo\boo>go test -v
# foo_test
foo_test.go:6:2: no required module provides package github.com/gruntwork-io/terratest/modules/azure; to add it:
        go get github.com/gruntwork-io/terratest/modules/azure
FAIL    foo_test [setup failed]

Error:

C:\foo\boo>go get github.com/gruntwork-io/terratest/modules/azure
# github.com/gruntwork-io/terratest/modules/azure
C:\foo\go\pkg\mod\github.com\gruntwork-io\terratest@v0.36.5\modules\azure\keyvault.go:139:50: too many arguments in call to "github.com/Azure/azure-sdk-for-go/services/keyvault/auth".NewAuthorizerFromFile
        have (string)
        want ()
C:\foo\go\pkg\mod\github.com\gruntwork-io\terratest@v0.36.5\modules\azure\resourcegroup.go:78:9: cannot use &rg (type *"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2020-10-01/resources".Group) as type *"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2020-06-01/resources".Group in return argument
C:\foo\go\pkg\mod\github.com\gruntwork-io\terratest@v0.36.5\modules\azure\resourcegroup.go:100:18: cannot use rg.Values() (type []"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2020-10-01/resources".Group) as type []"github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2020-06-01/resources".Group in return argument

Can someone help me as to what changes required to get rid of this error?


Solution

  • Starting out from this initial state:

    -- main.go --
    package main
    
    import (
        _ "github.com/Azure/azure-sdk-for-go/profiles/latest/cosmos-db/mgmt/documentdb"
        _ "github.com/gruntwork-io/terratest/modules/azure"
        _ "github.com/stretchr/testify/assert"
    )
    
    func main() {}
    -- go.mod --
    module example.com/m
    
    go 1.17
    

    First, run go mod tidy to fill in a complete (but perhaps incompatible) set of dependencies.

    $ go mod tidy
    go: finding module for package github.com/stretchr/testify/assert
    go: finding module for package github.com/Azure/azure-sdk-for-go/profiles/latest/cosmos-db/mgmt/documentdb
    go: finding module for package github.com/gruntwork-io/terratest/modules/azure
    go: found github.com/Azure/azure-sdk-for-go/profiles/latest/cosmos-db/mgmt/documentdb in github.com/Azure/azure-sdk-for-go v55.6.0+incompatible
    go: found github.com/gruntwork-io/terratest/modules/azure in github.com/gruntwork-io/terratest v0.36.5
    go: found github.com/stretchr/testify/assert in github.com/stretchr/testify v1.7.0
    go: finding module for package github.com/gofrs/uuid
    go: found github.com/gofrs/uuid in github.com/gofrs/uuid v4.0.0+incompatible
    

    Now try go build.

    $ go build .
    # github.com/Azure/azure-sdk-for-go/services/mysql/mgmt/2020-01-01/mysql
    .gopath/pkg/mod/github.com/!azure/azure-sdk-for-go@v55.6.0+incompatible/services/mysql/mgmt/2020-01-01/mysql/models.go:346:2: undefined: azure.FutureAPI
    …
    

    It produces lots of errors, which isn't entirely unexpected: azure-sdk-for-go is on major version 55(!), which to me indicates a high rate of breaking changes. So probably this version of terratest was written against an older version, and has been broken by some intervening change.


    To figure out which version terratest is written against, I can check its go.mod file. At terratest v0.36.5, it specifies

        github.com/Azure/azure-sdk-for-go v46.0.0+incompatible
    

    So let's try that version:

    $ go get -d github.com/Azure/azure-sdk-for-go@v46.0.0+incompatible
    go: downloading github.com/Azure/azure-sdk-for-go v46.0.0+incompatible
    go get: downgraded github.com/Azure/azure-sdk-for-go v55.6.0+incompatible => v46.0.0+incompatible
    

    Now go build again:

    $ go build .
    .gopath/pkg/mod/github.com/!azure/azure-sdk-for-go@v46.0.0+incompatible/services/mysql/mgmt/2020-01-01/mysql/models.go:28:2: missing go.sum entry for module providing package github.com/satori/go.uuid (imported by github.com/Azure/azure-sdk-for-go/services/keyvault/mgmt/2016-10-01/keyvault); to add:
            go get github.com/Azure/azure-sdk-for-go/services/keyvault/mgmt/2016-10-01/keyvault@v46.0.0+incompatible
    

    This is because I told go get to download a specific version of a module, but I actually need a set of packages from within that module — and I'm missing checksums for some of the dependencies of those packages. So I'll run go mod tidy to fix up the package graph again:

    $ go mod tidy
    go: downloading github.com/satori/go.uuid v1.2.0
    

    And that does the trick:

    $ go build .
    
    $