mirror of https://github.com/k3s-io/k3s
Merge pull request #76514 from oratos/master
Add more nil checks to metav1.Time and MicroTimek3s-v1.15.3
commit
7e2a427b47
|
@ -41,11 +41,6 @@ func (t *MicroTime) DeepCopyInto(out *MicroTime) {
|
||||||
*out = *t
|
*out = *t
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the representation of the time.
|
|
||||||
func (t MicroTime) String() string {
|
|
||||||
return t.Time.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewMicroTime returns a wrapped instance of the provided time
|
// NewMicroTime returns a wrapped instance of the provided time
|
||||||
func NewMicroTime(time time.Time) MicroTime {
|
func NewMicroTime(time time.Time) MicroTime {
|
||||||
return MicroTime{time}
|
return MicroTime{time}
|
||||||
|
@ -72,22 +67,40 @@ func (t *MicroTime) IsZero() bool {
|
||||||
|
|
||||||
// Before reports whether the time instant t is before u.
|
// Before reports whether the time instant t is before u.
|
||||||
func (t *MicroTime) Before(u *MicroTime) bool {
|
func (t *MicroTime) Before(u *MicroTime) bool {
|
||||||
return t.Time.Before(u.Time)
|
if t != nil && u != nil {
|
||||||
|
return t.Time.Before(u.Time)
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equal reports whether the time instant t is equal to u.
|
// Equal reports whether the time instant t is equal to u.
|
||||||
func (t *MicroTime) Equal(u *MicroTime) bool {
|
func (t *MicroTime) Equal(u *MicroTime) bool {
|
||||||
return t.Time.Equal(u.Time)
|
if t == nil && u == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if t != nil && u != nil {
|
||||||
|
return t.Time.Equal(u.Time)
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// BeforeTime reports whether the time instant t is before second-lever precision u.
|
// BeforeTime reports whether the time instant t is before second-lever precision u.
|
||||||
func (t *MicroTime) BeforeTime(u *Time) bool {
|
func (t *MicroTime) BeforeTime(u *Time) bool {
|
||||||
return t.Time.Before(u.Time)
|
if t != nil && u != nil {
|
||||||
|
return t.Time.Before(u.Time)
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// EqualTime reports whether the time instant t is equal to second-lever precision u.
|
// EqualTime reports whether the time instant t is equal to second-lever precision u.
|
||||||
func (t *MicroTime) EqualTime(u *Time) bool {
|
func (t *MicroTime) EqualTime(u *Time) bool {
|
||||||
return t.Time.Equal(u.Time)
|
if t == nil && u == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
if t != nil && u != nil {
|
||||||
|
return t.Time.Equal(u.Time)
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnixMicro returns the local time corresponding to the given Unix time
|
// UnixMicro returns the local time corresponding to the given Unix time
|
||||||
|
|
|
@ -137,3 +137,119 @@ func TestMicroTimeProto(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMicroTimeEqual(t *testing.T) {
|
||||||
|
t1 := NewMicroTime(time.Now())
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *MicroTime
|
||||||
|
y *MicroTime
|
||||||
|
result bool
|
||||||
|
}{
|
||||||
|
{"nil =? nil", nil, nil, true},
|
||||||
|
{"!nil =? !nil", &t1, &t1, true},
|
||||||
|
{"nil =? !nil", nil, &t1, false},
|
||||||
|
{"!nil =? nil", &t1, nil, false},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.Equal(c.y)
|
||||||
|
if result != c.result {
|
||||||
|
t.Errorf("Failed equality test for '%v', '%v': expected %+v, got %+v", c.x, c.y, c.result, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMicroTimeEqualTime(t *testing.T) {
|
||||||
|
t1 := NewMicroTime(time.Now())
|
||||||
|
t2 := NewTime(t1.Time)
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *MicroTime
|
||||||
|
y *Time
|
||||||
|
result bool
|
||||||
|
}{
|
||||||
|
{"nil =? nil", nil, nil, true},
|
||||||
|
{"!nil =? !nil", &t1, &t2, true},
|
||||||
|
{"nil =? !nil", nil, &t2, false},
|
||||||
|
{"!nil =? nil", &t1, nil, false},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.EqualTime(c.y)
|
||||||
|
if result != c.result {
|
||||||
|
t.Errorf("Failed equality test for '%v', '%v': expected %+v, got %+v", c.x, c.y, c.result, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMicroTimeBefore(t *testing.T) {
|
||||||
|
t1 := NewMicroTime(time.Now())
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *MicroTime
|
||||||
|
y *MicroTime
|
||||||
|
}{
|
||||||
|
{"nil <? nil", nil, nil},
|
||||||
|
{"!nil <? !nil", &t1, &t1},
|
||||||
|
{"nil <? !nil", nil, &t1},
|
||||||
|
{"!nil <? nil", &t1, nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.Before(c.y)
|
||||||
|
if result {
|
||||||
|
t.Errorf("Failed before test for '%v', '%v': expected false, got %+v", c.x, c.y, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func TestMicroTimeBeforeTime(t *testing.T) {
|
||||||
|
t1 := NewMicroTime(time.Now())
|
||||||
|
t2 := NewTime(t1.Time)
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *MicroTime
|
||||||
|
y *Time
|
||||||
|
}{
|
||||||
|
{"nil <? nil", nil, nil},
|
||||||
|
{"!nil <? !nil", &t1, &t2},
|
||||||
|
{"nil <? !nil", nil, &t2},
|
||||||
|
{"!nil <? nil", &t1, nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.BeforeTime(c.y)
|
||||||
|
if result {
|
||||||
|
t.Errorf("Failed before test for '%v', '%v': expected false, got %+v", c.x, c.y, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMicroTimeIsZero(t *testing.T) {
|
||||||
|
t1 := NewMicroTime(time.Now())
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *MicroTime
|
||||||
|
result bool
|
||||||
|
}{
|
||||||
|
{"nil =? 0", nil, true},
|
||||||
|
{"!nil =? 0", &t1, false},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.IsZero()
|
||||||
|
if result != c.result {
|
||||||
|
t.Errorf("Failed equality test for '%v': expected %+v, got %+v", c.x, c.result, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,11 +41,6 @@ func (t *Time) DeepCopyInto(out *Time) {
|
||||||
*out = *t
|
*out = *t
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns the representation of the time.
|
|
||||||
func (t Time) String() string {
|
|
||||||
return t.Time.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewTime returns a wrapped instance of the provided time
|
// NewTime returns a wrapped instance of the provided time
|
||||||
func NewTime(time time.Time) Time {
|
func NewTime(time time.Time) Time {
|
||||||
return Time{time}
|
return Time{time}
|
||||||
|
@ -72,7 +67,10 @@ func (t *Time) IsZero() bool {
|
||||||
|
|
||||||
// Before reports whether the time instant t is before u.
|
// Before reports whether the time instant t is before u.
|
||||||
func (t *Time) Before(u *Time) bool {
|
func (t *Time) Before(u *Time) bool {
|
||||||
return t.Time.Before(u.Time)
|
if t != nil && u != nil {
|
||||||
|
return t.Time.Before(u.Time)
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equal reports whether the time instant t is equal to u.
|
// Equal reports whether the time instant t is equal to u.
|
||||||
|
|
|
@ -195,3 +195,47 @@ func TestTimeEqual(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTimeBefore(t *testing.T) {
|
||||||
|
t1 := NewTime(time.Now())
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *Time
|
||||||
|
y *Time
|
||||||
|
}{
|
||||||
|
{"nil <? nil", nil, nil},
|
||||||
|
{"!nil <? !nil", &t1, &t1},
|
||||||
|
{"nil <? !nil", nil, &t1},
|
||||||
|
{"!nil <? nil", &t1, nil},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.Before(c.y)
|
||||||
|
if result {
|
||||||
|
t.Errorf("Failed equality test for '%v', '%v': expected false, got %+v", c.x, c.y, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTimeIsZero(t *testing.T) {
|
||||||
|
t1 := NewTime(time.Now())
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
x *Time
|
||||||
|
result bool
|
||||||
|
}{
|
||||||
|
{"nil =? 0", nil, true},
|
||||||
|
{"!nil =? 0", &t1, false},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
result := c.x.IsZero()
|
||||||
|
if result != c.result {
|
||||||
|
t.Errorf("Failed equality test for '%v': expected %+v, got %+v", c.x, c.result, result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue