mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			198 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2018 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 nodelease
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	coordv1beta1 "k8s.io/api/coordination/v1beta1"
 | 
						|
	corev1 "k8s.io/api/core/v1"
 | 
						|
	apiequality "k8s.io/apimachinery/pkg/api/equality"
 | 
						|
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						|
	"k8s.io/apimachinery/pkg/types"
 | 
						|
	"k8s.io/apimachinery/pkg/util/clock"
 | 
						|
	"k8s.io/apimachinery/pkg/util/diff"
 | 
						|
	"k8s.io/client-go/kubernetes/fake"
 | 
						|
	"k8s.io/utils/pointer"
 | 
						|
)
 | 
						|
 | 
						|
func TestNewLease(t *testing.T) {
 | 
						|
	fakeClock := clock.NewFakeClock(time.Now())
 | 
						|
	node := &corev1.Node{
 | 
						|
		ObjectMeta: metav1.ObjectMeta{
 | 
						|
			Name: "foo",
 | 
						|
			UID:  types.UID("foo-uid"),
 | 
						|
		},
 | 
						|
	}
 | 
						|
	cases := []struct {
 | 
						|
		desc       string
 | 
						|
		controller *controller
 | 
						|
		base       *coordv1beta1.Lease
 | 
						|
		expect     *coordv1beta1.Lease
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			desc: "nil base without node",
 | 
						|
			controller: &controller{
 | 
						|
				client:               fake.NewSimpleClientset(),
 | 
						|
				holderIdentity:       node.Name,
 | 
						|
				leaseDurationSeconds: 10,
 | 
						|
				clock:                fakeClock,
 | 
						|
			},
 | 
						|
			base: nil,
 | 
						|
			expect: &coordv1beta1.Lease{
 | 
						|
				ObjectMeta: metav1.ObjectMeta{
 | 
						|
					Name:      node.Name,
 | 
						|
					Namespace: corev1.NamespaceNodeLease,
 | 
						|
				},
 | 
						|
				Spec: coordv1beta1.LeaseSpec{
 | 
						|
					HolderIdentity:       pointer.StringPtr(node.Name),
 | 
						|
					LeaseDurationSeconds: pointer.Int32Ptr(10),
 | 
						|
					RenewTime:            &metav1.MicroTime{Time: fakeClock.Now()},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "nil base with node",
 | 
						|
			controller: &controller{
 | 
						|
				client:               fake.NewSimpleClientset(node),
 | 
						|
				holderIdentity:       node.Name,
 | 
						|
				leaseDurationSeconds: 10,
 | 
						|
				clock:                fakeClock,
 | 
						|
			},
 | 
						|
			base: nil,
 | 
						|
			expect: &coordv1beta1.Lease{
 | 
						|
				ObjectMeta: metav1.ObjectMeta{
 | 
						|
					Name:      node.Name,
 | 
						|
					Namespace: corev1.NamespaceNodeLease,
 | 
						|
					OwnerReferences: []metav1.OwnerReference{
 | 
						|
						{
 | 
						|
							APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version,
 | 
						|
							Kind:       corev1.SchemeGroupVersion.WithKind("Node").Kind,
 | 
						|
							Name:       node.Name,
 | 
						|
							UID:        node.UID,
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				Spec: coordv1beta1.LeaseSpec{
 | 
						|
					HolderIdentity:       pointer.StringPtr(node.Name),
 | 
						|
					LeaseDurationSeconds: pointer.Int32Ptr(10),
 | 
						|
					RenewTime:            &metav1.MicroTime{Time: fakeClock.Now()},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "non-nil base without owner ref, renew time is updated",
 | 
						|
			controller: &controller{
 | 
						|
				client:               fake.NewSimpleClientset(node),
 | 
						|
				holderIdentity:       node.Name,
 | 
						|
				leaseDurationSeconds: 10,
 | 
						|
				clock:                fakeClock,
 | 
						|
			},
 | 
						|
			base: &coordv1beta1.Lease{
 | 
						|
				ObjectMeta: metav1.ObjectMeta{
 | 
						|
					Name:      node.Name,
 | 
						|
					Namespace: corev1.NamespaceNodeLease,
 | 
						|
				},
 | 
						|
				Spec: coordv1beta1.LeaseSpec{
 | 
						|
					HolderIdentity:       pointer.StringPtr(node.Name),
 | 
						|
					LeaseDurationSeconds: pointer.Int32Ptr(10),
 | 
						|
					RenewTime:            &metav1.MicroTime{Time: fakeClock.Now().Add(-10 * time.Second)},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expect: &coordv1beta1.Lease{
 | 
						|
				ObjectMeta: metav1.ObjectMeta{
 | 
						|
					Name:      node.Name,
 | 
						|
					Namespace: corev1.NamespaceNodeLease,
 | 
						|
					OwnerReferences: []metav1.OwnerReference{
 | 
						|
						{
 | 
						|
							APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version,
 | 
						|
							Kind:       corev1.SchemeGroupVersion.WithKind("Node").Kind,
 | 
						|
							Name:       node.Name,
 | 
						|
							UID:        node.UID,
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				Spec: coordv1beta1.LeaseSpec{
 | 
						|
					HolderIdentity:       pointer.StringPtr(node.Name),
 | 
						|
					LeaseDurationSeconds: pointer.Int32Ptr(10),
 | 
						|
					RenewTime:            &metav1.MicroTime{Time: fakeClock.Now()},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			desc: "non-nil base with owner ref, renew time is updated",
 | 
						|
			controller: &controller{
 | 
						|
				client:               fake.NewSimpleClientset(node),
 | 
						|
				holderIdentity:       node.Name,
 | 
						|
				leaseDurationSeconds: 10,
 | 
						|
				clock:                fakeClock,
 | 
						|
			},
 | 
						|
			base: &coordv1beta1.Lease{
 | 
						|
				ObjectMeta: metav1.ObjectMeta{
 | 
						|
					Name:      node.Name,
 | 
						|
					Namespace: corev1.NamespaceNodeLease,
 | 
						|
					OwnerReferences: []metav1.OwnerReference{
 | 
						|
						{
 | 
						|
							APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version,
 | 
						|
							Kind:       corev1.SchemeGroupVersion.WithKind("Node").Kind,
 | 
						|
							Name:       node.Name,
 | 
						|
							UID:        node.UID,
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				Spec: coordv1beta1.LeaseSpec{
 | 
						|
					HolderIdentity:       pointer.StringPtr(node.Name),
 | 
						|
					LeaseDurationSeconds: pointer.Int32Ptr(10),
 | 
						|
					RenewTime:            &metav1.MicroTime{Time: fakeClock.Now().Add(-10 * time.Second)},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			expect: &coordv1beta1.Lease{
 | 
						|
				ObjectMeta: metav1.ObjectMeta{
 | 
						|
					Name:      node.Name,
 | 
						|
					Namespace: corev1.NamespaceNodeLease,
 | 
						|
					OwnerReferences: []metav1.OwnerReference{
 | 
						|
						{
 | 
						|
							APIVersion: corev1.SchemeGroupVersion.WithKind("Node").Version,
 | 
						|
							Kind:       corev1.SchemeGroupVersion.WithKind("Node").Kind,
 | 
						|
							Name:       node.Name,
 | 
						|
							UID:        node.UID,
 | 
						|
						},
 | 
						|
					},
 | 
						|
				},
 | 
						|
				Spec: coordv1beta1.LeaseSpec{
 | 
						|
					HolderIdentity:       pointer.StringPtr(node.Name),
 | 
						|
					LeaseDurationSeconds: pointer.Int32Ptr(10),
 | 
						|
					RenewTime:            &metav1.MicroTime{Time: fakeClock.Now()},
 | 
						|
				},
 | 
						|
			},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, tc := range cases {
 | 
						|
		t.Run(tc.desc, func(t *testing.T) {
 | 
						|
			newLease := tc.controller.newLease(tc.base)
 | 
						|
			if newLease == tc.base {
 | 
						|
				t.Fatalf("the new lease must be newly allocated, but got same address as base")
 | 
						|
			}
 | 
						|
			if !apiequality.Semantic.DeepEqual(tc.expect, newLease) {
 | 
						|
				t.Errorf("unexpected result from newLease: %s", diff.ObjectDiff(tc.expect, newLease))
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |