mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 03:33:56 +00:00
Make edit test use subtests to identify flake
This commit is contained in:
parent
d77b95723c
commit
5519a7c5e9
@ -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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user