Files
coder/provisioner/terraform/install_test.go
Kyle Carberry 17adfd1134 chore: improve times of ratelimit tests (#6346)
From 5s to 130ms!
2023-02-25 22:01:01 +00:00

75 lines
1.6 KiB
Go

package terraform_test
import (
"context"
"os"
"sync"
"sync/atomic"
"testing"
"time"
"github.com/hashicorp/go-version"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"cdr.dev/slog/sloggers/slogtest"
"github.com/coder/coder/provisioner/terraform"
)
func TestInstall(t *testing.T) {
t.Parallel()
if testing.Short() {
t.SkipNow()
}
ctx := context.Background()
dir := t.TempDir()
log := slogtest.Make(t, nil)
// install spins off 8 installs with Version and waits for them all
// to complete.
install := func(version *version.Version) string {
var wg sync.WaitGroup
var path atomic.Pointer[string]
for i := 0; i < 8; i++ {
wg.Add(1)
go func() {
defer wg.Done()
p, err := terraform.Install(ctx, log, dir, version)
assert.NoError(t, err)
path.Store(&p)
}()
}
wg.Wait()
if t.Failed() {
t.FailNow()
}
return *path.Load()
}
binPath := install(terraform.TerraformVersion)
checkBin := func() time.Time {
binInfo, err := os.Stat(binPath)
require.NoError(t, err)
require.Greater(t, binInfo.Size(), int64(0))
return binInfo.ModTime()
}
firstMod := checkBin()
// Since we're using the same version the install should be idempotent.
install(terraform.TerraformVersion)
secondMod := checkBin()
require.Equal(t, firstMod, secondMod)
// Ensure a new install happens when version changes
differentVersion := version.Must(version.NewVersion("1.2.0"))
// Sanity-check
require.NotEqual(t, differentVersion.String(), terraform.TerraformVersion.String())
install(differentVersion)
thirdMod := checkBin()
require.Greater(t, thirdMod, secondMod)
}