mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2016 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 kubelet
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"k8s.io/api/core/v1"
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
	"k8s.io/apimachinery/pkg/types"
 | 
						|
	"k8s.io/client-go/tools/record"
 | 
						|
	testingclock "k8s.io/utils/clock/testing"
 | 
						|
)
 | 
						|
 | 
						|
// mockPodStatusProvider returns the status on the specified pod
 | 
						|
type mockPodStatusProvider struct {
 | 
						|
	pods []*v1.Pod
 | 
						|
}
 | 
						|
 | 
						|
// GetPodStatus returns the status on the associated pod with matching uid (if found)
 | 
						|
func (m *mockPodStatusProvider) GetPodStatus(uid types.UID) (v1.PodStatus, bool) {
 | 
						|
	for _, pod := range m.pods {
 | 
						|
		if pod.UID == uid {
 | 
						|
			return pod.Status, true
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return v1.PodStatus{}, false
 | 
						|
}
 | 
						|
 | 
						|
// TestActiveDeadlineHandler verifies the active deadline handler functions as expected.
 | 
						|
func TestActiveDeadlineHandler(t *testing.T) {
 | 
						|
	pods := newTestPods(4)
 | 
						|
	fakeClock := testingclock.NewFakeClock(time.Now())
 | 
						|
	podStatusProvider := &mockPodStatusProvider{pods: pods}
 | 
						|
	fakeRecorder := &record.FakeRecorder{}
 | 
						|
	handler, err := newActiveDeadlineHandler(podStatusProvider, fakeRecorder, fakeClock)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatalf("unexpected error: %v", err)
 | 
						|
	}
 | 
						|
 | 
						|
	now := metav1.Now()
 | 
						|
	startTime := metav1.NewTime(now.Time.Add(-1 * time.Minute))
 | 
						|
 | 
						|
	// this pod has exceeded its active deadline
 | 
						|
	exceededActiveDeadlineSeconds := int64(30)
 | 
						|
	pods[0].Status.StartTime = &startTime
 | 
						|
	pods[0].Spec.ActiveDeadlineSeconds = &exceededActiveDeadlineSeconds
 | 
						|
 | 
						|
	// this pod has not exceeded its active deadline
 | 
						|
	notYetActiveDeadlineSeconds := int64(120)
 | 
						|
	pods[1].Status.StartTime = &startTime
 | 
						|
	pods[1].Spec.ActiveDeadlineSeconds = ¬YetActiveDeadlineSeconds
 | 
						|
 | 
						|
	// this pod has no deadline
 | 
						|
	pods[2].Status.StartTime = &startTime
 | 
						|
	pods[2].Spec.ActiveDeadlineSeconds = nil
 | 
						|
 | 
						|
	testCases := []struct {
 | 
						|
		pod      *v1.Pod
 | 
						|
		expected bool
 | 
						|
	}{{pods[0], true}, {pods[1], false}, {pods[2], false}, {pods[3], false}}
 | 
						|
 | 
						|
	for i, testCase := range testCases {
 | 
						|
		if actual := handler.ShouldSync(testCase.pod); actual != testCase.expected {
 | 
						|
			t.Errorf("[%d] ShouldSync expected %#v, got %#v", i, testCase.expected, actual)
 | 
						|
		}
 | 
						|
		actual := handler.ShouldEvict(testCase.pod)
 | 
						|
		if actual.Evict != testCase.expected {
 | 
						|
			t.Errorf("[%d] ShouldEvict.Evict expected %#v, got %#v", i, testCase.expected, actual.Evict)
 | 
						|
		}
 | 
						|
		if testCase.expected {
 | 
						|
			if actual.Reason != reason {
 | 
						|
				t.Errorf("[%d] ShouldEvict.Reason expected %#v, got %#v", i, message, actual.Reason)
 | 
						|
			}
 | 
						|
			if actual.Message != message {
 | 
						|
				t.Errorf("[%d] ShouldEvict.Message expected %#v, got %#v", i, message, actual.Message)
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |