Make use of k8s.io/utils/pointer.Duration
				
					
				
			Signed-off-by: ialidzhikov <i.alidjikov@gmail.com>
This commit is contained in:
		@@ -17,37 +17,37 @@ limitations under the License.
 | 
			
		||||
package ttlafterfinished
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	batch "k8s.io/api/batch/v1"
 | 
			
		||||
	v1 "k8s.io/api/core/v1"
 | 
			
		||||
	batchv1 "k8s.io/api/batch/v1"
 | 
			
		||||
	corev1 "k8s.io/api/core/v1"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
	"k8s.io/klog/v2/ktesting"
 | 
			
		||||
	"k8s.io/utils/pointer"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batch.Job {
 | 
			
		||||
	j := &batch.Job{
 | 
			
		||||
func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batchv1.Job {
 | 
			
		||||
	j := &batchv1.Job{
 | 
			
		||||
		TypeMeta: metav1.TypeMeta{Kind: "Job"},
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
			Name:      "foobar",
 | 
			
		||||
			Namespace: metav1.NamespaceDefault,
 | 
			
		||||
		},
 | 
			
		||||
		Spec: batch.JobSpec{
 | 
			
		||||
		Spec: batchv1.JobSpec{
 | 
			
		||||
			Selector: &metav1.LabelSelector{
 | 
			
		||||
				MatchLabels: map[string]string{"foo": "bar"},
 | 
			
		||||
			},
 | 
			
		||||
			Template: v1.PodTemplateSpec{
 | 
			
		||||
			Template: corev1.PodTemplateSpec{
 | 
			
		||||
				ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
					Labels: map[string]string{
 | 
			
		||||
						"foo": "bar",
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				Spec: v1.PodSpec{
 | 
			
		||||
					Containers: []v1.Container{
 | 
			
		||||
				Spec: corev1.PodSpec{
 | 
			
		||||
					Containers: []corev1.Container{
 | 
			
		||||
						{Image: "foo/bar"},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
@@ -56,12 +56,12 @@ func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batch.Job {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !completionTime.IsZero() {
 | 
			
		||||
		c := batch.JobCondition{Type: batch.JobComplete, Status: v1.ConditionTrue, LastTransitionTime: completionTime}
 | 
			
		||||
		c := batchv1.JobCondition{Type: batchv1.JobComplete, Status: corev1.ConditionTrue, LastTransitionTime: completionTime}
 | 
			
		||||
		j.Status.Conditions = append(j.Status.Conditions, c)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !failedTime.IsZero() {
 | 
			
		||||
		c := batch.JobCondition{Type: batch.JobFailed, Status: v1.ConditionTrue, LastTransitionTime: failedTime}
 | 
			
		||||
		c := batchv1.JobCondition{Type: batchv1.JobFailed, Status: corev1.ConditionTrue, LastTransitionTime: failedTime}
 | 
			
		||||
		j.Status.Conditions = append(j.Status.Conditions, c)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -72,11 +72,6 @@ func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batch.Job {
 | 
			
		||||
	return j
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func durationPointer(n int) *time.Duration {
 | 
			
		||||
	s := time.Duration(n) * time.Second
 | 
			
		||||
	return &s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestTimeLeft(t *testing.T) {
 | 
			
		||||
	now := metav1.Now()
 | 
			
		||||
 | 
			
		||||
@@ -110,7 +105,7 @@ func TestTimeLeft(t *testing.T) {
 | 
			
		||||
			completionTime:   now,
 | 
			
		||||
			ttl:              pointer.Int32(0),
 | 
			
		||||
			since:            &now.Time,
 | 
			
		||||
			expectedTimeLeft: durationPointer(0),
 | 
			
		||||
			expectedTimeLeft: pointer.Duration(0 * time.Second),
 | 
			
		||||
			expectedExpireAt: now.Time,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -118,7 +113,7 @@ func TestTimeLeft(t *testing.T) {
 | 
			
		||||
			completionTime:   now,
 | 
			
		||||
			ttl:              pointer.Int32(10),
 | 
			
		||||
			since:            &now.Time,
 | 
			
		||||
			expectedTimeLeft: durationPointer(10),
 | 
			
		||||
			expectedTimeLeft: pointer.Duration(10 * time.Second),
 | 
			
		||||
			expectedExpireAt: now.Add(10 * time.Second),
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -126,7 +121,7 @@ func TestTimeLeft(t *testing.T) {
 | 
			
		||||
			completionTime:   metav1.NewTime(now.Add(-10 * time.Second)),
 | 
			
		||||
			ttl:              pointer.Int32(15),
 | 
			
		||||
			since:            &now.Time,
 | 
			
		||||
			expectedTimeLeft: durationPointer(5),
 | 
			
		||||
			expectedTimeLeft: pointer.Duration(5 * time.Second),
 | 
			
		||||
			expectedExpireAt: now.Add(5 * time.Second),
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -141,7 +136,7 @@ func TestTimeLeft(t *testing.T) {
 | 
			
		||||
			failedTime:       now,
 | 
			
		||||
			ttl:              pointer.Int32(0),
 | 
			
		||||
			since:            &now.Time,
 | 
			
		||||
			expectedTimeLeft: durationPointer(0),
 | 
			
		||||
			expectedTimeLeft: pointer.Duration(0 * time.Second),
 | 
			
		||||
			expectedExpireAt: now.Time,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -149,7 +144,7 @@ func TestTimeLeft(t *testing.T) {
 | 
			
		||||
			failedTime:       now,
 | 
			
		||||
			ttl:              pointer.Int32(10),
 | 
			
		||||
			since:            &now.Time,
 | 
			
		||||
			expectedTimeLeft: durationPointer(10),
 | 
			
		||||
			expectedTimeLeft: pointer.Duration(10 * time.Second),
 | 
			
		||||
			expectedExpireAt: now.Add(10 * time.Second),
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
@@ -157,7 +152,7 @@ func TestTimeLeft(t *testing.T) {
 | 
			
		||||
			failedTime:       metav1.NewTime(now.Add(-10 * time.Second)),
 | 
			
		||||
			ttl:              pointer.Int32(15),
 | 
			
		||||
			since:            &now.Time,
 | 
			
		||||
			expectedTimeLeft: durationPointer(5),
 | 
			
		||||
			expectedTimeLeft: pointer.Duration(5 * time.Second),
 | 
			
		||||
			expectedExpireAt: now.Add(5 * time.Second),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,7 @@ import (
 | 
			
		||||
	kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/controller/certificates/signer"
 | 
			
		||||
	"k8s.io/kubernetes/test/integration/framework"
 | 
			
		||||
	"k8s.io/utils/pointer"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestCSRDuration(t *testing.T) {
 | 
			
		||||
@@ -120,61 +121,62 @@ func TestCSRDuration(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		name, csrName string
 | 
			
		||||
		duration, wantDuration time.Duration
 | 
			
		||||
		duration      *time.Duration
 | 
			
		||||
		wantDuration  time.Duration
 | 
			
		||||
		wantError     string
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			name:         "no duration set",
 | 
			
		||||
			duration:     0,
 | 
			
		||||
			duration:     nil,
 | 
			
		||||
			wantDuration: 24 * time.Hour,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "same duration set as certTTL",
 | 
			
		||||
			duration:     24 * time.Hour,
 | 
			
		||||
			duration:     pointer.Duration(24 * time.Hour),
 | 
			
		||||
			wantDuration: 24 * time.Hour,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "longer duration than certTTL",
 | 
			
		||||
			duration:     48 * time.Hour,
 | 
			
		||||
			duration:     pointer.Duration(48 * time.Hour),
 | 
			
		||||
			wantDuration: 24 * time.Hour,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "slightly shorter duration set",
 | 
			
		||||
			duration:     20 * time.Hour,
 | 
			
		||||
			duration:     pointer.Duration(20 * time.Hour),
 | 
			
		||||
			wantDuration: 20 * time.Hour,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "even shorter duration set",
 | 
			
		||||
			duration:     10 * time.Hour,
 | 
			
		||||
			duration:     pointer.Duration(10 * time.Hour),
 | 
			
		||||
			wantDuration: 10 * time.Hour,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "short duration set",
 | 
			
		||||
			duration:     2 * time.Hour,
 | 
			
		||||
			duration:     pointer.Duration(2 * time.Hour),
 | 
			
		||||
			wantDuration: 2*time.Hour + 5*time.Minute,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "very short duration set",
 | 
			
		||||
			duration:     30 * time.Minute,
 | 
			
		||||
			duration:     pointer.Duration(30 * time.Minute),
 | 
			
		||||
			wantDuration: 30*time.Minute + 5*time.Minute,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "shortest duration set",
 | 
			
		||||
			duration:     10 * time.Minute,
 | 
			
		||||
			duration:     pointer.Duration(10 * time.Minute),
 | 
			
		||||
			wantDuration: 10*time.Minute + 5*time.Minute,
 | 
			
		||||
			wantError:    "",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name:         "just too short duration set",
 | 
			
		||||
			csrName:      "invalid-csr-001",
 | 
			
		||||
			duration:     10*time.Minute - time.Second,
 | 
			
		||||
			duration:     pointer.Duration(10*time.Minute - time.Second),
 | 
			
		||||
			wantDuration: 0,
 | 
			
		||||
			wantError: `cannot create certificate signing request: ` +
 | 
			
		||||
				`CertificateSigningRequest.certificates.k8s.io "invalid-csr-001" is invalid: spec.expirationSeconds: Invalid value: 599: may not specify a duration less than 600 seconds (10 minutes)`,
 | 
			
		||||
@@ -182,7 +184,7 @@ func TestCSRDuration(t *testing.T) {
 | 
			
		||||
		{
 | 
			
		||||
			name:         "really too short duration set",
 | 
			
		||||
			csrName:      "invalid-csr-002",
 | 
			
		||||
			duration:     3 * time.Minute,
 | 
			
		||||
			duration:     pointer.Duration(3 * time.Minute),
 | 
			
		||||
			wantDuration: 0,
 | 
			
		||||
			wantError: `cannot create certificate signing request: ` +
 | 
			
		||||
				`CertificateSigningRequest.certificates.k8s.io "invalid-csr-002" is invalid: spec.expirationSeconds: Invalid value: 180: may not specify a duration less than 600 seconds (10 minutes)`,
 | 
			
		||||
@@ -190,7 +192,7 @@ func TestCSRDuration(t *testing.T) {
 | 
			
		||||
		{
 | 
			
		||||
			name:         "negative duration set",
 | 
			
		||||
			csrName:      "invalid-csr-003",
 | 
			
		||||
			duration:     -7 * time.Minute,
 | 
			
		||||
			duration:     pointer.Duration(-7 * time.Minute),
 | 
			
		||||
			wantDuration: 0,
 | 
			
		||||
			wantError: `cannot create certificate signing request: ` +
 | 
			
		||||
				`CertificateSigningRequest.certificates.k8s.io "invalid-csr-003" is invalid: spec.expirationSeconds: Invalid value: -420: may not specify a duration less than 600 seconds (10 minutes)`,
 | 
			
		||||
@@ -211,7 +213,7 @@ func TestCSRDuration(t *testing.T) {
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			csrName, csrUID, errReq := csr.RequestCertificate(client, csrData, tt.csrName, certificatesv1.KubeAPIServerClientSignerName,
 | 
			
		||||
				durationPtr(tt.duration), []certificatesv1.KeyUsage{certificatesv1.UsageClientAuth}, privateKey)
 | 
			
		||||
				tt.duration, []certificatesv1.KeyUsage{certificatesv1.UsageClientAuth}, privateKey)
 | 
			
		||||
 | 
			
		||||
			if diff := cmp.Diff(tt.wantError, errStr(errReq)); len(diff) > 0 {
 | 
			
		||||
				t.Fatalf("CSR input duration %v err diff (-want, +got):\n%s", tt.duration, diff)
 | 
			
		||||
@@ -268,13 +270,6 @@ func TestCSRDuration(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func durationPtr(duration time.Duration) *time.Duration {
 | 
			
		||||
	if duration == 0 {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
	return &duration
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func errStr(err error) string {
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		return ""
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user