diff --git a/pkg/kubectl/cmd/edit_test.go b/pkg/kubectl/cmd/edit_test.go index d348d00fba..eb073fa2c8 100644 --- a/pkg/kubectl/cmd/edit_test.go +++ b/pkg/kubectl/cmd/edit_test.go @@ -226,6 +226,7 @@ func TestEdit(t *testing.T) { tf.Namespace = testcase.Namespace } tf.ClientConfig = defaultClientConfig() + tf.Command = "edit test cmd invocation" buf := bytes.NewBuffer([]byte{}) errBuf := bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/0.request b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/0.request new file mode 100755 index 0000000000..e69de29bb2 diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/0.response b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/0.response new file mode 100755 index 0000000000..4a3492064a --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/0.response @@ -0,0 +1,19 @@ +{ + "kind": "ConfigMap", + "apiVersion": "v1", + "metadata": { + "name": "cm1", + "namespace": "edit-test", + "selfLink": "/api/v1/namespaces/edit-test/configmaps/cm1", + "uid": "b09bffab-e9d7-11e6-8c3b-acbc32c1ca87", + "resourceVersion": "1414", + "creationTimestamp": "2017-02-03T06:12:07Z", + "annotations":{"kubernetes.io/change-cause":"original creating command a"} + }, + "data": { + "baz": "qux", + "foo": "changed-value", + "new-data": "new-value", + "new-data2": "new-value" + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/1.request b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/1.request new file mode 100755 index 0000000000..e69de29bb2 diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/1.response b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/1.response new file mode 100755 index 0000000000..479dcaebb3 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/1.response @@ -0,0 +1,33 @@ +{ + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "svc1", + "namespace": "edit-test", + "selfLink": "/api/v1/namespaces/edit-test/services/svc1", + "uid": "9bec82be-e9d7-11e6-8c3b-acbc32c1ca87", + "resourceVersion": "1064", + "creationTimestamp": "2017-02-03T06:11:32Z", + "annotations":{"kubernetes.io/change-cause":"original creating command b"}, + "labels": { + "app": "svc1", + "new-label": "foo" + } + }, + "spec": { + "ports": [ + { + "name": "80", + "protocol": "TCP", + "port": 81, + "targetPort": 81 + } + ], + "clusterIP": "10.0.0.248", + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/2.edited b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/2.edited new file mode 100755 index 0000000000..d9cf22bd03 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/2.edited @@ -0,0 +1,51 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +apiVersion: v1 +items: +- apiVersion: v1 + data: + baz: qux + foo: changed-value + new-data: new-value + new-data2: new-value + new-data3: newivalue + kind: ConfigMap + metadata: + annotations: + kubernetes.io/change-cause: original creating command a + creationTimestamp: 2017-02-03T06:12:07Z + name: cm1 + namespace: edit-test + resourceVersion: "1414" + selfLink: /api/v1/namespaces/edit-test/configmaps/cm1 + uid: b09bffab-e9d7-11e6-8c3b-acbc32c1ca87 +- apiVersion: v1 + kind: Service + metadata: + annotations: + kubernetes.io/change-cause: original creating command b + creationTimestamp: 2017-02-03T06:11:32Z + labels: + app: svc1 + new-label: foo + new-label2: foo2 + name: svc1 + namespace: edit-test + resourceVersion: "1064" + selfLink: /api/v1/namespaces/edit-test/services/svc1 + uid: 9bec82be-e9d7-11e6-8c3b-acbc32c1ca87 + spec: + clusterIP: 10.0.0.248 + ports: + - name: "80" + port: 82 + protocol: TCP + targetPort: 81 + sessionAffinity: None + type: ClusterIP + status: + loadBalancer: {} +kind: List +metadata: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/2.original b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/2.original new file mode 100755 index 0000000000..bbc7738e91 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/2.original @@ -0,0 +1,49 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +apiVersion: v1 +items: +- apiVersion: v1 + data: + baz: qux + foo: changed-value + new-data: new-value + new-data2: new-value + kind: ConfigMap + metadata: + annotations: + kubernetes.io/change-cause: original creating command a + creationTimestamp: 2017-02-03T06:12:07Z + name: cm1 + namespace: edit-test + resourceVersion: "1414" + selfLink: /api/v1/namespaces/edit-test/configmaps/cm1 + uid: b09bffab-e9d7-11e6-8c3b-acbc32c1ca87 +- apiVersion: v1 + kind: Service + metadata: + annotations: + kubernetes.io/change-cause: original creating command b + creationTimestamp: 2017-02-03T06:11:32Z + labels: + app: svc1 + new-label: foo + name: svc1 + namespace: edit-test + resourceVersion: "1064" + selfLink: /api/v1/namespaces/edit-test/services/svc1 + uid: 9bec82be-e9d7-11e6-8c3b-acbc32c1ca87 + spec: + clusterIP: 10.0.0.248 + ports: + - name: "80" + port: 81 + protocol: TCP + targetPort: 81 + sessionAffinity: None + type: ClusterIP + status: + loadBalancer: {} +kind: List +metadata: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/3.request b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/3.request new file mode 100755 index 0000000000..c609f20a95 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/3.request @@ -0,0 +1,10 @@ +{ + "data": { + "new-data3": "newivalue" + }, + "metadata": { + "annotations": { + "kubernetes.io/change-cause": "edit test cmd invocation" + } + } +} \ No newline at end of file diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/3.response b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/3.response new file mode 100755 index 0000000000..0292f244de --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/3.response @@ -0,0 +1,20 @@ +{ + "kind": "ConfigMap", + "apiVersion": "v1", + "metadata": { + "name": "cm1", + "namespace": "edit-test", + "selfLink": "/api/v1/namespaces/edit-test/configmaps/cm1", + "uid": "b09bffab-e9d7-11e6-8c3b-acbc32c1ca87", + "resourceVersion": "1465", + "creationTimestamp": "2017-02-03T06:12:07Z", + "annotations":{"kubernetes.io/change-cause":"edit test cmd invocation"} + }, + "data": { + "baz": "qux", + "foo": "changed-value", + "new-data": "new-value", + "new-data2": "new-value", + "new-data3": "newivalue" + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/4.request b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/4.request new file mode 100755 index 0000000000..dad8e1fd0d --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/4.request @@ -0,0 +1,24 @@ +{ + "metadata": { + "annotations": { + "kubernetes.io/change-cause": "edit test cmd invocation" + }, + "labels": { + "new-label2": "foo2" + } + }, + "spec": { + "ports": [ + { + "$patch": "delete", + "port": 81 + }, + { + "name": "80", + "port": 82, + "protocol": "TCP", + "targetPort": 81 + } + ] + } +} \ No newline at end of file diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/4.response b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/4.response new file mode 100755 index 0000000000..64b4ac80a1 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/4.response @@ -0,0 +1,34 @@ +{ + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "svc1", + "namespace": "edit-test", + "selfLink": "/api/v1/namespaces/edit-test/services/svc1", + "uid": "9bec82be-e9d7-11e6-8c3b-acbc32c1ca87", + "resourceVersion": "1466", + "creationTimestamp": "2017-02-03T06:11:32Z", + "annotations":{"kubernetes.io/change-cause":"edit test cmd invocation"}, + "labels": { + "app": "svc1", + "new-label": "foo", + "new-label2": "foo2" + } + }, + "spec": { + "ports": [ + { + "name": "80", + "protocol": "TCP", + "port": 82, + "targetPort": 81 + } + ], + "clusterIP": "10.0.0.248", + "type": "ClusterIP", + "sessionAffinity": "None" + }, + "status": { + "loadBalancer": {} + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-list-record/test.yaml b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/test.yaml new file mode 100755 index 0000000000..1ee9e35faf --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-list-record/test.yaml @@ -0,0 +1,40 @@ +description: add a testcase description +mode: edit +args: +- configmaps/cm1 +- service/svc1 +namespace: "edit-test" +expectedStdout: +- configmap "cm1" edited +- service "svc1" edited +expectedExitCode: 0 +steps: +- type: request + expectedMethod: GET + expectedPath: /api/v1/namespaces/edit-test/configmaps/cm1 + expectedInput: 0.request + resultingStatusCode: 200 + resultingOutput: 0.response +- type: request + expectedMethod: GET + expectedPath: /api/v1/namespaces/edit-test/services/svc1 + expectedInput: 1.request + resultingStatusCode: 200 + resultingOutput: 1.response +- type: edit + expectedInput: 2.original + resultingOutput: 2.edited +- type: request + expectedMethod: PATCH + expectedPath: /api/v1/namespaces/edit-test/configmaps/cm1 + expectedContentType: application/strategic-merge-patch+json + expectedInput: 3.request + resultingStatusCode: 200 + resultingOutput: 3.response +- type: request + expectedMethod: PATCH + expectedPath: /api/v1/namespaces/edit-test/services/svc1 + expectedContentType: application/strategic-merge-patch+json + expectedInput: 4.request + resultingStatusCode: 200 + resultingOutput: 4.response diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/0.request b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/0.request new file mode 100755 index 0000000000..e69de29bb2 diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/0.response b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/0.response new file mode 100755 index 0000000000..6a6a6ac701 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/0.response @@ -0,0 +1,32 @@ +{ + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "kubernetes", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/services/kubernetes", + "uid": "6a8e8829-f15f-11e6-b041-acbc32c1ca87", + "resourceVersion": "8", + "creationTimestamp": "2017-02-12T20:11:19Z", + "labels": { + "component": "apiserver", + "provider": "kubernetes" + } + }, + "spec": { + "ports": [ + { + "name": "https", + "protocol": "TCP", + "port": 443, + "targetPort": 443 + } + ], + "clusterIP": "10.0.0.1", + "type": "ClusterIP", + "sessionAffinity": "ClientIP" + }, + "status": { + "loadBalancer": {} + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/1.edited b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/1.edited new file mode 100755 index 0000000000..6820febdab --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/1.edited @@ -0,0 +1,27 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec: + clusterIP: 10.0.0.1.1 + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/1.original b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/1.original new file mode 100755 index 0000000000..12b5687071 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/1.original @@ -0,0 +1,27 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec: + clusterIP: 10.0.0.1 + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/2.request b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/2.request new file mode 100755 index 0000000000..d828ee85fa --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/2.request @@ -0,0 +1,5 @@ +{ + "spec": { + "clusterIP": "10.0.0.1.1" + } +} \ No newline at end of file diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/2.response b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/2.response new file mode 100755 index 0000000000..29cfaa0a4b --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/2.response @@ -0,0 +1,25 @@ +{ + "kind": "Status", + "apiVersion": "v1", + "metadata": {}, + "status": "Failure", + "message": "Service \"kubernetes\" is invalid: [spec.clusterIP: Invalid value: \"10.0.0.1.1\": field is immutable, spec.clusterIP: Invalid value: \"10.0.0.1.1\": must be empty, 'None', or a valid IP address]", + "reason": "Invalid", + "details": { + "name": "kubernetes", + "kind": "Service", + "causes": [ + { + "reason": "FieldValueInvalid", + "message": "Invalid value: \"10.0.0.1.1\": field is immutable", + "field": "spec.clusterIP" + }, + { + "reason": "FieldValueInvalid", + "message": "Invalid value: \"10.0.0.1.1\": must be empty, 'None', or a valid IP address", + "field": "spec.clusterIP" + } + ] + }, + "code": 422 +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/3.edited b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/3.edited new file mode 100755 index 0000000000..545eadd753 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/3.edited @@ -0,0 +1,31 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +# services "kubernetes" was not valid: +# * spec.clusterIP: Invalid value: "10.0.0.1.1": field is immutable +# * spec.clusterIP: Invalid value: "10.0.0.1.1": must be empty, 'None', or a valid IP address +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec: + clusterIP: 10.0.0.1.1 + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/3.original b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/3.original new file mode 100755 index 0000000000..545eadd753 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/3.original @@ -0,0 +1,31 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +# services "kubernetes" was not valid: +# * spec.clusterIP: Invalid value: "10.0.0.1.1": field is immutable +# * spec.clusterIP: Invalid value: "10.0.0.1.1": must be empty, 'None', or a valid IP address +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec: + clusterIP: 10.0.0.1.1 + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/test.yaml b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/test.yaml new file mode 100755 index 0000000000..a4ef37f052 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-repeat-error/test.yaml @@ -0,0 +1,30 @@ +description: add a testcase description +mode: edit +args: +- service/kubernetes +namespace: default +expectedStderr: +- "services \"kubernetes\" is invalid" +- A copy of your changes has been stored +- Edit cancelled, no valid changes were saved +expectedExitCode: 1 +steps: +- type: request + expectedMethod: GET + expectedPath: /api/v1/namespaces/default/services/kubernetes + expectedInput: 0.request + resultingStatusCode: 200 + resultingOutput: 0.response +- type: edit + expectedInput: 1.original + resultingOutput: 1.edited +- type: request + expectedMethod: PATCH + expectedPath: /api/v1/namespaces/default/services/kubernetes + expectedContentType: application/strategic-merge-patch+json + expectedInput: 2.request + resultingStatusCode: 422 + resultingOutput: 2.response +- type: edit + expectedInput: 3.original + resultingOutput: 3.edited diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/0.request b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/0.request new file mode 100755 index 0000000000..e69de29bb2 diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/0.response b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/0.response new file mode 100755 index 0000000000..6a6a6ac701 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/0.response @@ -0,0 +1,32 @@ +{ + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "kubernetes", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/services/kubernetes", + "uid": "6a8e8829-f15f-11e6-b041-acbc32c1ca87", + "resourceVersion": "8", + "creationTimestamp": "2017-02-12T20:11:19Z", + "labels": { + "component": "apiserver", + "provider": "kubernetes" + } + }, + "spec": { + "ports": [ + { + "name": "https", + "protocol": "TCP", + "port": 443, + "targetPort": 443 + } + ], + "clusterIP": "10.0.0.1", + "type": "ClusterIP", + "sessionAffinity": "ClientIP" + }, + "status": { + "loadBalancer": {} + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/1.edited b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/1.edited new file mode 100755 index 0000000000..f6de9aefd9 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/1.edited @@ -0,0 +1,27 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec + clusterIP: 10.0.0.1 + ports: + name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: { diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/1.original b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/1.original new file mode 100755 index 0000000000..12b5687071 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/1.original @@ -0,0 +1,27 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec: + clusterIP: 10.0.0.1 + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/2.edited b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/2.edited new file mode 100755 index 0000000000..c56febe9f8 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/2.edited @@ -0,0 +1,30 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +# The edited file had a syntax error: unable to decode "edited-file": yaml: line 17: could not find expected ':' +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + new-label: foo + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec: + clusterIP: 10.0.0.1 + ports: + - name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: {} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/2.original b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/2.original new file mode 100755 index 0000000000..ea21819b1f --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/2.original @@ -0,0 +1,29 @@ +# Please edit the object below. Lines beginning with a '#' will be ignored, +# and an empty file will abort the edit. If an error occurs while saving this file will be +# reopened with the relevant failures. +# +# The edited file had a syntax error: unable to decode "edited-file": yaml: line 17: could not find expected ':' +# +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: 2017-02-12T20:11:19Z + labels: + component: apiserver + provider: kubernetes + name: kubernetes + namespace: default + resourceVersion: "8" + selfLink: /api/v1/namespaces/default/services/kubernetes + uid: 6a8e8829-f15f-11e6-b041-acbc32c1ca87 +spec + clusterIP: 10.0.0.1 + ports: + name: https + port: 443 + protocol: TCP + targetPort: 443 + sessionAffinity: ClientIP + type: ClusterIP +status: + loadBalancer: { diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/3.request b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/3.request new file mode 100755 index 0000000000..f596ebf707 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/3.request @@ -0,0 +1,7 @@ +{ + "metadata": { + "labels": { + "new-label": "foo" + } + } +} \ No newline at end of file diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/3.response b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/3.response new file mode 100755 index 0000000000..e2d6942769 --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/3.response @@ -0,0 +1,33 @@ +{ + "kind": "Service", + "apiVersion": "v1", + "metadata": { + "name": "kubernetes", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/services/kubernetes", + "uid": "6a8e8829-f15f-11e6-b041-acbc32c1ca87", + "resourceVersion": "1174", + "creationTimestamp": "2017-02-12T20:11:19Z", + "labels": { + "component": "apiserver", + "new-label": "foo", + "provider": "kubernetes" + } + }, + "spec": { + "ports": [ + { + "name": "https", + "protocol": "TCP", + "port": 443, + "targetPort": 443 + } + ], + "clusterIP": "10.0.0.1", + "type": "ClusterIP", + "sessionAffinity": "ClientIP" + }, + "status": { + "loadBalancer": {} + } +} diff --git a/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/test.yaml b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/test.yaml new file mode 100755 index 0000000000..a37c25139c --- /dev/null +++ b/pkg/kubectl/cmd/testdata/edit/testcase-syntax-error/test.yaml @@ -0,0 +1,28 @@ +description: edit with a syntax error, then re-edit and save +mode: edit +args: +- service/kubernetes +namespace: default +expectedStdout: +- "service \"kubernetes\" edited" +expectedExitCode: 0 +steps: +- type: request + expectedMethod: GET + expectedPath: /api/v1/namespaces/default/services/kubernetes + expectedInput: 0.request + resultingStatusCode: 200 + resultingOutput: 0.response +- type: edit + expectedInput: 1.original + resultingOutput: 1.edited +- type: edit + expectedInput: 2.original + resultingOutput: 2.edited +- type: request + expectedMethod: PATCH + expectedPath: /api/v1/namespaces/default/services/kubernetes + expectedContentType: application/strategic-merge-patch+json + expectedInput: 3.request + resultingStatusCode: 200 + resultingOutput: 3.response diff --git a/pkg/kubectl/cmd/testing/fake.go b/pkg/kubectl/cmd/testing/fake.go index 8cf1a9fb6f..7192e65eba 100644 --- a/pkg/kubectl/cmd/testing/fake.go +++ b/pkg/kubectl/cmd/testing/fake.go @@ -216,6 +216,7 @@ type TestFactory struct { Namespace string ClientConfig *restclient.Config Err error + Command string ClientForMappingFunc func(mapping *meta.RESTMapping) (resource.RESTClient, error) UnstructuredClientForMappingFunc func(mapping *meta.RESTMapping) (resource.RESTClient, error) @@ -431,7 +432,7 @@ func (f *FakeFactory) PrintObjectSpecificMessage(obj runtime.Object, out io.Writ } func (f *FakeFactory) Command() string { - return "" + return f.tf.Command } func (f *FakeFactory) BindFlags(flags *pflag.FlagSet) { @@ -630,6 +631,10 @@ func (f *fakeAPIFactory) DefaultNamespace() (string, bool, error) { return f.tf.Namespace, false, f.tf.Err } +func (f *fakeAPIFactory) Command() string { + return f.tf.Command +} + func (f *fakeAPIFactory) Generators(cmdName string) map[string]kubectl.Generator { return cmdutil.DefaultGenerators(cmdName) }