mirror of
https://github.com/opentffoundation/opentf.git
synced 2025-12-25 01:00:16 -05:00
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.
This commit is contained in:
82
internal/depsfile/locks_test.go
Normal file
82
internal/depsfile/locks_test.go
Normal file
@@ -0,0 +1,82 @@
|
||||
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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user