Merge pull request #14793 from JanetKuo/e2e-kubectl-multi-resource

Auto commit by PR queue bot
This commit is contained in:
k8s-merge-robot 2015-10-02 08:48:25 -07:00
commit 41d1f889f6
6 changed files with 377 additions and 0 deletions

View File

@ -173,6 +173,7 @@ runTests() {
fi
id_field=".metadata.name"
labels_field=".metadata.labels"
annotations_field=".metadata.annotations"
service_selector_field=".spec.selector"
rc_replicas_field=".spec.replicas"
rc_status_replicas_field=".status.replicas"
@ -726,6 +727,110 @@ __EOF__
# Post-condition: no replication controller is running
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" ''
######################
# Multiple Resources #
######################
kube::log::status "Testing kubectl(${version}:multiple resources)"
# TODO: add test for types like ReplicationControllerList, ServiceList
### Create, get, describe, replace, label, annotate, and then delete service nginxsvc and replication controller my-nginx from YAML, separated by ---
# Pre-condition: no service (other than default kubernetes services) or replication controller is running
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:'
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" ''
# Command
kubectl create -f examples/https-nginx/nginx-app.yaml "${kube_flags[@]}"
# Post-condition: nginxsvc service is running
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:nginxsvc:'
# Post-condition: my-nginx rc is running
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'my-nginx:'
# Command
kubectl get -f examples/https-nginx/nginx-app.yaml "${kube_flags[@]}"
kubectl describe -f examples/https-nginx/nginx-app.yaml "${kube_flags[@]}"
# Command
kubectl replace -f hack/testdata/nginx-app-modify.yaml --force "${kube_flags[@]}"
# Post-condition: nginxsvc service and mock rc are replaced
kube::test::get_object_assert 'services nginxsvc' "{{${labels_field}.status}}" 'replaced'
kube::test::get_object_assert 'rc my-nginx' "{{${labels_field}.status}}" 'replaced'
# Command
kubectl label -f examples/https-nginx/nginx-app.yaml labeled=true "${kube_flags[@]}"
# Post-condition: nginxsvc service and my-nginx rc are labeled
kube::test::get_object_assert 'services nginxsvc' "{{${labels_field}.labeled}}" 'true'
kube::test::get_object_assert 'rc my-nginx' "{{${labels_field}.labeled}}" 'true'
# Command
kubectl annotate -f examples/https-nginx/nginx-app.yaml annotated=true "${kube_flags[@]}"
# Post-condition: nginxsvc service and my-nginx rc are annotated
kube::test::get_object_assert 'services nginxsvc' "{{${annotations_field}.annotated}}" 'true'
kube::test::get_object_assert 'rc my-nginx' "{{${annotations_field}.annotated}}" 'true'
# Cleanup service and rc
kubectl delete -f examples/https-nginx/nginx-app.yaml "${kube_flags[@]}"
### Create, get, describe, replace, label, annotate, and then delete service nginxsvc and replication controller my-nginx from JSON, with a List type
# Pre-condition: no service (other than default kubernetes services) or replication controller is running
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:'
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" ''
# Command
# TODO: remove --validate=false when PR "Add validate support for list kind #14726" is merged
kubectl create -f hack/testdata/multi-resource-list.json --validate=false "${kube_flags[@]}"
# Post-condition: mock service is running
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:mock:'
# Post-condition: mock rc is running
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'mock:'
# Command
# kubectl create -f hack/testdata/multi-resource.json "${kube_flags[@]}" # test fails here now
# TODO: test get when PR "Fix get with List #14888" is merged
# kubectl get -f hack/testdata/multi-resource-list.json "${kube_flags[@]}"
kubectl describe -f hack/testdata/multi-resource-list.json "${kube_flags[@]}"
# Command
# TODO: remove --validate=false when PR "Add validate support for list kind #14726" is merged
kubectl replace -f hack/testdata/multi-resource-list-modify.json --force --validate=false "${kube_flags[@]}"
# Post-condition: mock service and mock rc are replaced
kube::test::get_object_assert 'services mock' "{{${labels_field}.status}}" 'replaced'
kube::test::get_object_assert 'rc mock' "{{${labels_field}.status}}" 'replaced'
# Command
kubectl label -f hack/testdata/multi-resource-list.json labeled=true "${kube_flags[@]}"
# Post-condition: mock service and mock rc are labeled
kube::test::get_object_assert 'services mock' "{{${labels_field}.labeled}}" 'true'
kube::test::get_object_assert 'rc mock' "{{${labels_field}.labeled}}" 'true'
# Command
kubectl annotate -f hack/testdata/multi-resource-list.json annotated=true "${kube_flags[@]}"
# Post-condition: mock service and mock rc are annotated
kube::test::get_object_assert 'services mock' "{{${annotations_field}.annotated}}" 'true'
kube::test::get_object_assert 'rc mock' "{{${annotations_field}.annotated}}" 'true'
# Cleanup services and rc
kubectl delete -f hack/testdata/multi-resource-list.json "${kube_flags[@]}"
### Create, get, describe, replace, label, annotate, and then delete service nginxsvc and replication controller my-nginx from JSON, with JSON object concatenation
# Pre-condition: no service (other than default kubernetes services) or replication controller is running
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:'
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" ''
# Command
kubectl create -f hack/testdata/multi-resource.json "${kube_flags[@]}"
# Post-condition: mock service is running
kube::test::get_object_assert services "{{range.items}}{{$id_field}}:{{end}}" 'kubernetes:mock:'
# Post-condition: mock rc is running
kube::test::get_object_assert rc "{{range.items}}{{$id_field}}:{{end}}" 'mock:'
# Command
kubectl get -f hack/testdata/multi-resource.json "${kube_flags[@]}"
kubectl describe -f hack/testdata/multi-resource.json "${kube_flags[@]}"
# Command
kubectl replace -f hack/testdata/multi-resource-modify.json --force "${kube_flags[@]}"
# Post-condition: mock service and mock rc are replaced
kube::test::get_object_assert 'services mock' "{{${labels_field}.status}}" 'replaced'
kube::test::get_object_assert 'rc mock' "{{${labels_field}.status}}" 'replaced'
# Command
kubectl label -f hack/testdata/multi-resource.json labeled=true "${kube_flags[@]}"
# Post-condition: mock service and mock rc are labeled
kube::test::get_object_assert 'services mock' "{{${labels_field}.labeled}}" 'true'
kube::test::get_object_assert 'rc mock' "{{${labels_field}.labeled}}" 'true'
# Command
kubectl annotate -f hack/testdata/multi-resource.json annotated=true "${kube_flags[@]}"
# Post-condition: mock service and mock rc are annotated
kube::test::get_object_assert 'services mock' "{{${annotations_field}.annotated}}" 'true'
kube::test::get_object_assert 'rc mock' "{{${annotations_field}.annotated}}" 'true'
# Cleanup services and rc
kubectl delete -f hack/testdata/multi-resource.json "${kube_flags[@]}"
######################
# Persistent Volumes #
######################

View File

@ -0,0 +1,61 @@
{
"kind":"List",
"apiVersion":"v1",
"items":[
{
"kind":"Service",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock",
"status":"replaced"
}
},
"spec":{
"ports": [{
"protocol": "TCP",
"port": 99,
"targetPort": 9949
}],
"selector":{
"app":"mock"
}
}
},
{
"kind":"ReplicationController",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock",
"status":"replaced"
}
},
"spec":{
"replicas":1,
"selector":{
"app":"mock"
},
"template":{
"metadata":{
"labels":{
"app":"mock"
}
},
"spec":{
"containers":[{
"name": "mock-container",
"image": "kubernetes/pause",
"ports":[{
"containerPort":9949,
"protocol":"TCP"
}]
}]
}
}
}
}
]
}

59
hack/testdata/multi-resource-list.json vendored Normal file
View File

@ -0,0 +1,59 @@
{
"kind":"List",
"apiVersion":"v1",
"items":[
{
"kind":"Service",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock"
}
},
"spec":{
"ports": [{
"protocol": "TCP",
"port": 99,
"targetPort": 9949
}],
"selector":{
"app":"mock"
}
}
},
{
"kind":"ReplicationController",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock"
}
},
"spec":{
"replicas":1,
"selector":{
"app":"mock"
},
"template":{
"metadata":{
"labels":{
"app":"mock"
}
},
"spec":{
"containers":[{
"name": "mock-container",
"image": "kubernetes/pause",
"ports":[{
"containerPort":9949,
"protocol":"TCP"
}]
}]
}
}
}
}
]
}

View File

@ -0,0 +1,55 @@
{
"kind":"Service",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock",
"status":"replaced"
}
},
"spec":{
"ports": [{
"protocol": "TCP",
"port": 99,
"targetPort": 9949
}],
"selector":{
"app":"mock"
}
}
}
{
"kind":"ReplicationController",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock",
"status":"replaced"
}
},
"spec":{
"replicas":1,
"selector":{
"app":"mock"
},
"template":{
"metadata":{
"labels":{
"app":"mock"
}
},
"spec":{
"containers":[{
"name": "mock-container",
"image": "kubernetes/pause",
"ports":[{
"containerPort":9949,
"protocol":"TCP"
}]
}]
}
}
}
}

53
hack/testdata/multi-resource.json vendored Normal file
View File

@ -0,0 +1,53 @@
{
"kind":"Service",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock"
}
},
"spec":{
"ports": [{
"protocol": "TCP",
"port": 99,
"targetPort": 9949
}],
"selector":{
"app":"mock"
}
}
}
{
"kind":"ReplicationController",
"apiVersion":"v1",
"metadata":{
"name":"mock",
"labels":{
"app":"mock"
}
},
"spec":{
"replicas":1,
"selector":{
"app":"mock"
},
"template":{
"metadata":{
"labels":{
"app":"mock"
}
},
"spec":{
"containers":[{
"name": "mock-container",
"image": "kubernetes/pause",
"ports":[{
"containerPort":9949,
"protocol":"TCP"
}]
}]
}
}
}
}

44
hack/testdata/nginx-app-modify.yaml vendored Normal file
View File

@ -0,0 +1,44 @@
apiVersion: v1
kind: Service
metadata:
name: nginxsvc
labels:
app: nginx
status: replaced
spec:
type: NodePort
ports:
- port: 80
protocol: TCP
name: http
- port: 443
protocol: TCP
name: https
selector:
app: nginx
---
apiVersion: v1
kind: ReplicationController
metadata:
name: my-nginx
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
status: replaced
spec:
volumes:
- name: secret-volume
secret:
secretName: nginxsecret
containers:
- name: nginxhttps
image: bprashanth/nginxhttps:1.0
ports:
- containerPort: 443
- containerPort: 80
volumeMounts:
- mountPath: /etc/nginx/ssl
name: secret-volume