blob: a2572529f5d8a8e3503de7df88afee9a05ef47c5 [file] [log] [blame]
package gps
import (
"bytes"
"crypto/sha256"
"testing"
)
func TestHashInputs(t *testing.T) {
fix := basicFixtures["shared dependency with overlapping constraints"]
params := SolveParameters{
RootDir: string(fix.ds[0].n),
RootPackageTree: fix.rootTree(),
Manifest: fix.rootmanifest(),
}
s, err := Prepare(params, newdepspecSM(fix.ds, nil))
if err != nil {
t.Errorf("Unexpected error while prepping solver: %s", err)
t.FailNow()
}
dig := s.HashInputs()
h := sha256.New()
elems := []string{
"a",
"1.0.0",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"root",
"a",
"b",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct := h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
}
func TestHashInputsIgnores(t *testing.T) {
fix := basicFixtures["shared dependency with overlapping constraints"]
rm := fix.rootmanifest().(simpleRootManifest).dup()
rm.ig = map[string]bool{
"foo": true,
"bar": true,
}
params := SolveParameters{
RootDir: string(fix.ds[0].n),
RootPackageTree: fix.rootTree(),
Manifest: rm,
}
s, err := Prepare(params, newdepspecSM(fix.ds, nil))
if err != nil {
t.Errorf("Unexpected error while prepping solver: %s", err)
t.FailNow()
}
dig := s.HashInputs()
h := sha256.New()
elems := []string{
"a",
"1.0.0",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"bar",
"foo",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct := h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
}
func TestHashInputsOverrides(t *testing.T) {
fix := basicFixtures["shared dependency with overlapping constraints"]
rm := fix.rootmanifest().(simpleRootManifest).dup()
// First case - override something not in the root, just with network name
rm.ovr = map[ProjectRoot]ProjectProperties{
"c": ProjectProperties{
NetworkName: "car",
},
}
params := SolveParameters{
RootDir: string(fix.ds[0].n),
RootPackageTree: fix.rootTree(),
Manifest: rm,
}
s, err := Prepare(params, newdepspecSM(fix.ds, nil))
if err != nil {
t.Errorf("Unexpected error while prepping solver: %s", err)
t.FailNow()
}
dig := s.HashInputs()
h := sha256.New()
elems := []string{
"a",
"1.0.0",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"c",
"car",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct := h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
// Override not in root, just with constraint
rm.ovr["d"] = ProjectProperties{
Constraint: NewBranch("foobranch"),
}
dig = s.HashInputs()
h = sha256.New()
elems = []string{
"a",
"1.0.0",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"c",
"car",
"d",
"foobranch",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct = h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
// Override not in root, both constraint and network name
rm.ovr["e"] = ProjectProperties{
NetworkName: "groucho",
Constraint: NewBranch("plexiglass"),
}
dig = s.HashInputs()
h = sha256.New()
elems = []string{
"a",
"1.0.0",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"c",
"car",
"d",
"foobranch",
"e",
"groucho",
"plexiglass",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct = h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
// Override in root, just constraint
rm.ovr["a"] = ProjectProperties{
Constraint: NewVersion("fluglehorn"),
}
dig = s.HashInputs()
h = sha256.New()
elems = []string{
"a",
"fluglehorn",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"a",
"fluglehorn",
"c",
"car",
"d",
"foobranch",
"e",
"groucho",
"plexiglass",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct = h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
// Override in root, only network name
rm.ovr["a"] = ProjectProperties{
NetworkName: "nota",
}
dig = s.HashInputs()
h = sha256.New()
elems = []string{
"a",
"nota",
"1.0.0",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"a",
"nota",
"c",
"car",
"d",
"foobranch",
"e",
"groucho",
"plexiglass",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct = h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
// Override in root, network name and constraint
rm.ovr["a"] = ProjectProperties{
NetworkName: "nota",
Constraint: NewVersion("fluglehorn"),
}
dig = s.HashInputs()
h = sha256.New()
elems = []string{
"a",
"nota",
"fluglehorn",
"b",
"1.0.0",
stdlibPkgs,
appenginePkgs,
"root",
"",
"root",
"a",
"b",
"a",
"nota",
"fluglehorn",
"c",
"car",
"d",
"foobranch",
"e",
"groucho",
"plexiglass",
"depspec-sm-builtin",
"1.0.0",
}
for _, v := range elems {
h.Write([]byte(v))
}
correct = h.Sum(nil)
if !bytes.Equal(dig, correct) {
t.Errorf("Hashes are not equal")
}
}