174 lines
4.2 KiB
Go
174 lines
4.2 KiB
Go
package buildinfo
|
|
|
|
import (
|
|
"runtime/debug"
|
|
"testing"
|
|
)
|
|
|
|
func TestResolve(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
settings []debug.BuildSetting
|
|
overrideRevision string
|
|
overrideDirty string
|
|
want Info
|
|
}{
|
|
{
|
|
name: "clean revision",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.revision", Value: "b4c5aae18aa653725ac697b29a05eac797576008"},
|
|
{Key: "vcs.modified", Value: "false"},
|
|
{Key: "vcs.time", Value: "2026-04-05T22:24:40Z"},
|
|
},
|
|
want: Info{
|
|
Display: "b4c5aae1",
|
|
Revision: "b4c5aae18aa653725ac697b29a05eac797576008",
|
|
Dirty: false,
|
|
VCSTime: "2026-04-05T22:24:40Z",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "dirty revision",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.revision", Value: "b4c5aae18aa653725ac697b29a05eac797576008"},
|
|
{Key: "vcs.modified", Value: "true"},
|
|
{Key: "vcs.time", Value: "2026-04-05T22:24:40Z"},
|
|
},
|
|
want: Info{
|
|
Display: "b4c5aae1+dirty",
|
|
Revision: "b4c5aae18aa653725ac697b29a05eac797576008",
|
|
Dirty: true,
|
|
VCSTime: "2026-04-05T22:24:40Z",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "missing revision",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.modified", Value: "true"},
|
|
{Key: "vcs.time", Value: "2026-04-05T22:24:40Z"},
|
|
},
|
|
want: Info{
|
|
Display: "unavailable",
|
|
Revision: "",
|
|
Dirty: false,
|
|
VCSTime: "",
|
|
Available: false,
|
|
},
|
|
},
|
|
{
|
|
name: "override revision",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.modified", Value: "false"},
|
|
},
|
|
overrideRevision: "edf2977f5013df08e57a869bf722af4243a0a4fd",
|
|
want: Info{
|
|
Display: "edf2977f",
|
|
Revision: "edf2977f5013df08e57a869bf722af4243a0a4fd",
|
|
Dirty: false,
|
|
VCSTime: "",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "override dirty revision",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.time", Value: "2026-04-05T22:24:40Z"},
|
|
},
|
|
overrideRevision: "edf2977f5013df08e57a869bf722af4243a0a4fd",
|
|
overrideDirty: "true",
|
|
want: Info{
|
|
Display: "edf2977f+dirty",
|
|
Revision: "edf2977f5013df08e57a869bf722af4243a0a4fd",
|
|
Dirty: true,
|
|
VCSTime: "",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "override short revision",
|
|
overrideRevision: "abc123",
|
|
want: Info{
|
|
Display: "abc123",
|
|
Revision: "abc123",
|
|
Dirty: false,
|
|
VCSTime: "",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "empty override remains unavailable",
|
|
overrideRevision: " ",
|
|
overrideDirty: "true",
|
|
want: Info{
|
|
Display: "unavailable",
|
|
Revision: "",
|
|
Dirty: false,
|
|
VCSTime: "",
|
|
Available: false,
|
|
},
|
|
},
|
|
{
|
|
name: "embedded revision wins over override",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.revision", Value: "b4c5aae18aa653725ac697b29a05eac797576008"},
|
|
{Key: "vcs.modified", Value: "false"},
|
|
{Key: "vcs.time", Value: "2026-04-05T22:24:40Z"},
|
|
},
|
|
overrideRevision: "edf2977f5013df08e57a869bf722af4243a0a4fd",
|
|
overrideDirty: "true",
|
|
want: Info{
|
|
Display: "b4c5aae1",
|
|
Revision: "b4c5aae18aa653725ac697b29a05eac797576008",
|
|
Dirty: false,
|
|
VCSTime: "2026-04-05T22:24:40Z",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "short revision",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.revision", Value: "abc123"},
|
|
{Key: "vcs.modified", Value: "false"},
|
|
},
|
|
want: Info{
|
|
Display: "abc123",
|
|
Revision: "abc123",
|
|
Dirty: false,
|
|
VCSTime: "",
|
|
Available: true,
|
|
},
|
|
},
|
|
{
|
|
name: "missing vcs time",
|
|
settings: []debug.BuildSetting{
|
|
{Key: "vcs.revision", Value: "b4c5aae18aa653725ac697b29a05eac797576008"},
|
|
{Key: "vcs.modified", Value: "false"},
|
|
},
|
|
want: Info{
|
|
Display: "b4c5aae1",
|
|
Revision: "b4c5aae18aa653725ac697b29a05eac797576008",
|
|
Dirty: false,
|
|
VCSTime: "",
|
|
Available: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
tc := tc
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
overrideRevision, overrideDirty := parseOverrides(tc.overrideRevision, tc.overrideDirty)
|
|
got := resolve(tc.settings, overrideRevision, overrideDirty)
|
|
if got != tc.want {
|
|
t.Fatalf("resolve() = %#v, want %#v", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|