Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(604)

Side by Side Diff: vpython/spec/spec_test.go

Issue 2971403002: [vpython] Enable base wheels, spec merging. (Closed)
Patch Set: fix comment Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « vpython/spec/spec.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The LUCI Authors. All rights reserved. 1 // Copyright 2017 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 package spec 5 package spec
6 6
7 import ( 7 import (
8 "testing" 8 "testing"
9 9
10 "github.com/luci/luci-go/vpython/api/vpython" 10 "github.com/luci/luci-go/vpython/api/vpython"
11 11
12 . "github.com/luci/luci-go/common/testing/assertions" 12 . "github.com/luci/luci-go/common/testing/assertions"
13 . "github.com/smartystreets/goconvey/convey" 13 . "github.com/smartystreets/goconvey/convey"
14 ) 14 )
15 15
16 func TestNormalizeAndHash(t *testing.T) { 16 func TestNormalizeAndHash(t *testing.T) {
17 t.Parallel() 17 t.Parallel()
18 18
19 Convey(`Test manifest generation`, t, func() { 19 Convey(`Test manifest generation`, t, func() {
20 otherTag := &vpython.PEP425Tag{Python: "otherPython", Abi: "othe rABI", Platform: "otherPlatform"} 20 otherTag := &vpython.PEP425Tag{Python: "otherPython", Abi: "othe rABI", Platform: "otherPlatform"}
21 maybeTag := &vpython.PEP425Tag{Python: "maybePython", Abi: "mayb eABI", Platform: "maybePlatform"} 21 maybeTag := &vpython.PEP425Tag{Python: "maybePython", Abi: "mayb eABI", Platform: "maybePlatform"}
22 22
23 pkgFoo := &vpython.Spec_Package{Name: "foo", Version: "1"} 23 pkgFoo := &vpython.Spec_Package{Name: "foo", Version: "1"}
24 pkgFooV2 := &vpython.Spec_Package{Name: "foo", Version: "2"}
24 pkgBar := &vpython.Spec_Package{Name: "bar", Version: "2"} 25 pkgBar := &vpython.Spec_Package{Name: "bar", Version: "2"}
25 pkgBaz := &vpython.Spec_Package{Name: "baz", Version: "3"} 26 pkgBaz := &vpython.Spec_Package{Name: "baz", Version: "3"}
26 pkgMaybe := &vpython.Spec_Package{Name: "maybe", Version: "3", M atchTag: []*vpython.PEP425Tag{
27 {Python: maybeTag.Python},
28 }}
29 27
30 env := vpython.Environment{ 28 env := vpython.Environment{
31 Pep425Tag: []*vpython.PEP425Tag{otherTag}, 29 Pep425Tag: []*vpython.PEP425Tag{otherTag},
32 } 30 }
33 var rt vpython.Runtime 31 var rt vpython.Runtime
34 32
35 Convey(`Will normalize an empty spec`, func() { 33 Convey(`Will normalize an empty spec`, func() {
36 So(NormalizeEnvironment(&env), ShouldBeNil) 34 So(NormalizeEnvironment(&env), ShouldBeNil)
37 So(env, ShouldResemble, vpython.Environment{ 35 So(env, ShouldResemble, vpython.Environment{
38 Spec: &vpython.Spec{}, 36 Spec: &vpython.Spec{},
39 Runtime: &vpython.Runtime{}, 37 Runtime: &vpython.Runtime{},
40 Pep425Tag: []*vpython.PEP425Tag{otherTag}, 38 Pep425Tag: []*vpython.PEP425Tag{otherTag},
41 }) 39 })
42 }) 40 })
43 41
44 Convey(`With a non-nil spec`, func() { 42 Convey(`With a non-nil spec`, func() {
45 env.Spec = &vpython.Spec{} 43 env.Spec = &vpython.Spec{}
46 44
47 Convey(`Will normalize to sorted order.`, func() { 45 Convey(`Will normalize to sorted order.`, func() {
48 env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgBar, pkgBaz} 46 env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgBar, pkgBaz}
49 So(NormalizeEnvironment(&env), ShouldBeNil) 47 So(NormalizeEnvironment(&env), ShouldBeNil)
50 So(env.Spec, ShouldResemble, &vpython.Spec{ 48 So(env.Spec, ShouldResemble, &vpython.Spec{
51 Wheel: []*vpython.Spec_Package{pkgBar, p kgBaz, pkgFoo}, 49 Wheel: []*vpython.Spec_Package{pkgBar, p kgBaz, pkgFoo},
52 }) 50 })
53 51
54 So(Hash(env.Spec, &rt, ""), ShouldEqual, "1e32c0 2610b51f8c3807203fccd3e8d01d252868d52eb4ee9df135ef6533c5ae") 52 So(Hash(env.Spec, &rt, ""), ShouldEqual, "1e32c0 2610b51f8c3807203fccd3e8d01d252868d52eb4ee9df135ef6533c5ae")
55 So(Hash(env.Spec, &rt, "extra"), ShouldEqual, "d 047eb021f50534c050aaa10c70dc7b4a9b511fab00cf67a191b2b0805f24420") 53 So(Hash(env.Spec, &rt, "extra"), ShouldEqual, "d 047eb021f50534c050aaa10c70dc7b4a9b511fab00cf67a191b2b0805f24420")
56 }) 54 })
57 55
58 » » » Convey(`With match tags`, func() { 56 » » » Convey(`With a match entry, will match tags`, func() {
57 » » » » pkgMaybe := &vpython.Spec_Package{Name: "maybe", Version: "3", MatchTag: []*vpython.PEP425Tag{
58 » » » » » {Python: maybeTag.Python},
59 » » » » }}
59 env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgMaybe} 60 env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgMaybe}
60 61
61 Convey(`Will omit the package if it doesn't matc h a tag`, func() { 62 Convey(`Will omit the package if it doesn't matc h a tag`, func() {
62 So(NormalizeEnvironment(&env), ShouldBeN il) 63 So(NormalizeEnvironment(&env), ShouldBeN il)
63 So(env.Spec, ShouldResemble, &vpython.Sp ec{ 64 So(env.Spec, ShouldResemble, &vpython.Sp ec{
64 Wheel: []*vpython.Spec_Package{p kgFoo}, 65 Wheel: []*vpython.Spec_Package{p kgFoo},
65 }) 66 })
66 }) 67 })
67 68
68 Convey(`Will include the package if it matches a tag, and strip the match field.`, func() { 69 Convey(`Will include the package if it matches a tag, and strip the match field.`, func() {
69 env.Pep425Tag = append(env.Pep425Tag, ma ybeTag) 70 env.Pep425Tag = append(env.Pep425Tag, ma ybeTag)
70 71
71 So(NormalizeEnvironment(&env), ShouldBeN il) 72 So(NormalizeEnvironment(&env), ShouldBeN il)
72 73
73 pkgMaybe.MatchTag = nil 74 pkgMaybe.MatchTag = nil
74 So(env.Spec, ShouldResemble, &vpython.Sp ec{ 75 So(env.Spec, ShouldResemble, &vpython.Sp ec{
75 Wheel: []*vpython.Spec_Package{p kgFoo, pkgMaybe}, 76 Wheel: []*vpython.Spec_Package{p kgFoo, pkgMaybe},
76 }) 77 })
77 }) 78 })
78 }) 79 })
79 80
80 » » » Convey(`Will fail to normalize if there are duplicate wh eels.`, func() { 81 » » » Convey(`With multiple match entries, will match tags`, f unc() {
82 » » » » pkgMaybe := &vpython.Spec_Package{Name: "maybe", Version: "3", MatchTag: []*vpython.PEP425Tag{
83 » » » » » {Python: maybeTag.Python},
84 » » » » }}
85 » » » » pkgMaybeNonexistTag := &vpython.Spec_Package{Nam e: "maybe", Version: "3", MatchTag: []*vpython.PEP425Tag{
86 » » » » » {Python: "nonexist"},
87 » » » » }}
88 » » » » env.Spec.Wheel = []*vpython.Spec_Package{pkgMayb e, pkgFoo, pkgMaybeNonexistTag}
89 » » » » env.Pep425Tag = append(env.Pep425Tag, maybeTag)
90
91 » » » » So(NormalizeEnvironment(&env), ShouldBeNil)
92
93 » » » » pkgMaybe.MatchTag = nil
94 » » » » So(env.Spec, ShouldResemble, &vpython.Spec{
95 » » » » » Wheel: []*vpython.Spec_Package{pkgFoo, p kgMaybe},
96 » » » » })
97 » » » })
98
99 » » » Convey(`With one absolute and one match, will always mat ch`, func() {
100 » » » » pkgAlways := &vpython.Spec_Package{Name: "maybe" , Version: "3"}
101 » » » » pkgMaybeNonexistTag := &vpython.Spec_Package{Nam e: "maybe", Version: "3", MatchTag: []*vpython.PEP425Tag{
102 » » » » » {Python: "nonexist"},
103 » » » » }}
104 » » » » env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgMaybeNonexistTag}
105 » » » » env.Pep425Tag = append(env.Pep425Tag, maybeTag)
106
107 » » » » So(NormalizeEnvironment(&env), ShouldBeNil)
108 » » » » So(env.Spec, ShouldResemble, &vpython.Spec{
109 » » » » » Wheel: []*vpython.Spec_Package{pkgFoo},
110 » » » » })
111
112 » » » » env.Spec.Wheel = []*vpython.Spec_Package{pkgAlwa ys, pkgFoo, pkgMaybeNonexistTag}
113
114 » » » » So(NormalizeEnvironment(&env), ShouldBeNil)
115 » » » » So(env.Spec, ShouldResemble, &vpython.Spec{
116 » » » » » Wheel: []*vpython.Spec_Package{pkgFoo, p kgAlways},
117 » » » » })
118 » » » })
119
120 » » » Convey(`Will normalize if there are duplicate wheels tha t share a version.`, func() {
81 env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgFoo, pkgBar, pkgBaz} 121 env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgFoo, pkgBar, pkgBaz}
82 » » » » So(NormalizeEnvironment(&env), ShouldErrLike, "d uplicate spec entries") 122 » » » » So(NormalizeEnvironment(&env), ShouldBeNil)
123 » » » » So(env.Spec, ShouldResemble, &vpython.Spec{
124 » » » » » Wheel: []*vpython.Spec_Package{pkgBar, p kgBaz, pkgFoo},
125 » » » » })
126 » » » })
83 127
84 » » » » // Even if the versions differ. 128 » » » Convey(`Will fail to normalize if there are duplicate wh eels with different versions.`, func() {
85 » » » » fooClone := *pkgFoo 129 » » » » env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, pkgFooV2, pkgFoo, pkgBar, pkgBaz}
86 » » » » fooClone.Version = "other" 130 » » » » So(NormalizeEnvironment(&env), ShouldErrLike, "m ultiple versions for package")
87 » » » » env.Spec.Wheel = []*vpython.Spec_Package{pkgFoo, &fooClone, pkgBar, pkgBaz}
88 » » » » So(NormalizeEnvironment(&env), ShouldErrLike, "d uplicate spec entries")
89 }) 131 })
90 }) 132 })
91 }) 133 })
92 } 134 }
OLDNEW
« no previous file with comments | « vpython/spec/spec.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698