2020-10-02 19:45:20 +02:00
|
|
|
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)
|
|
|
|
})
|
|
|
|
}
|
2021-03-09 17:12:00 +01:00
|
|
|
|
|
|
|
func TestLocksEqualProviderAddress(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")
|
|
|
|
|
|
|
|
equalProviderAddressBothWays := func(t *testing.T, a, b *Locks) {
|
|
|
|
t.Helper()
|
|
|
|
if !a.EqualProviderAddress(b) {
|
|
|
|
t.Errorf("a should be equal to b")
|
|
|
|
}
|
|
|
|
if !b.EqualProviderAddress(a) {
|
|
|
|
t.Errorf("b should be equal to a")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
nonEqualProviderAddressBothWays := func(t *testing.T, a, b *Locks) {
|
|
|
|
t.Helper()
|
|
|
|
if a.EqualProviderAddress(b) {
|
|
|
|
t.Errorf("a should be equal to b")
|
|
|
|
}
|
|
|
|
if b.EqualProviderAddress(a) {
|
|
|
|
t.Errorf("b should be equal to a")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("both empty", func(t *testing.T) {
|
|
|
|
a := NewLocks()
|
|
|
|
b := NewLocks()
|
|
|
|
equalProviderAddressBothWays(t, a, b)
|
|
|
|
})
|
|
|
|
t.Run("an extra provider lock", func(t *testing.T) {
|
|
|
|
a := NewLocks()
|
|
|
|
b := NewLocks()
|
|
|
|
b.SetProvider(boopProvider, v2, v2GtConstraints, nil)
|
|
|
|
nonEqualProviderAddressBothWays(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)
|
|
|
|
equalProviderAddressBothWays(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)
|
|
|
|
equalProviderAddressBothWays(t, a, b)
|
|
|
|
})
|
|
|
|
}
|