mirror of https://github.com/kubernetes/kops.git
Tweak integration tests to be simpler
We require that all generated files are in the data directory, so we can simplify the logic here.
This commit is contained in:
parent
f5afc80a1e
commit
f47d7b2e43
|
@ -29,6 +29,7 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -910,15 +911,40 @@ func (i *integrationTest) runTest(t *testing.T, h *testutils.IntegrationTestHarn
|
||||||
|
|
||||||
// Compare data files if they are provided
|
// Compare data files if they are provided
|
||||||
if len(expectedDataFilenames) > 0 {
|
if len(expectedDataFilenames) > 0 {
|
||||||
actualDataPath := path.Join(h.TempDir, "out", "data")
|
actualDataDir := filepath.Join(h.TempDir, "out", "data")
|
||||||
files, err := os.ReadDir(actualDataPath)
|
|
||||||
|
expectedDataDir := filepath.Join(i.srcDir, "data")
|
||||||
|
for _, filename := range expectedDataFilenames {
|
||||||
|
expectedPath := filepath.Join(expectedDataDir, filename)
|
||||||
|
actualPath := filepath.Join(actualDataDir, filename)
|
||||||
|
actualDataContent, err := os.ReadFile(actualPath)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to read actual data file %q: %v", actualPath, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
golden.AssertMatchesFile(t, string(actualDataContent), expectedPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
actualFiles, err := os.ReadDir(actualDataDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to read data dir: %v", err)
|
t.Fatalf("failed to read data dir %q: %v", actualDataDir, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var actualDataFilenames []string
|
var actualDataFilenames []string
|
||||||
for _, f := range files {
|
for _, f := range actualFiles {
|
||||||
actualDataFilenames = append(actualDataFilenames, f.Name())
|
actualDataFilenames = append(actualDataFilenames, f.Name())
|
||||||
|
|
||||||
|
if golden.UpdateExpectedOutput() {
|
||||||
|
filename := f.Name()
|
||||||
|
expectedPath := filepath.Join(expectedDataDir, filename)
|
||||||
|
actualPath := filepath.Join(actualDataDir, filename)
|
||||||
|
actualDataContent, err := os.ReadFile(actualPath)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to read actual data file %q: %v", actualPath, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
golden.AssertMatchesFile(t, string(actualDataContent), expectedPath)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Strings(expectedDataFilenames)
|
sort.Strings(expectedDataFilenames)
|
||||||
|
@ -933,26 +959,12 @@ func (i *integrationTest) runTest(t *testing.T, h *testutils.IntegrationTestHarn
|
||||||
expected := strings.Join(expectedDataFilenames, "\n")
|
expected := strings.Join(expectedDataFilenames, "\n")
|
||||||
diff := diff.FormatDiff(actual, expected)
|
diff := diff.FormatDiff(actual, expected)
|
||||||
t.Log(diff)
|
t.Log(diff)
|
||||||
t.Fatal("unexpected data files.")
|
t.Error("unexpected data files.")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some tests might provide _some_ tf data files (not necessarily all that
|
existingExpectedFiles, err := os.ReadDir(expectedDataDir)
|
||||||
// are actually produced), validate that the provided expected data file
|
|
||||||
// contents match actual data file content
|
|
||||||
expectedDataPath := path.Join(i.srcDir, "data")
|
|
||||||
{
|
|
||||||
for _, dataFileName := range expectedDataFilenames {
|
|
||||||
actualDataContent, err := os.ReadFile(path.Join(actualDataPath, dataFileName))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("failed to read actual data file: %v", err)
|
|
||||||
}
|
|
||||||
golden.AssertMatchesFile(t, string(actualDataContent), path.Join(expectedDataPath, dataFileName))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
existingExpectedFiles, err := os.ReadDir(expectedDataPath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to read data dir: %v", err)
|
t.Fatalf("failed to read data dir %q: %v", expectedDataDir, err)
|
||||||
}
|
}
|
||||||
existingExpectedFilenames := make([]string, len(existingExpectedFiles))
|
existingExpectedFilenames := make([]string, len(existingExpectedFiles))
|
||||||
for i, f := range existingExpectedFiles {
|
for i, f := range existingExpectedFiles {
|
||||||
|
|
|
@ -26,6 +26,11 @@ import (
|
||||||
"k8s.io/kops/pkg/diff"
|
"k8s.io/kops/pkg/diff"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// UpdateExpectedOutput returns true if we should be writing/updating the expected output.
|
||||||
|
func UpdateExpectedOutput() bool {
|
||||||
|
return os.Getenv("HACK_UPDATE_EXPECTED_IN_PLACE") != ""
|
||||||
|
}
|
||||||
|
|
||||||
// AssertMatchesFile matches the actual value to a with expected file.
|
// AssertMatchesFile matches the actual value to a with expected file.
|
||||||
// If HACK_UPDATE_EXPECTED_IN_PLACE is set, it will write the actual value to the expected file,
|
// If HACK_UPDATE_EXPECTED_IN_PLACE is set, it will write the actual value to the expected file,
|
||||||
// which is very handy when updating our tests.
|
// which is very handy when updating our tests.
|
||||||
|
@ -41,7 +46,7 @@ func AssertMatchesFile(t *testing.T, actual string, p string) {
|
||||||
|
|
||||||
expectedBytes, err := os.ReadFile(p)
|
expectedBytes, err := os.ReadFile(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !os.IsNotExist(err) || os.Getenv("HACK_UPDATE_EXPECTED_IN_PLACE") == "" {
|
if !os.IsNotExist(err) && !UpdateExpectedOutput() {
|
||||||
t.Fatalf("error reading file %q: %v", p, err)
|
t.Fatalf("error reading file %q: %v", p, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +60,7 @@ func AssertMatchesFile(t *testing.T, actual string, p string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if os.Getenv("HACK_UPDATE_EXPECTED_IN_PLACE") != "" {
|
if UpdateExpectedOutput() {
|
||||||
t.Logf("HACK_UPDATE_EXPECTED_IN_PLACE: writing expected output %s", p)
|
t.Logf("HACK_UPDATE_EXPECTED_IN_PLACE: writing expected output %s", p)
|
||||||
|
|
||||||
// Keep git happy with a trailing newline
|
// Keep git happy with a trailing newline
|
||||||
|
|
Loading…
Reference in New Issue