opentofu/internal/depsfile/locks_test.go
Martin Atkins 4a1b081afb depsfile: Locks.Equal and Locks.Empty methods
These are helper functions to give the installation UI some hints about
whether the lock file has changed so that it can in turn give the user
advice about it. The UI-layer callers of these will follow in a later
commit.
2020-10-09 09:26:23 -07:00

83 lines
2.6 KiB
Go

package depsfile
import (
"testing"
"github.com/hashicorp/terraform/addrs"
"github.com/hashicorp/terraform/internal/getproviders"
)
func TestLocksEqual(t *testing.T) {
boopProvider := addrs.NewDefaultProvider("boop")
v2 := getproviders.MustParseVersion("2.0.0")
v2LocalBuild := getproviders.MustParseVersion("2.0.0+awesomecorp.1")
v2GtConstraints := getproviders.MustParseVersionConstraints(">= 2.0.0")
v2EqConstraints := getproviders.MustParseVersionConstraints("2.0.0")
hash1 := getproviders.HashScheme("test").New("1")
hash2 := getproviders.HashScheme("test").New("2")
hash3 := getproviders.HashScheme("test").New("3")
equalBothWays := func(t *testing.T, a, b *Locks) {
t.Helper()
if !a.Equal(b) {
t.Errorf("a should be equal to b")
}
if !b.Equal(a) {
t.Errorf("b should be equal to a")
}
}
nonEqualBothWays := func(t *testing.T, a, b *Locks) {
t.Helper()
if a.Equal(b) {
t.Errorf("a should be equal to b")
}
if b.Equal(a) {
t.Errorf("b should be equal to a")
}
}
t.Run("both empty", func(t *testing.T) {
a := NewLocks()
b := NewLocks()
equalBothWays(t, a, b)
})
t.Run("an extra provider lock", func(t *testing.T) {
a := NewLocks()
b := NewLocks()
b.SetProvider(boopProvider, v2, v2GtConstraints, nil)
nonEqualBothWays(t, a, b)
})
t.Run("both have boop provider with same version", func(t *testing.T) {
a := NewLocks()
b := NewLocks()
// Note: the constraints are not part of the definition of "Equal", so they can differ
a.SetProvider(boopProvider, v2, v2GtConstraints, nil)
b.SetProvider(boopProvider, v2, v2EqConstraints, nil)
equalBothWays(t, a, b)
})
t.Run("both have boop provider with different versions", func(t *testing.T) {
a := NewLocks()
b := NewLocks()
a.SetProvider(boopProvider, v2, v2EqConstraints, nil)
b.SetProvider(boopProvider, v2LocalBuild, v2EqConstraints, nil)
nonEqualBothWays(t, a, b)
})
t.Run("both have boop provider with same version and same hashes", func(t *testing.T) {
a := NewLocks()
b := NewLocks()
hashes := []getproviders.Hash{hash1, hash2, hash3}
a.SetProvider(boopProvider, v2, v2EqConstraints, hashes)
b.SetProvider(boopProvider, v2, v2EqConstraints, hashes)
equalBothWays(t, a, b)
})
t.Run("both have boop provider with same version but different hashes", func(t *testing.T) {
a := NewLocks()
b := NewLocks()
hashesA := []getproviders.Hash{hash1, hash2}
hashesB := []getproviders.Hash{hash1, hash3}
a.SetProvider(boopProvider, v2, v2EqConstraints, hashesA)
b.SetProvider(boopProvider, v2, v2EqConstraints, hashesB)
nonEqualBothWays(t, a, b)
})
}