Merge pull request #108075 from ialidzhikov/cleanup/pointer-duration
Make use of `k8s.io/utils/pointer.Duration`
This commit is contained in:
		@@ -17,37 +17,37 @@ limitations under the License.
 | 
				
			|||||||
package ttlafterfinished
 | 
					package ttlafterfinished
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"k8s.io/klog/v2"
 | 
					 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	batch "k8s.io/api/batch/v1"
 | 
						batchv1 "k8s.io/api/batch/v1"
 | 
				
			||||||
	v1 "k8s.io/api/core/v1"
 | 
						corev1 "k8s.io/api/core/v1"
 | 
				
			||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
 | 
						"k8s.io/klog/v2"
 | 
				
			||||||
	"k8s.io/klog/v2/ktesting"
 | 
						"k8s.io/klog/v2/ktesting"
 | 
				
			||||||
	"k8s.io/utils/pointer"
 | 
						"k8s.io/utils/pointer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batch.Job {
 | 
					func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batchv1.Job {
 | 
				
			||||||
	j := &batch.Job{
 | 
						j := &batchv1.Job{
 | 
				
			||||||
		TypeMeta: metav1.TypeMeta{Kind: "Job"},
 | 
							TypeMeta: metav1.TypeMeta{Kind: "Job"},
 | 
				
			||||||
		ObjectMeta: metav1.ObjectMeta{
 | 
							ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
			Name:      "foobar",
 | 
								Name:      "foobar",
 | 
				
			||||||
			Namespace: metav1.NamespaceDefault,
 | 
								Namespace: metav1.NamespaceDefault,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		Spec: batch.JobSpec{
 | 
							Spec: batchv1.JobSpec{
 | 
				
			||||||
			Selector: &metav1.LabelSelector{
 | 
								Selector: &metav1.LabelSelector{
 | 
				
			||||||
				MatchLabels: map[string]string{"foo": "bar"},
 | 
									MatchLabels: map[string]string{"foo": "bar"},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			Template: v1.PodTemplateSpec{
 | 
								Template: corev1.PodTemplateSpec{
 | 
				
			||||||
				ObjectMeta: metav1.ObjectMeta{
 | 
									ObjectMeta: metav1.ObjectMeta{
 | 
				
			||||||
					Labels: map[string]string{
 | 
										Labels: map[string]string{
 | 
				
			||||||
						"foo": "bar",
 | 
											"foo": "bar",
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				Spec: v1.PodSpec{
 | 
									Spec: corev1.PodSpec{
 | 
				
			||||||
					Containers: []v1.Container{
 | 
										Containers: []corev1.Container{
 | 
				
			||||||
						{Image: "foo/bar"},
 | 
											{Image: "foo/bar"},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
@@ -56,12 +56,12 @@ func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batch.Job {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !completionTime.IsZero() {
 | 
						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)
 | 
							j.Status.Conditions = append(j.Status.Conditions, c)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !failedTime.IsZero() {
 | 
						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)
 | 
							j.Status.Conditions = append(j.Status.Conditions, c)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -72,11 +72,6 @@ func newJob(completionTime, failedTime metav1.Time, ttl *int32) *batch.Job {
 | 
				
			|||||||
	return j
 | 
						return j
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func durationPointer(n int) *time.Duration {
 | 
					 | 
				
			||||||
	s := time.Duration(n) * time.Second
 | 
					 | 
				
			||||||
	return &s
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestTimeLeft(t *testing.T) {
 | 
					func TestTimeLeft(t *testing.T) {
 | 
				
			||||||
	now := metav1.Now()
 | 
						now := metav1.Now()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,7 +105,7 @@ func TestTimeLeft(t *testing.T) {
 | 
				
			|||||||
			completionTime:   now,
 | 
								completionTime:   now,
 | 
				
			||||||
			ttl:              pointer.Int32(0),
 | 
								ttl:              pointer.Int32(0),
 | 
				
			||||||
			since:            &now.Time,
 | 
								since:            &now.Time,
 | 
				
			||||||
			expectedTimeLeft: durationPointer(0),
 | 
								expectedTimeLeft: pointer.Duration(0 * time.Second),
 | 
				
			||||||
			expectedExpireAt: now.Time,
 | 
								expectedExpireAt: now.Time,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -118,7 +113,7 @@ func TestTimeLeft(t *testing.T) {
 | 
				
			|||||||
			completionTime:   now,
 | 
								completionTime:   now,
 | 
				
			||||||
			ttl:              pointer.Int32(10),
 | 
								ttl:              pointer.Int32(10),
 | 
				
			||||||
			since:            &now.Time,
 | 
								since:            &now.Time,
 | 
				
			||||||
			expectedTimeLeft: durationPointer(10),
 | 
								expectedTimeLeft: pointer.Duration(10 * time.Second),
 | 
				
			||||||
			expectedExpireAt: now.Add(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)),
 | 
								completionTime:   metav1.NewTime(now.Add(-10 * time.Second)),
 | 
				
			||||||
			ttl:              pointer.Int32(15),
 | 
								ttl:              pointer.Int32(15),
 | 
				
			||||||
			since:            &now.Time,
 | 
								since:            &now.Time,
 | 
				
			||||||
			expectedTimeLeft: durationPointer(5),
 | 
								expectedTimeLeft: pointer.Duration(5 * time.Second),
 | 
				
			||||||
			expectedExpireAt: now.Add(5 * time.Second),
 | 
								expectedExpireAt: now.Add(5 * time.Second),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -141,7 +136,7 @@ func TestTimeLeft(t *testing.T) {
 | 
				
			|||||||
			failedTime:       now,
 | 
								failedTime:       now,
 | 
				
			||||||
			ttl:              pointer.Int32(0),
 | 
								ttl:              pointer.Int32(0),
 | 
				
			||||||
			since:            &now.Time,
 | 
								since:            &now.Time,
 | 
				
			||||||
			expectedTimeLeft: durationPointer(0),
 | 
								expectedTimeLeft: pointer.Duration(0 * time.Second),
 | 
				
			||||||
			expectedExpireAt: now.Time,
 | 
								expectedExpireAt: now.Time,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -149,7 +144,7 @@ func TestTimeLeft(t *testing.T) {
 | 
				
			|||||||
			failedTime:       now,
 | 
								failedTime:       now,
 | 
				
			||||||
			ttl:              pointer.Int32(10),
 | 
								ttl:              pointer.Int32(10),
 | 
				
			||||||
			since:            &now.Time,
 | 
								since:            &now.Time,
 | 
				
			||||||
			expectedTimeLeft: durationPointer(10),
 | 
								expectedTimeLeft: pointer.Duration(10 * time.Second),
 | 
				
			||||||
			expectedExpireAt: now.Add(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)),
 | 
								failedTime:       metav1.NewTime(now.Add(-10 * time.Second)),
 | 
				
			||||||
			ttl:              pointer.Int32(15),
 | 
								ttl:              pointer.Int32(15),
 | 
				
			||||||
			since:            &now.Time,
 | 
								since:            &now.Time,
 | 
				
			||||||
			expectedTimeLeft: durationPointer(5),
 | 
								expectedTimeLeft: pointer.Duration(5 * time.Second),
 | 
				
			||||||
			expectedExpireAt: now.Add(5 * time.Second),
 | 
								expectedExpireAt: now.Add(5 * time.Second),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,7 @@ import (
 | 
				
			|||||||
	kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
 | 
						kubeapiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/controller/certificates/signer"
 | 
						"k8s.io/kubernetes/pkg/controller/certificates/signer"
 | 
				
			||||||
	"k8s.io/kubernetes/test/integration/framework"
 | 
						"k8s.io/kubernetes/test/integration/framework"
 | 
				
			||||||
 | 
						"k8s.io/utils/pointer"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestCSRDuration(t *testing.T) {
 | 
					func TestCSRDuration(t *testing.T) {
 | 
				
			||||||
@@ -119,62 +120,63 @@ func TestCSRDuration(t *testing.T) {
 | 
				
			|||||||
	go c.Run(ctx, 1)
 | 
						go c.Run(ctx, 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		name, csrName          string
 | 
							name, csrName string
 | 
				
			||||||
		duration, wantDuration time.Duration
 | 
							duration      *time.Duration
 | 
				
			||||||
		wantError              string
 | 
							wantDuration  time.Duration
 | 
				
			||||||
 | 
							wantError     string
 | 
				
			||||||
	}{
 | 
						}{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "no duration set",
 | 
								name:         "no duration set",
 | 
				
			||||||
			duration:     0,
 | 
								duration:     nil,
 | 
				
			||||||
			wantDuration: 24 * time.Hour,
 | 
								wantDuration: 24 * time.Hour,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "same duration set as certTTL",
 | 
								name:         "same duration set as certTTL",
 | 
				
			||||||
			duration:     24 * time.Hour,
 | 
								duration:     pointer.Duration(24 * time.Hour),
 | 
				
			||||||
			wantDuration: 24 * time.Hour,
 | 
								wantDuration: 24 * time.Hour,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "longer duration than certTTL",
 | 
								name:         "longer duration than certTTL",
 | 
				
			||||||
			duration:     48 * time.Hour,
 | 
								duration:     pointer.Duration(48 * time.Hour),
 | 
				
			||||||
			wantDuration: 24 * time.Hour,
 | 
								wantDuration: 24 * time.Hour,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "slightly shorter duration set",
 | 
								name:         "slightly shorter duration set",
 | 
				
			||||||
			duration:     20 * time.Hour,
 | 
								duration:     pointer.Duration(20 * time.Hour),
 | 
				
			||||||
			wantDuration: 20 * time.Hour,
 | 
								wantDuration: 20 * time.Hour,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "even shorter duration set",
 | 
								name:         "even shorter duration set",
 | 
				
			||||||
			duration:     10 * time.Hour,
 | 
								duration:     pointer.Duration(10 * time.Hour),
 | 
				
			||||||
			wantDuration: 10 * time.Hour,
 | 
								wantDuration: 10 * time.Hour,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "short duration set",
 | 
								name:         "short duration set",
 | 
				
			||||||
			duration:     2 * time.Hour,
 | 
								duration:     pointer.Duration(2 * time.Hour),
 | 
				
			||||||
			wantDuration: 2*time.Hour + 5*time.Minute,
 | 
								wantDuration: 2*time.Hour + 5*time.Minute,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "very short duration set",
 | 
								name:         "very short duration set",
 | 
				
			||||||
			duration:     30 * time.Minute,
 | 
								duration:     pointer.Duration(30 * time.Minute),
 | 
				
			||||||
			wantDuration: 30*time.Minute + 5*time.Minute,
 | 
								wantDuration: 30*time.Minute + 5*time.Minute,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "shortest duration set",
 | 
								name:         "shortest duration set",
 | 
				
			||||||
			duration:     10 * time.Minute,
 | 
								duration:     pointer.Duration(10 * time.Minute),
 | 
				
			||||||
			wantDuration: 10*time.Minute + 5*time.Minute,
 | 
								wantDuration: 10*time.Minute + 5*time.Minute,
 | 
				
			||||||
			wantError:    "",
 | 
								wantError:    "",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name:         "just too short duration set",
 | 
								name:         "just too short duration set",
 | 
				
			||||||
			csrName:      "invalid-csr-001",
 | 
								csrName:      "invalid-csr-001",
 | 
				
			||||||
			duration:     10*time.Minute - time.Second,
 | 
								duration:     pointer.Duration(10*time.Minute - time.Second),
 | 
				
			||||||
			wantDuration: 0,
 | 
								wantDuration: 0,
 | 
				
			||||||
			wantError: `cannot create certificate signing request: ` +
 | 
								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)`,
 | 
									`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",
 | 
								name:         "really too short duration set",
 | 
				
			||||||
			csrName:      "invalid-csr-002",
 | 
								csrName:      "invalid-csr-002",
 | 
				
			||||||
			duration:     3 * time.Minute,
 | 
								duration:     pointer.Duration(3 * time.Minute),
 | 
				
			||||||
			wantDuration: 0,
 | 
								wantDuration: 0,
 | 
				
			||||||
			wantError: `cannot create certificate signing request: ` +
 | 
								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)`,
 | 
									`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",
 | 
								name:         "negative duration set",
 | 
				
			||||||
			csrName:      "invalid-csr-003",
 | 
								csrName:      "invalid-csr-003",
 | 
				
			||||||
			duration:     -7 * time.Minute,
 | 
								duration:     pointer.Duration(-7 * time.Minute),
 | 
				
			||||||
			wantDuration: 0,
 | 
								wantDuration: 0,
 | 
				
			||||||
			wantError: `cannot create certificate signing request: ` +
 | 
								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)`,
 | 
									`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,
 | 
								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 {
 | 
								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)
 | 
									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 {
 | 
					func errStr(err error) string {
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		return ""
 | 
							return ""
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user