1
2
3
4 package provenance_test
5
6 import (
7 "fmt"
8 "runtime/debug"
9 "testing"
10
11 "github.com/stretchr/testify/assert"
12 "sigs.k8s.io/kustomize/api/provenance"
13 )
14
15 const expectedBuildDateFromLdFlag = "2023-01-31T23:38:41Z"
16 const expectedVersionFromLdFlag = "(test)"
17
18 func TestGetProvenance(t *testing.T) {
19 p := provenance.GetProvenance()
20
21 assert.Equal(t, expectedVersionFromLdFlag, p.Version)
22 assert.Equal(t, expectedBuildDateFromLdFlag, p.BuildDate)
23
24 assert.Equal(t, "unknown", p.GitCommit)
25
26
27 assert.NotEmpty(t, p.GoArch)
28 assert.NotEmpty(t, p.GoOs)
29 assert.Contains(t, p.GoVersion, "go1.")
30 }
31
32 func TestProvenance_Short(t *testing.T) {
33 p := provenance.GetProvenance()
34
35 assert.Equal(t, fmt.Sprintf("{%s %s }", expectedVersionFromLdFlag, expectedBuildDateFromLdFlag), p.Short())
36
37 p.Version = "kustomize/v4.11.12"
38 assert.Equal(t, fmt.Sprintf("{kustomize/v4.11.12 %s }", expectedBuildDateFromLdFlag), p.Short())
39 }
40
41 func TestProvenance_Semver(t *testing.T) {
42 p := provenance.GetProvenance()
43
44 assert.Equal(t, "(test)", p.Semver())
45
46 p.Version = "kustomize/v4.11.12"
47 assert.Equal(t, "v4.11.12", p.Semver())
48 }
49
50 func mockModule(version string) debug.Module {
51 return debug.Module{
52 Path: "sigs.k8s.io/kustomize/kustomize/v5",
53 Version: version,
54 Replace: nil,
55 }
56 }
57
58 func TestGetMostRecentTag(t *testing.T) {
59 tests := []struct {
60 name string
61 module debug.Module
62 isError bool
63 expectedTag string
64 }{
65 {
66 name: "Standard version",
67 module: mockModule("v1.2.3"),
68 expectedTag: "v1.2.3",
69 },
70 {
71 name: "Pseudo-version with patch increment",
72 module: mockModule("v0.0.0-20210101010101-abcdefabcdef"),
73 expectedTag: "v0.0.0",
74 },
75 {
76 name: "Invalid semver string",
77 module: mockModule("invalid-version"),
78 isError: true,
79 },
80 {
81 name: "Valid semver with patch increment and pre-release info",
82 module: mockModule("v1.2.3-0.20210101010101-abcdefabcdef"),
83 expectedTag: "v1.2.2",
84 },
85 {
86 name: "Valid semver no patch increment",
87 module: mockModule("v1.2.0"),
88 expectedTag: "v1.2.0",
89 },
90 }
91
92 for _, tt := range tests {
93 t.Run(tt.name, func(t *testing.T) {
94 tag, err := provenance.GetMostRecentTag(tt.module)
95 if err != nil {
96 if !tt.isError {
97 assert.NoError(t, err)
98 }
99 } else {
100 assert.Equal(t, tt.expectedTag, tag)
101 }
102 })
103 }
104 }
105
View as plain text