Skip to content

Commit ba2dcc1

Browse files
Merge pull request #22893 from wking/fix-upgrade-semver-sort
Bug 1713262: pkg/oc/cli/admin/upgrade: Fix and test sortSemanticVersions
2 parents 6380025 + 0931c6a commit ba2dcc1

2 files changed

Lines changed: 35 additions & 11 deletions

File tree

pkg/oc/cli/admin/upgrade/upgrade.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -336,26 +336,21 @@ func updateIsEquivalent(a, b configv1.Update) bool {
336336
}
337337
}
338338

339+
// sortSemanticVersions sorts the input slice in increasing order.
339340
func sortSemanticVersions(versions []configv1.Update) {
340341
sort.Slice(versions, func(i, j int) bool {
341342
a, errA := semver.Parse(versions[i].Version)
342343
b, errB := semver.Parse(versions[j].Version)
343344
if errA == nil && errB != nil {
344-
return true
345-
}
346-
if errB == nil && errA == nil {
347345
return false
348346
}
349-
if errA != nil && errB != nil {
350-
if versions[i].Version < versions[j].Version {
351-
return true
352-
}
353-
return false
354-
}
355-
if a.Compare(b) < 0 {
347+
if errB == nil && errA != nil {
356348
return true
357349
}
358-
return false
350+
if errA != nil && errB != nil {
351+
return versions[i].Version < versions[j].Version
352+
}
353+
return a.LT(b)
359354
})
360355
}
361356

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package upgrade
2+
3+
import (
4+
"math/rand"
5+
"reflect"
6+
"testing"
7+
8+
configv1 "github.com/openshift/api/config/v1"
9+
)
10+
11+
func TestSortSemanticVersions(t *testing.T) {
12+
expected := []configv1.Update{
13+
{Version: "not-sem-ver-1"},
14+
{Version: "not-sem-ver-2"},
15+
{Version: "2.0.0"},
16+
{Version: "2.0.1"},
17+
{Version: "10.0.0"},
18+
}
19+
20+
actual := make([]configv1.Update, len(expected))
21+
for i, j := range rand.Perm(len(expected)) {
22+
actual[i] = expected[j]
23+
}
24+
25+
sortSemanticVersions(actual)
26+
if !reflect.DeepEqual(actual, expected) {
27+
t.Errorf("%v != %v", actual, expected)
28+
}
29+
}

0 commit comments

Comments
 (0)