123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /*
- Copyright 2015 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package e2e
- import (
- "fmt"
- "time"
- "k8s.io/kubernetes/pkg/api"
- "k8s.io/kubernetes/pkg/labels"
- "k8s.io/kubernetes/pkg/util/uuid"
- "k8s.io/kubernetes/pkg/util/wait"
- "k8s.io/kubernetes/test/e2e/framework"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
- )
- var _ = framework.KubeDescribe("ReplicationController", func() {
- f := framework.NewDefaultFramework("replication-controller")
- It("should serve a basic image on each replica with a public image [Conformance]", func() {
- ServeImageOrFail(f, "basic", "gcr.io/google_containers/serve_hostname:v1.4")
- })
- It("should serve a basic image on each replica with a private image", func() {
- // requires private images
- framework.SkipUnlessProviderIs("gce", "gke")
- ServeImageOrFail(f, "private", "b.gcr.io/k8s_authenticated_test/serve_hostname:v1.4")
- })
- })
- // A basic test to check the deployment of an image using
- // a replication controller. The image serves its hostname
- // which is checked for each replica.
- func ServeImageOrFail(f *framework.Framework, test string, image string) {
- name := "my-hostname-" + test + "-" + string(uuid.NewUUID())
- replicas := int32(2)
- // Create a replication controller for a service
- // that serves its hostname.
- // The source for the Docker containter kubernetes/serve_hostname is
- // in contrib/for-demos/serve_hostname
- By(fmt.Sprintf("Creating replication controller %s", name))
- controller, err := f.Client.ReplicationControllers(f.Namespace.Name).Create(&api.ReplicationController{
- ObjectMeta: api.ObjectMeta{
- Name: name,
- },
- Spec: api.ReplicationControllerSpec{
- Replicas: replicas,
- Selector: map[string]string{
- "name": name,
- },
- Template: &api.PodTemplateSpec{
- ObjectMeta: api.ObjectMeta{
- Labels: map[string]string{"name": name},
- },
- Spec: api.PodSpec{
- Containers: []api.Container{
- {
- Name: name,
- Image: image,
- Ports: []api.ContainerPort{{ContainerPort: 9376}},
- },
- },
- },
- },
- },
- })
- Expect(err).NotTo(HaveOccurred())
- // Cleanup the replication controller when we are done.
- defer func() {
- // Resize the replication controller to zero to get rid of pods.
- if err := framework.DeleteRCAndPods(f.Client, f.Namespace.Name, controller.Name); err != nil {
- framework.Logf("Failed to cleanup replication controller %v: %v.", controller.Name, err)
- }
- }()
- // List the pods, making sure we observe all the replicas.
- label := labels.SelectorFromSet(labels.Set(map[string]string{"name": name}))
- pods, err := framework.PodsCreated(f.Client, f.Namespace.Name, name, replicas)
- By("Ensuring each pod is running")
- // Wait for the pods to enter the running state. Waiting loops until the pods
- // are running so non-running pods cause a timeout for this test.
- for _, pod := range pods.Items {
- if pod.DeletionTimestamp != nil {
- continue
- }
- err = f.WaitForPodRunning(pod.Name)
- Expect(err).NotTo(HaveOccurred())
- }
- // Verify that something is listening.
- By("Trying to dial each unique pod")
- retryTimeout := 2 * time.Minute
- retryInterval := 5 * time.Second
- err = wait.Poll(retryInterval, retryTimeout, framework.PodProxyResponseChecker(f.Client, f.Namespace.Name, label, name, true, pods).CheckAllResponses)
- if err != nil {
- framework.Failf("Did not get expected responses within the timeout period of %.2f seconds.", retryTimeout.Seconds())
- }
- }
|