From 3b2ed9fcf3df0f29b260ab3f28610be5c8572c5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?= Date: Sun, 19 Nov 2023 01:45:45 +0100 Subject: [PATCH] chore: add version package unit tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles-Edouard Brétéché --- pkg/version/version.go | 20 +++++- pkg/version/version_test.go | 140 +++++++++++++++++++++++++++++++++--- 2 files changed, 149 insertions(+), 11 deletions(-) diff --git a/pkg/version/version.go b/pkg/version/version.go index 6080e7ce..596a9949 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -13,9 +13,15 @@ const ( // BuildVersion is provided at compile-time var BuildVersion string +type buildInfoReader = func() (*debug.BuildInfo, bool) + func Version() string { + return version(debug.ReadBuildInfo) +} + +func version(reader buildInfoReader) string { if BuildVersion == "" { - bi, ok := debug.ReadBuildInfo() + bi, ok := reader() if !ok { return notFound } @@ -25,7 +31,11 @@ func Version() string { } func Time() string { - bi, ok := debug.ReadBuildInfo() + return time(debug.ReadBuildInfo) +} + +func time(reader buildInfoReader) string { + bi, ok := reader() if !ok { return notFound } @@ -33,7 +43,11 @@ func Time() string { } func Hash() string { - bi, ok := debug.ReadBuildInfo() + return hash(debug.ReadBuildInfo) +} + +func hash(reader buildInfoReader) string { + bi, ok := reader() if !ok { return notFound } diff --git a/pkg/version/version_test.go b/pkg/version/version_test.go index ab622deb..0dbdcea0 100644 --- a/pkg/version/version_test.go +++ b/pkg/version/version_test.go @@ -4,24 +4,149 @@ import ( "runtime/debug" "testing" - "github.com/stretchr/testify/require" + "github.com/stretchr/testify/assert" ) func TestVersion(t *testing.T) { - require.NotEqual(t, "---", Version()) + assert.NotEqual(t, "---", Version()) +} + +func Test_version(t *testing.T) { + testCases := []struct { + name string + reader buildInfoReader + expectedVersion string + }{ + { + name: "No Build Info", + reader: func() (*debug.BuildInfo, bool) { + return nil, false + }, + expectedVersion: notFound, + }, + { + name: "Valid Build Info", + reader: func() (*debug.BuildInfo, bool) { + return &debug.BuildInfo{ + Main: debug.Module{Version: "v1.0.0"}, + }, true + }, + expectedVersion: "v1.0.0", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + BuildVersion = "" + actualVersion := version(tc.reader) + assert.Equal(t, tc.expectedVersion, actualVersion, "Expected version to be '%s'", tc.expectedVersion) + }) + } } func TestBuildVersion(t *testing.T) { BuildVersion = "test" - require.Equal(t, "test", Version()) + assert.Equal(t, "test", Version()) } func TestTime(t *testing.T) { - require.Equal(t, "---", Time()) + assert.Equal(t, "---", Time()) +} + +func Test_time(t *testing.T) { + vcsTime := "vcs.time" + testCases := []struct { + name string + reader buildInfoReader + expectedTime string + }{ + { + name: "No Build Info", + reader: func() (*debug.BuildInfo, bool) { + return nil, false + }, + expectedTime: notFound, + }, + { + name: "VCS Time Found", + reader: func() (*debug.BuildInfo, bool) { + return &debug.BuildInfo{ + Settings: []debug.BuildSetting{ + {Key: vcsTime, Value: "2021-04-01T12:34:56Z"}, + }, + }, true + }, + expectedTime: "2021-04-01T12:34:56Z", + }, + { + name: "VCS Time Not Found", + reader: func() (*debug.BuildInfo, bool) { + return &debug.BuildInfo{ + Settings: []debug.BuildSetting{ + {Key: "some.other.setting", Value: "some-value"}, + }, + }, true + }, + expectedTime: notFound, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actualTime := time(tc.reader) + assert.Equal(t, tc.expectedTime, actualTime, "Expected time to be '%s'", tc.expectedTime) + }) + } } func TestHash(t *testing.T) { - require.Equal(t, "---", Hash()) + assert.Equal(t, "---", Hash()) +} + +func Test_hash(t *testing.T) { + vcsRevision := "vcs.revision" + testCases := []struct { + name string + reader buildInfoReader + expectedHash string + }{ + { + name: "No Build Info", + reader: func() (*debug.BuildInfo, bool) { + return nil, false + }, + expectedHash: notFound, + }, + { + name: "VCS Revision Found", + reader: func() (*debug.BuildInfo, bool) { + return &debug.BuildInfo{ + Settings: []debug.BuildSetting{ + {Key: vcsRevision, Value: "abcdef123456"}, + }, + }, true + }, + expectedHash: "abcdef123456", + }, + { + name: "VCS Revision Not Found", + reader: func() (*debug.BuildInfo, bool) { + return &debug.BuildInfo{ + Settings: []debug.BuildSetting{ + {Key: "some.other.setting", Value: "some-value"}, + }, + }, true + }, + expectedHash: notFound, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actualHash := hash(tc.reader) + assert.Equal(t, tc.expectedHash, actualHash, "Expected hash to be '%s'", tc.expectedHash) + }) + } } func Test_tryFindSetting(t *testing.T) { @@ -53,9 +178,8 @@ func Test_tryFindSetting(t *testing.T) { }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := tryFindSetting(tt.key, tt.settings...); got != tt.want { - t.Errorf("tryeFindSetting() = %v, want %v", got, tt.want) - } + got := tryFindSetting(tt.key, tt.settings...) + assert.Equal(t, tt.want, got) }) } }