mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Instead of saying "Google Inc." (which is not always correct) say "The Kubernetes Authors", which is generic.
		
			
				
	
	
		
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2014 The Kubernetes Authors 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 kubelet
 | 
						|
 | 
						|
import (
 | 
						|
	"math/rand"
 | 
						|
	"strconv"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
 | 
						|
	"github.com/GoogleCloudPlatform/kubernetes/pkg/client"
 | 
						|
	"github.com/GoogleCloudPlatform/kubernetes/pkg/client/testclient"
 | 
						|
)
 | 
						|
 | 
						|
var testPod *api.Pod = &api.Pod{
 | 
						|
	ObjectMeta: api.ObjectMeta{
 | 
						|
		UID:       "12345678",
 | 
						|
		Name:      "foo",
 | 
						|
		Namespace: "new",
 | 
						|
	},
 | 
						|
}
 | 
						|
 | 
						|
func newTestStatusManager() *statusManager {
 | 
						|
	return newStatusManager(&testclient.Fake{})
 | 
						|
}
 | 
						|
 | 
						|
func generateRandomMessage() string {
 | 
						|
	return strconv.Itoa(rand.Int())
 | 
						|
}
 | 
						|
 | 
						|
func getRandomPodStatus() api.PodStatus {
 | 
						|
	return api.PodStatus{
 | 
						|
		Message: generateRandomMessage(),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func verifyActions(t *testing.T, kubeClient client.Interface, expectedActions []string) {
 | 
						|
	actions := kubeClient.(*testclient.Fake).Actions
 | 
						|
	if len(actions) != len(expectedActions) {
 | 
						|
		t.Errorf("unexpected actions, got: %s expected: %s", actions, expectedActions)
 | 
						|
		return
 | 
						|
	}
 | 
						|
	for i := 0; i < len(actions); i++ {
 | 
						|
		if actions[i].Action != expectedActions[i] {
 | 
						|
			t.Errorf("unexpected actions, got: %s expected: %s", actions, expectedActions)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func verifyUpdates(t *testing.T, manager *statusManager, expectedUpdates int) {
 | 
						|
	// Consume all updates in the channel.
 | 
						|
	numUpdates := 0
 | 
						|
	for {
 | 
						|
		hasUpdate := true
 | 
						|
		select {
 | 
						|
		case <-manager.podStatusChannel:
 | 
						|
			numUpdates++
 | 
						|
		default:
 | 
						|
			hasUpdate = false
 | 
						|
		}
 | 
						|
 | 
						|
		if !hasUpdate {
 | 
						|
			break
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	if numUpdates != expectedUpdates {
 | 
						|
		t.Errorf("unexpected number of updates %d, expected %d", numUpdates, expectedUpdates)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestNewStatus(t *testing.T) {
 | 
						|
	syncer := newTestStatusManager()
 | 
						|
	syncer.SetPodStatus(testPod, getRandomPodStatus())
 | 
						|
	verifyUpdates(t, syncer, 1)
 | 
						|
}
 | 
						|
 | 
						|
func TestChangedStatus(t *testing.T) {
 | 
						|
	syncer := newTestStatusManager()
 | 
						|
	syncer.SetPodStatus(testPod, getRandomPodStatus())
 | 
						|
	syncer.SetPodStatus(testPod, getRandomPodStatus())
 | 
						|
	verifyUpdates(t, syncer, 2)
 | 
						|
}
 | 
						|
 | 
						|
func TestUnchangedStatus(t *testing.T) {
 | 
						|
	syncer := newTestStatusManager()
 | 
						|
	podStatus := getRandomPodStatus()
 | 
						|
	syncer.SetPodStatus(testPod, podStatus)
 | 
						|
	syncer.SetPodStatus(testPod, podStatus)
 | 
						|
	verifyUpdates(t, syncer, 1)
 | 
						|
}
 | 
						|
 | 
						|
func TestSyncBatch(t *testing.T) {
 | 
						|
	syncer := newTestStatusManager()
 | 
						|
	syncer.SetPodStatus(testPod, getRandomPodStatus())
 | 
						|
	err := syncer.syncBatch()
 | 
						|
	if err != nil {
 | 
						|
		t.Errorf("unexpected syncing error: %v", err)
 | 
						|
	}
 | 
						|
	verifyActions(t, syncer.kubeClient, []string{"get-pod", "update-status-pod"})
 | 
						|
}
 |