Commit 3fbfeccc authored by Zach Loafman's avatar Zach Loafman

Merge pull request #4163 from rrati/e2e-services-4162

E2e services 4162
parents 079dd4db 70237e9c
/*
Copyright 2014 Google Inc. All rights reserved.
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 (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/golang/glog"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
func TestKubernetesROService(c *client.Client) bool {
svc := api.ServiceList{}
err := c.Get().
Namespace("default").
AbsPath("/api/v1beta1/proxy/services/kubernetes-ro/api/v1beta1/services").
Do().
Into(&svc)
if err != nil {
glog.Errorf("unexpected error listing services using ro service: %v", err)
return false
}
var foundRW, foundRO bool
for i := range svc.Items {
if svc.Items[i].Name == "kubernetes" {
foundRW = true
}
if svc.Items[i].Name == "kubernetes-ro" {
foundRO = true
}
}
if !foundRW {
glog.Error("no RW service found")
}
if !foundRO {
glog.Error("no RO service found")
}
if !foundRW || !foundRO {
return false
}
return true
}
var _ = Describe("TestKubernetesROService", func() {
It("should pass", func() {
// TODO: Instead of OrDie, client should Fail the test if there's a problem.
// In general tests should Fail() instead of glog.Fatalf().
Expect(TestKubernetesROService(loadClientOrDie())).To(BeTrue())
})
})
...@@ -23,17 +23,22 @@ import ( ...@@ -23,17 +23,22 @@ import (
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/golang/glog"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
) )
// TestClusterDNS checks that cluster DNS works. var _ = Describe("Services", func() {
func TestClusterDNS(c *client.Client) bool { var c *client.Client
BeforeEach(func() {
c = loadClientOrDie()
})
It("should provide DNS for the cluster", func() {
if testContext.provider == "vagrant" { if testContext.provider == "vagrant" {
glog.Infof("Skipping test which is broken for vagrant (See https://github.com/GoogleCloudPlatform/kubernetes/issues/3580)") By("Skipping test which is broken for vagrant (See https://github.com/GoogleCloudPlatform/kubernetes/issues/3580)")
return true return
} }
podClient := c.Pods(api.NamespaceDefault) podClient := c.Pods(api.NamespaceDefault)
...@@ -55,6 +60,7 @@ func TestClusterDNS(c *client.Client) bool { ...@@ -55,6 +60,7 @@ func TestClusterDNS(c *client.Client) bool {
probeCmd += "sleep 1; done" probeCmd += "sleep 1; done"
// Run a pod which probes DNS and exposes the results by HTTP. // Run a pod which probes DNS and exposes the results by HTTP.
By("creating a pod to probe DNS")
pod := &api.Pod{ pod := &api.Pod{
TypeMeta: api.TypeMeta{ TypeMeta: api.TypeMeta{
Kind: "Pod", Kind: "Pod",
...@@ -97,21 +103,29 @@ func TestClusterDNS(c *client.Client) bool { ...@@ -97,21 +103,29 @@ func TestClusterDNS(c *client.Client) bool {
}, },
}, },
} }
By("submitting the pod to kuberenetes")
_, err := podClient.Create(pod) _, err := podClient.Create(pod)
if err != nil { if err != nil {
glog.Errorf("Failed to create %s pod: %v", pod.Name, err) Fail(fmt.Sprintf("Failed to create %s pod: %v", pod.Name, err))
return false
} }
defer podClient.Delete(pod.Name) defer func() {
By("deleting the pod")
defer GinkgoRecover()
podClient.Delete(pod.Name)
}()
By("waiting for the pod to start running")
waitForPodRunning(c, pod.Name) waitForPodRunning(c, pod.Name)
By("retrieving the pod")
pod, err = podClient.Get(pod.Name) pod, err = podClient.Get(pod.Name)
if err != nil { if err != nil {
glog.Errorf("Failed to get pod %s: %v", pod.Name, err) Fail(fmt.Sprintf("Failed to get pod %s: %v", pod.Name, err))
return false
} }
// Try to find results for each expected name. // Try to find results for each expected name.
By("looking for the results for each expected name")
var failed []string var failed []string
for try := 1; try < 100; try++ { for try := 1; try < 100; try++ {
failed = []string{} failed = []string{}
...@@ -125,30 +139,42 @@ func TestClusterDNS(c *client.Client) bool { ...@@ -125,30 +139,42 @@ func TestClusterDNS(c *client.Client) bool {
Do().Raw() Do().Raw()
if err != nil { if err != nil {
failed = append(failed, name) failed = append(failed, name)
glog.V(4).Infof("Lookup using %s for %s failed: %v", pod.Name, name, err) fmt.Printf("Lookup using %s for %s failed: %v\n", pod.Name, name, err)
} }
} }
if len(failed) == 0 { if len(failed) == 0 {
break break
} }
glog.Infof("lookups using %s failed for: %v", pod.Name, failed) fmt.Printf("lookups using %s failed for: %v\n", pod.Name, failed)
time.Sleep(10 * time.Second) time.Sleep(10 * time.Second)
} }
if len(failed) != 0 { Expect(len(failed)).To(Equal(0))
glog.Errorf("DNS using %s failed for: %v", pod.Name, failed)
return false
}
// TODO: probe from the host, too. // TODO: probe from the host, too.
glog.Infof("DNS probes using %s succeeded", pod.Name) fmt.Printf("DNS probes using %s succeeded\n", pod.Name)
return true })
}
var _ = Describe("TestClusterDNS", func() { It("should provide RW and RO services", func() {
It("should pass", func() { svc := api.ServiceList{}
// TODO: Instead of OrDie, client should Fail the test if there's a problem. err := c.Get().
// In general tests should Fail() instead of glog.Fatalf(). Namespace("default").
Expect(TestClusterDNS(loadClientOrDie())).To(BeTrue()) AbsPath("/api/v1beta1/proxy/services/kubernetes-ro/api/v1beta1/services").
Do().
Into(&svc)
if err != nil {
Fail(fmt.Sprintf("unexpected error listing services using ro service: %v", err))
}
var foundRW, foundRO bool
for i := range svc.Items {
if svc.Items[i].Name == "kubernetes" {
foundRW = true
}
if svc.Items[i].Name == "kubernetes-ro" {
foundRO = true
}
}
Expect(foundRW).To(Equal(true))
Expect(foundRO).To(Equal(true))
}) })
}) })
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment