123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- 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/apimachinery/pkg/util/clock"
- "k8s.io/client-go/tools/record"
- )
- // 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 := clock.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)
- }
- }
- }
- }
|