mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 01:06:27 +00:00
Merge pull request #1559 from brendandburns/fix
Add an integration test for services.
This commit is contained in:
commit
bd7b4192bc
@ -180,6 +180,23 @@ func podsOnMinions(c *client.Client, pods api.PodList) wait.ConditionFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func endpointsSet(c *client.Client, ctx api.Context, serviceID string, endpointCount int) wait.ConditionFunc {
|
||||||
|
return func() (bool, error) {
|
||||||
|
endpoints, err := c.GetEndpoints(ctx, serviceID)
|
||||||
|
if err != nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return len(endpoints.Endpoints) == endpointCount, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func podExists(c *client.Client, ctx api.Context, podID string) wait.ConditionFunc {
|
||||||
|
return func() (bool, error) {
|
||||||
|
_, err := c.GetPod(ctx, podID)
|
||||||
|
return err == nil, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func runReplicationControllerTest(c *client.Client) {
|
func runReplicationControllerTest(c *client.Client) {
|
||||||
ctx := api.NewDefaultContext()
|
ctx := api.NewDefaultContext()
|
||||||
data, err := ioutil.ReadFile("api/examples/controller.json")
|
data, err := ioutil.ReadFile("api/examples/controller.json")
|
||||||
@ -289,6 +306,55 @@ func runAtomicPutTest(c *client.Client) {
|
|||||||
glog.Info("Atomic PUTs work.")
|
glog.Info("Atomic PUTs work.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func runServiceTest(client *client.Client) {
|
||||||
|
ctx := api.NewDefaultContext()
|
||||||
|
pod := api.Pod{
|
||||||
|
JSONBase: api.JSONBase{ID: "foo"},
|
||||||
|
DesiredState: api.PodState{
|
||||||
|
Manifest: api.ContainerManifest{
|
||||||
|
Version: "v1beta1",
|
||||||
|
Containers: []api.Container{
|
||||||
|
{
|
||||||
|
Name: "c1",
|
||||||
|
Image: "foo",
|
||||||
|
Ports: []api.Port{
|
||||||
|
{ContainerPort: 1234},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
CurrentState: api.PodState{
|
||||||
|
PodIP: "1.2.3.4",
|
||||||
|
},
|
||||||
|
Labels: map[string]string{
|
||||||
|
"name": "thisisalonglabel",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
_, err := client.CreatePod(ctx, &pod)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalf("Failed to create pod: %v, %v", pod, err)
|
||||||
|
}
|
||||||
|
if err := wait.Poll(time.Second, time.Second*20, podExists(client, ctx, pod.ID)); err != nil {
|
||||||
|
glog.Fatalf("FAILED: pod never started running %v", err)
|
||||||
|
}
|
||||||
|
svc := api.Service{
|
||||||
|
JSONBase: api.JSONBase{ID: "service1"},
|
||||||
|
Selector: map[string]string{
|
||||||
|
"name": "thisisalonglabel",
|
||||||
|
},
|
||||||
|
Port: 8080,
|
||||||
|
}
|
||||||
|
_, err = client.CreateService(ctx, &svc)
|
||||||
|
if err != nil {
|
||||||
|
glog.Fatalf("Failed to create service: %v, %v", svc, err)
|
||||||
|
}
|
||||||
|
if err := wait.Poll(time.Second, time.Second*10, endpointsSet(client, ctx, svc.ID, 1)); err != nil {
|
||||||
|
glog.Fatalf("FAILED: unexpected endpoints: %v", err)
|
||||||
|
}
|
||||||
|
glog.Info("Service test passed.")
|
||||||
|
}
|
||||||
|
|
||||||
type testFunc func(*client.Client)
|
type testFunc func(*client.Client)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@ -318,6 +384,7 @@ func main() {
|
|||||||
testFuncs := []testFunc{
|
testFuncs := []testFunc{
|
||||||
runReplicationControllerTest,
|
runReplicationControllerTest,
|
||||||
runAtomicPutTest,
|
runAtomicPutTest,
|
||||||
|
runServiceTest,
|
||||||
}
|
}
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
wg.Add(len(testFuncs))
|
wg.Add(len(testFuncs))
|
||||||
@ -347,8 +414,9 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// We expect 5: 2 net containers + 2 pods from the replication controller +
|
// We expect 5: 2 net containers + 2 pods from the replication controller +
|
||||||
// 1 net container + 2 pods from the URL.
|
// 1 net container + 2 pods from the URL +
|
||||||
if len(createdPods) != 7 {
|
// 1 net container + 1 pod from the service test.
|
||||||
|
if len(createdPods) != 9 {
|
||||||
glog.Fatalf("Unexpected list of created pods:\n\n%#v\n\n%#v\n\n%#v\n\n", createdPods.List(), fakeDocker1.Created, fakeDocker2.Created)
|
glog.Fatalf("Unexpected list of created pods:\n\n%#v\n\n%#v\n\n%#v\n\n", createdPods.List(), fakeDocker1.Created, fakeDocker2.Created)
|
||||||
}
|
}
|
||||||
glog.Infof("OK - found created pods: %#v", createdPods.List())
|
glog.Infof("OK - found created pods: %#v", createdPods.List())
|
||||||
|
@ -62,8 +62,8 @@ func (e *EndpointController) SyncServiceEndpoints() error {
|
|||||||
resultErr = err
|
resultErr = err
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
endpoints := make([]string, len(pods.Items))
|
endpoints := []string{}
|
||||||
for ix, pod := range pods.Items {
|
for _, pod := range pods.Items {
|
||||||
port, err := findPort(&pod.DesiredState.Manifest, service.ContainerPort)
|
port, err := findPort(&pod.DesiredState.Manifest, service.ContainerPort)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Failed to find port for service: %v, %v", service, err)
|
glog.Errorf("Failed to find port for service: %v, %v", service, err)
|
||||||
@ -73,7 +73,7 @@ func (e *EndpointController) SyncServiceEndpoints() error {
|
|||||||
glog.Errorf("Failed to find an IP for pod: %v", pod)
|
glog.Errorf("Failed to find an IP for pod: %v", pod)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
endpoints[ix] = net.JoinHostPort(pod.CurrentState.PodIP, strconv.Itoa(port))
|
endpoints = append(endpoints, net.JoinHostPort(pod.CurrentState.PodIP, strconv.Itoa(port)))
|
||||||
}
|
}
|
||||||
currentEndpoints, err := e.client.GetEndpoints(nsCtx, service.ID)
|
currentEndpoints, err := e.client.GetEndpoints(nsCtx, service.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user