Merge pull request #40823 from liggitt/edit-tests
Automatic merge from submit-queue (batch tested with PRs 38796, 40823, 40756, 41083, 41105) Add unit tests for interactive edit command Before updating edit to use unstructured objects and use generic JSON patching, we need better test coverage of the existing paths. This adds unit tests for the interactive edit scenarios. This PR adds: * Simple framework for recording tests for interactive edit: * record.go is a tiny test server that records editor and API inputs as test expectations, and editor and API outputs as playback stubs * record_editor.sh is a shell script that sends the before/after of an interactive `vi` edit to the test server * record_testcase.sh (see README) starts up the test server, sets up a kubeconfig to proxy to the test server, sets EDITOR to invoke record_editor.sh, then opens a shell that lets you use `kubectl edit` normally * Adds test cases for the following scenarios: - [x] no-op edit (open and close without making changes) - [x] try to edit a missing object - [x] edit single item successfully - [x] edit list of items successfully - [x] edit a single item, submit with an error, re-edit, submit fixed successfully - [x] edit list of items, submit some with errors and some good, re-edit errors, submit fixed - [x] edit trying to change immutable things like name/version/kind, ensure preconditions prevent submission - [x] edit in "create mode" successfully (`kubectl create -f ... --edit`) - [x] edit in "create mode" introducing errors (`kubectl create -f ... --edit`) * Fixes a bug with edit printing errors to stdout (caught when testing stdout/stderr against expected output) Follow-ups: - [ ] clean up edit code path - [ ] switch edit to use unstructured objects - [ ] make edit fall back to jsonmerge for objects without registered go structs (TPR, unknown versions of pods, etc) - [ ] add tests: - [ ] edit TPR - [ ] edit mix of TPR and known objects - [ ] edit known object with extra field from server - [ ] edit known object with new version from server
This commit is contained in:
@@ -240,7 +240,7 @@ func runEdit(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args
|
||||
file: file,
|
||||
}
|
||||
containsError = true
|
||||
fmt.Fprintln(out, results.addError(errors.NewInvalid(api.Kind(""), "", field.ErrorList{field.Invalid(nil, "The edited file failed validation", fmt.Sprintf("%v", err))}), infos[0]))
|
||||
fmt.Fprintln(errOut, results.addError(errors.NewInvalid(api.Kind(""), "", field.ErrorList{field.Invalid(nil, "The edited file failed validation", fmt.Sprintf("%v", err))}), infos[0]))
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ func visitToPatch(
|
||||
results.version = defaultVersion
|
||||
patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch)
|
||||
if err != nil {
|
||||
fmt.Fprintln(out, results.addError(err, info))
|
||||
fmt.Fprintln(errOut, results.addError(err, info))
|
||||
return nil
|
||||
}
|
||||
info.Refresh(patched, true)
|
||||
|
Reference in New Issue
Block a user