Make edit test use subtests to identify flake

This commit is contained in:
Clayton Coleman 2017-11-16 15:45:59 -05:00
parent d77b95723c
commit 5519a7c5e9
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3

View File

@ -193,94 +193,94 @@ func TestEdit(t *testing.T) {
} }
for _, testcaseName := range testcases.List() { for _, testcaseName := range testcases.List() {
t.Logf("Running testcase: %s", testcaseName) t.Run(testcaseName, func(t *testing.T) {
i = 0 i = 0
name = testcaseName name = testcaseName
testcase = EditTestCase{} testcase = EditTestCase{}
testcaseDir := filepath.Join("testdata", "edit", "testcase-"+name) testcaseDir := filepath.Join("testdata", "edit", "testcase-"+name)
testcaseData, err := ioutil.ReadFile(filepath.Join(testcaseDir, "test.yaml")) testcaseData, err := ioutil.ReadFile(filepath.Join(testcaseDir, "test.yaml"))
if err != nil { if err != nil {
t.Fatalf("%s: %v", name, err) t.Fatalf("%s: %v", name, err)
} }
if err := yaml.Unmarshal(testcaseData, &testcase); err != nil { if err := yaml.Unmarshal(testcaseData, &testcase); err != nil {
t.Fatalf("%s: %v", name, err) t.Fatalf("%s: %v", name, err)
}
f, tf, _, _ := cmdtesting.NewAPIFactory()
tf.Printer = &testPrinter{}
tf.UnstructuredClientForMappingFunc = func(mapping *meta.RESTMapping) (resource.RESTClient, error) {
versionedAPIPath := ""
if mapping.GroupVersionKind.Group == "" {
versionedAPIPath = "/api/" + mapping.GroupVersionKind.Version
} else {
versionedAPIPath = "/apis/" + mapping.GroupVersionKind.Group + "/" + mapping.GroupVersionKind.Version
} }
return &fake.RESTClient{
VersionedAPIPath: versionedAPIPath,
NegotiatedSerializer: unstructuredSerializer,
Client: fake.CreateHTTPClient(reqResp),
}, nil
}
if len(testcase.Namespace) > 0 { f, tf, _, _ := cmdtesting.NewAPIFactory()
tf.Namespace = testcase.Namespace tf.Printer = &testPrinter{}
} tf.UnstructuredClientForMappingFunc = func(mapping *meta.RESTMapping) (resource.RESTClient, error) {
tf.ClientConfig = defaultClientConfig() versionedAPIPath := ""
tf.Command = "edit test cmd invocation" if mapping.GroupVersionKind.Group == "" {
buf := bytes.NewBuffer([]byte{}) versionedAPIPath = "/api/" + mapping.GroupVersionKind.Version
errBuf := bytes.NewBuffer([]byte{}) } else {
versionedAPIPath = "/apis/" + mapping.GroupVersionKind.Group + "/" + mapping.GroupVersionKind.Version
}
return &fake.RESTClient{
VersionedAPIPath: versionedAPIPath,
NegotiatedSerializer: unstructuredSerializer,
Client: fake.CreateHTTPClient(reqResp),
}, nil
}
var cmd *cobra.Command if len(testcase.Namespace) > 0 {
switch testcase.Mode { tf.Namespace = testcase.Namespace
case "edit": }
cmd = NewCmdEdit(f, buf, errBuf) tf.ClientConfig = defaultClientConfig()
case "create": tf.Command = "edit test cmd invocation"
cmd = NewCmdCreate(f, buf, errBuf) buf := bytes.NewBuffer([]byte{})
cmd.Flags().Set("edit", "true") errBuf := bytes.NewBuffer([]byte{})
case "edit-last-applied":
cmd = NewCmdApplyEditLastApplied(f, buf, errBuf)
default:
t.Errorf("%s: unexpected mode %s", name, testcase.Mode)
continue
}
if len(testcase.Filename) > 0 {
cmd.Flags().Set("filename", filepath.Join(testcaseDir, testcase.Filename))
}
if len(testcase.Output) > 0 {
cmd.Flags().Set("output", testcase.Output)
}
if len(testcase.OutputPatch) > 0 {
cmd.Flags().Set("output-patch", testcase.OutputPatch)
}
if len(testcase.SaveConfig) > 0 {
cmd.Flags().Set("save-config", testcase.SaveConfig)
}
cmdutil.BehaviorOnFatal(func(str string, code int) { var cmd *cobra.Command
errBuf.WriteString(str) switch testcase.Mode {
if testcase.ExpectedExitCode != code { case "edit":
t.Errorf("%s: expected exit code %d, got %d: %s", name, testcase.ExpectedExitCode, code, str) cmd = NewCmdEdit(f, buf, errBuf)
case "create":
cmd = NewCmdCreate(f, buf, errBuf)
cmd.Flags().Set("edit", "true")
case "edit-last-applied":
cmd = NewCmdApplyEditLastApplied(f, buf, errBuf)
default:
t.Fatalf("%s: unexpected mode %s", name, testcase.Mode)
}
if len(testcase.Filename) > 0 {
cmd.Flags().Set("filename", filepath.Join(testcaseDir, testcase.Filename))
}
if len(testcase.Output) > 0 {
cmd.Flags().Set("output", testcase.Output)
}
if len(testcase.OutputPatch) > 0 {
cmd.Flags().Set("output-patch", testcase.OutputPatch)
}
if len(testcase.SaveConfig) > 0 {
cmd.Flags().Set("save-config", testcase.SaveConfig)
}
cmdutil.BehaviorOnFatal(func(str string, code int) {
errBuf.WriteString(str)
if testcase.ExpectedExitCode != code {
t.Errorf("%s: expected exit code %d, got %d: %s", name, testcase.ExpectedExitCode, code, str)
}
})
cmd.Run(cmd, testcase.Args)
stdout := buf.String()
stderr := errBuf.String()
for _, s := range testcase.ExpectedStdout {
if !strings.Contains(stdout, s) {
t.Errorf("%s: expected to see '%s' in stdout\n\nstdout:\n%s\n\nstderr:\n%s", name, s, stdout, stderr)
}
}
for _, s := range testcase.ExpectedStderr {
if !strings.Contains(stderr, s) {
t.Errorf("%s: expected to see '%s' in stderr\n\nstdout:\n%s\n\nstderr:\n%s", name, s, stdout, stderr)
}
}
if i < len(testcase.Steps) {
t.Errorf("%s: saw %d steps, testcase included %d additional steps that were not exercised", name, i, len(testcase.Steps)-i)
} }
}) })
cmd.Run(cmd, testcase.Args)
stdout := buf.String()
stderr := errBuf.String()
for _, s := range testcase.ExpectedStdout {
if !strings.Contains(stdout, s) {
t.Errorf("%s: expected to see '%s' in stdout\n\nstdout:\n%s\n\nstderr:\n%s", name, s, stdout, stderr)
}
}
for _, s := range testcase.ExpectedStderr {
if !strings.Contains(stderr, s) {
t.Errorf("%s: expected to see '%s' in stderr\n\nstdout:\n%s\n\nstderr:\n%s", name, s, stdout, stderr)
}
}
if i < len(testcase.Steps) {
t.Errorf("%s: saw %d steps, testcase included %d additional steps that were not exercised", name, i, len(testcase.Steps)-i)
}
} }
} }