mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-11 21:12:07 +00:00
Merge pull request #108075 from ialidzhikov/cleanup/pointer-duration
Make use of `k8s.io/utils/pointer.Duration`
This commit is contained in:
commit
988094878e
@ -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) {
|
||||||
@ -120,61 +121,62 @@ func TestCSRDuration(t *testing.T) {
|
|||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name, csrName string
|
name, csrName string
|
||||||
duration, wantDuration time.Duration
|
duration *time.Duration
|
||||||
|
wantDuration time.Duration
|
||||||
wantError string
|
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 ""
|
||||||
|
Loading…
Reference in New Issue
Block a user