mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
4a1b081afb
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.
83 lines
2.6 KiB
Go
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)
|
|
})
|
|
}
|