2023-03-28 19:12:30 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
2023-08-11 13:12:13 +00:00
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
2023-03-28 19:12:30 +00:00
|
|
|
|
2020-07-08 20:19:01 +00:00
|
|
|
package version
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"fmt"
|
2022-11-10 16:26:01 +00:00
|
|
|
"os"
|
2020-07-08 20:19:01 +00:00
|
|
|
"path/filepath"
|
|
|
|
"testing"
|
2022-06-02 20:25:47 +00:00
|
|
|
"time"
|
2020-07-08 20:19:01 +00:00
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
// update allows golden files to be updated based on the current output.
|
|
|
|
var update = flag.Bool("update", false, "update golden files")
|
|
|
|
|
|
|
|
// golden reads and optionally writes the expected data to the golden file,
|
|
|
|
// returning the contents as a string.
|
|
|
|
func golden(t *testing.T, name, got string) string {
|
|
|
|
t.Helper()
|
|
|
|
|
|
|
|
golden := filepath.Join("testdata", name+".golden")
|
|
|
|
if *update && got != "" {
|
2022-11-10 16:26:01 +00:00
|
|
|
err := os.WriteFile(golden, []byte(got), 0644)
|
2020-07-08 20:19:01 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
}
|
|
|
|
|
2022-11-10 16:26:01 +00:00
|
|
|
expected, err := os.ReadFile(golden)
|
2020-07-08 20:19:01 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
return string(expected)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestFormat(t *testing.T) {
|
2022-06-02 20:25:47 +00:00
|
|
|
buildDate, _ := time.Parse(time.RFC3339, "2022-06-01T13:18:45Z")
|
2020-07-08 20:19:01 +00:00
|
|
|
info := VersionInfo{
|
|
|
|
HumanVersion: "1.99.3-beta1",
|
|
|
|
Version: "1.99.3",
|
|
|
|
Prerelease: "beta1",
|
|
|
|
Revision: "5e5dbedd47a5f875b60e241c5555a9caab595246",
|
2022-06-02 20:25:47 +00:00
|
|
|
BuildDate: buildDate,
|
2020-07-08 20:19:01 +00:00
|
|
|
RPC: RPCVersionInfo{
|
|
|
|
Default: 2,
|
|
|
|
Min: 1,
|
|
|
|
Max: 3,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
formatters := map[string]Formatter{
|
|
|
|
"pretty": newPrettyFormatter(),
|
|
|
|
// the JSON formatter ignores the showMeta
|
|
|
|
"json": newJSONFormatter(),
|
|
|
|
}
|
|
|
|
|
|
|
|
for fmtName, formatter := range formatters {
|
|
|
|
t.Run(fmtName, func(t *testing.T) {
|
|
|
|
actual, err := formatter.Format(&info)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
gName := fmt.Sprintf("%s", fmtName)
|
|
|
|
|
|
|
|
expected := golden(t, gName, actual)
|
|
|
|
require.Equal(t, expected, actual)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|