Skip to content

Commit 1d9b965

Browse files
committed
Polish
1 parent b906257 commit 1d9b965

2 files changed

Lines changed: 44 additions & 109 deletions

File tree

tests/integration/supported_from_version_test.go

Lines changed: 42 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@ import (
1919
"github.com/stretchr/testify/assert"
2020
"github.com/stretchr/testify/require"
2121

22-
"golang.org/x/mod/semver"
23-
2422
defraMultiplier "github.com/sourcenetwork/defradb/tests/multiplier"
2523
)
2624

25+
// Which release a declared version resolves to is covered by the multiplier
26+
// package. These tests cover what the harness adds on top: validating the
27+
// declared value, walking the active multipliers, and restoring the versions it
28+
// set, including when a skip ends the test partway through.
29+
2730
// versionRecorder captures a failure from applyTestCaseVersion without ending
2831
// the real test.
2932
//
@@ -110,15 +113,6 @@ func runVersionMode(
110113
return resolved, rec
111114
}
112115

113-
func TestApplyTestCaseVersion_NoSupportedFrom_UsesDefaultTarget(t *testing.T) {
114-
resolved, rec := runVersion(t, "", defraMultiplier.CrossVersionOldSource,
115-
defraMultiplier.CrossVersionOldSource)
116-
117-
require.False(t, rec.failed)
118-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
119-
resolved[defraMultiplier.CrossVersionOldSource])
120-
}
121-
122116
func TestApplyTestCaseVersion_SupportedFromNewerThanTarget_RunsAtSupportedFrom(t *testing.T) {
123117
// The point of the change: rather than skipping, the test runs against the
124118
// oldest release it supports.
@@ -129,28 +123,9 @@ func TestApplyTestCaseVersion_SupportedFromNewerThanTarget_RunsAtSupportedFrom(t
129123
assert.Equal(t, "v99.0.0", resolved[defraMultiplier.CrossVersionOldSource])
130124
}
131125

132-
func TestApplyTestCaseVersion_SupportedFromEqualToTarget_UsesTarget(t *testing.T) {
133-
resolved, rec := runVersion(t, defraMultiplier.CrossVersionTargetVersion,
134-
defraMultiplier.CrossVersionOldSource, defraMultiplier.CrossVersionOldSource)
135-
136-
require.False(t, rec.failed)
137-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
138-
resolved[defraMultiplier.CrossVersionOldSource])
139-
}
140-
141-
func TestApplyTestCaseVersion_SupportedFromOlderThanTarget_UsesTarget(t *testing.T) {
142-
// The default target already satisfies the test, so it stays: it is the
143-
// pairing most likely to have drifted from the current build.
144-
require.Equal(t, "v1.0.0", defraMultiplier.CrossVersionTargetVersion)
145-
146-
resolved, rec := runVersion(t, "v0.9.0", defraMultiplier.CrossVersionOldSource,
147-
defraMultiplier.CrossVersionOldSource)
148-
149-
require.False(t, rec.failed)
150-
assert.Equal(t, "v1.0.0", resolved[defraMultiplier.CrossVersionOldSource])
151-
}
152-
153-
func TestApplyTestCaseVersion_BothDirections_AreSetIndependently(t *testing.T) {
126+
func TestApplyTestCaseVersion_AllVersionMultipliers_AreSet(t *testing.T) {
127+
// Every active multiplier that targets a release has to be pointed at the
128+
// declared version, not just the first one found.
154129
active := fmt.Sprintf("%s,%s",
155130
defraMultiplier.CrossVersionOldSource, defraMultiplier.CrossVersionNewSource)
156131

@@ -162,6 +137,30 @@ func TestApplyTestCaseVersion_BothDirections_AreSetIndependently(t *testing.T) {
162137
assert.Equal(t, "v99.0.0", resolved[defraMultiplier.CrossVersionNewSource])
163138
}
164139

140+
func TestApplyTestCaseVersion_NonVersionMultiplier_Unaffected(t *testing.T) {
141+
// signed-docs targets no release, so a declared version must not reach it and
142+
// must not disturb the cross-version default.
143+
_, rec := runVersion(t, "v99.0.0", defraMultiplier.SignedDocs)
144+
145+
require.False(t, rec.failed)
146+
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
147+
defraMultiplier.TargetVersionInEffect(defraMultiplier.CrossVersionOldSource))
148+
}
149+
150+
func TestApplyTestCaseVersion_Exact_SupportedFromNewerThanTarget_Skips(t *testing.T) {
151+
// In exact mode the release the test needs is covered by its own run, so
152+
// running it here as well would report coverage of a release this run never
153+
// touched.
154+
_, rec := runVersionExact(t, "v99.0.0", defraMultiplier.CrossVersionOldSource,
155+
defraMultiplier.CrossVersionOldSource)
156+
157+
assert.True(t, rec.skipped)
158+
assert.False(t, rec.failed)
159+
assert.Contains(t, rec.message, defraMultiplier.CrossVersionOldSource)
160+
assert.Contains(t, rec.message, defraMultiplier.CrossVersionTargetVersion)
161+
assert.Contains(t, rec.message, "v99.0.0")
162+
}
163+
165164
func TestApplyTestCaseVersion_RestoresDefaultAfterwards(t *testing.T) {
166165
// A version must not leak into the next test in the package.
167166
_, rec := runVersion(t, "v99.0.0", defraMultiplier.CrossVersionOldSource,
@@ -172,14 +171,19 @@ func TestApplyTestCaseVersion_RestoresDefaultAfterwards(t *testing.T) {
172171
defraMultiplier.TargetVersionInEffect(defraMultiplier.CrossVersionOldSource))
173172
}
174173

175-
func TestApplyTestCaseVersion_NonVersionMultiplier_Unaffected(t *testing.T) {
176-
// signed-docs targets no release, so a declared version must not reach it and
177-
// must not disturb the cross-version default.
178-
_, rec := runVersion(t, "v99.0.0", defraMultiplier.SignedDocs)
174+
func TestApplyTestCaseVersion_Exact_SkipRestoresEarlierMultipliers(t *testing.T) {
175+
// The skip ends the test partway through the loop, so a version set for an
176+
// earlier multiplier must not leak into the next test.
177+
active := fmt.Sprintf("%s,%s",
178+
defraMultiplier.CrossVersionOldSource, defraMultiplier.CrossVersionNewSource)
179+
180+
_, rec := runVersionExact(t, "v99.0.0", active)
181+
require.True(t, rec.skipped)
179182

180-
require.False(t, rec.failed)
181183
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
182184
defraMultiplier.TargetVersionInEffect(defraMultiplier.CrossVersionOldSource))
185+
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
186+
defraMultiplier.TargetVersionInEffect(defraMultiplier.CrossVersionNewSource))
183187
}
184188

185189
func TestApplyTestCaseVersion_InvalidVersion_Fails(t *testing.T) {
@@ -210,74 +214,3 @@ func TestApplyTestCaseVersion_SpacedNames_AreTrimmed(t *testing.T) {
210214
require.False(t, rec.failed)
211215
assert.Equal(t, "v99.0.0", resolved[defraMultiplier.CrossVersionOldSource])
212216
}
213-
214-
// TestSupportedFromVersion_ComparisonIsNotLexical guards the reason x/mod/semver
215-
// is used rather than plain string comparison.
216-
func TestSupportedFromVersion_ComparisonIsNotLexical(t *testing.T) {
217-
// "v1.10.0" sorts before "v1.9.0" as a string, so a lexical comparison would
218-
// treat a v1.10.0 target as older than a v1.9.0 requirement and needlessly
219-
// move the run to v1.9.0.
220-
require.Less(t, "v1.10.0", "v1.9.0", "precondition: these compare the wrong way lexically")
221-
222-
assert.Positive(t, semver.Compare("v1.10.0", "v1.9.0"))
223-
assert.Negative(t, semver.Compare("v1.9.0", "v1.10.0"))
224-
assert.Zero(t, semver.Compare("v1.9.0", "v1.9.0"))
225-
}
226-
227-
func TestApplyTestCaseVersion_Exact_SupportedFromNewerThanTarget_Skips(t *testing.T) {
228-
// In exact mode the release the test needs is covered by its own run, so
229-
// promoting it here would run it twice and report coverage of a release this
230-
// run never touched.
231-
_, rec := runVersionExact(t, "v99.0.0", defraMultiplier.CrossVersionOldSource,
232-
defraMultiplier.CrossVersionOldSource)
233-
234-
assert.True(t, rec.skipped)
235-
assert.False(t, rec.failed)
236-
assert.Contains(t, rec.message, defraMultiplier.CrossVersionOldSource)
237-
assert.Contains(t, rec.message, defraMultiplier.CrossVersionTargetVersion)
238-
assert.Contains(t, rec.message, "v99.0.0")
239-
}
240-
241-
func TestApplyTestCaseVersion_Exact_SupportedFromEqualToTarget_Runs(t *testing.T) {
242-
resolved, rec := runVersionExact(t, defraMultiplier.CrossVersionTargetVersion,
243-
defraMultiplier.CrossVersionOldSource, defraMultiplier.CrossVersionOldSource)
244-
245-
require.False(t, rec.skipped)
246-
require.False(t, rec.failed)
247-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
248-
resolved[defraMultiplier.CrossVersionOldSource])
249-
}
250-
251-
func TestApplyTestCaseVersion_Exact_SupportedFromOlderThanTarget_Runs(t *testing.T) {
252-
resolved, rec := runVersionExact(t, "v0.9.0", defraMultiplier.CrossVersionOldSource,
253-
defraMultiplier.CrossVersionOldSource)
254-
255-
require.False(t, rec.skipped)
256-
require.False(t, rec.failed)
257-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
258-
resolved[defraMultiplier.CrossVersionOldSource])
259-
}
260-
261-
func TestApplyTestCaseVersion_Exact_NoSupportedFrom_Runs(t *testing.T) {
262-
resolved, rec := runVersionExact(t, "", defraMultiplier.CrossVersionOldSource,
263-
defraMultiplier.CrossVersionOldSource)
264-
265-
require.False(t, rec.skipped)
266-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
267-
resolved[defraMultiplier.CrossVersionOldSource])
268-
}
269-
270-
func TestApplyTestCaseVersion_Exact_SkipRestoresEarlierMultipliers(t *testing.T) {
271-
// The skip ends the test partway through the loop, so a version set for an
272-
// earlier multiplier must not leak into the next test.
273-
active := fmt.Sprintf("%s,%s",
274-
defraMultiplier.CrossVersionOldSource, defraMultiplier.CrossVersionNewSource)
275-
276-
_, rec := runVersionExact(t, "v99.0.0", active)
277-
require.True(t, rec.skipped)
278-
279-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
280-
defraMultiplier.TargetVersionInEffect(defraMultiplier.CrossVersionOldSource))
281-
assert.Equal(t, defraMultiplier.CrossVersionTargetVersion,
282-
defraMultiplier.TargetVersionInEffect(defraMultiplier.CrossVersionNewSource))
283-
}

tests/multiplier/target_version.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ func ResolveTargetVersion(name Name, supportedFrom string, exact bool) (string,
6666
return "", VersionNotTargeted
6767
}
6868

69+
// Compared as semver rather than as strings: "v1.10.0" sorts before "v1.9.0"
70+
// lexically, which would read a newer target as older than the requirement.
6971
if supportedFrom != "" && semver.Compare(target, supportedFrom) < 0 {
7072
if exact {
7173
return "", VersionSkip

0 commit comments

Comments
 (0)