mirror of https://github.com/k3s-io/k3s
127 lines
3.1 KiB
Go
127 lines
3.1 KiB
Go
![]() |
package util
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"gopkg.in/v1/yaml"
|
||
|
)
|
||
|
|
||
|
type TimeHolder struct {
|
||
|
T Time `json:"t" yaml:"t"`
|
||
|
}
|
||
|
|
||
|
func TestTimeMarshalYAML(t *testing.T) {
|
||
|
cases := []struct {
|
||
|
input Time
|
||
|
result string
|
||
|
}{
|
||
|
{Time{}, "t: \"null\"\n"},
|
||
|
{Date(1998, time.May, 5, 5, 5, 5, 50, time.UTC), "t: 1998-05-05T05:05:05Z\n"},
|
||
|
{Date(1998, time.May, 5, 5, 5, 5, 0, time.UTC), "t: 1998-05-05T05:05:05Z\n"},
|
||
|
}
|
||
|
|
||
|
for _, c := range cases {
|
||
|
input := TimeHolder{c.input}
|
||
|
result, err := yaml.Marshal(&input)
|
||
|
if err != nil {
|
||
|
t.Errorf("Failed to marshal input: '%v': %v", input, err)
|
||
|
}
|
||
|
if string(result) != c.result {
|
||
|
t.Errorf("Failed to marshal input: '%v': expected %+v, got %q", input, c.result, string(result))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestTimeUnmarshalYAML(t *testing.T) {
|
||
|
cases := []struct {
|
||
|
input string
|
||
|
result Time
|
||
|
}{
|
||
|
{"t: \"null\"\n", Time{}},
|
||
|
{"t: 1998-05-05T05:05:05Z\n", Date(1998, time.May, 5, 5, 5, 5, 0, time.UTC)},
|
||
|
}
|
||
|
|
||
|
for _, c := range cases {
|
||
|
var result TimeHolder
|
||
|
if err := yaml.Unmarshal([]byte(c.input), &result); err != nil {
|
||
|
t.Errorf("Failed to unmarshal input '%v': %v", c.input, err)
|
||
|
}
|
||
|
if result.T != c.result {
|
||
|
t.Errorf("Failed to unmarshal input '%v': expected %+v, got %+v", c.input, c.result, result)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestTimeMarshalJSON(t *testing.T) {
|
||
|
cases := []struct {
|
||
|
input Time
|
||
|
result string
|
||
|
}{
|
||
|
{Time{}, "{\"t\":null}"},
|
||
|
{Date(1998, time.May, 5, 5, 5, 5, 50, time.UTC), "{\"t\":\"1998-05-05T05:05:05Z\"}"},
|
||
|
{Date(1998, time.May, 5, 5, 5, 5, 0, time.UTC), "{\"t\":\"1998-05-05T05:05:05Z\"}"},
|
||
|
}
|
||
|
|
||
|
for _, c := range cases {
|
||
|
input := TimeHolder{c.input}
|
||
|
result, err := json.Marshal(&input)
|
||
|
if err != nil {
|
||
|
t.Errorf("Failed to marshal input: '%v': %v", input, err)
|
||
|
}
|
||
|
if string(result) != c.result {
|
||
|
t.Errorf("Failed to marshal input: '%v': expected %+v, got %q", input, c.result, string(result))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestTimeUnmarshalJSON(t *testing.T) {
|
||
|
cases := []struct {
|
||
|
input string
|
||
|
result Time
|
||
|
}{
|
||
|
{"{\"t\":null}", Time{}},
|
||
|
{"{\"t\":\"1998-05-05T05:05:05Z\"}", Date(1998, time.May, 5, 5, 5, 5, 0, time.UTC)},
|
||
|
}
|
||
|
|
||
|
for _, c := range cases {
|
||
|
var result TimeHolder
|
||
|
if err := json.Unmarshal([]byte(c.input), &result); err != nil {
|
||
|
t.Errorf("Failed to unmarshal input '%v': %v", c.input, err)
|
||
|
}
|
||
|
if result.T != c.result {
|
||
|
t.Errorf("Failed to unmarshal input '%v': expected %+v, got %+v", c.input, c.result, result)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestTimeMarshalJSONUnmarshalYAML(t *testing.T) {
|
||
|
cases := []struct {
|
||
|
input Time
|
||
|
}{
|
||
|
{Time{}},
|
||
|
{Date(1998, time.May, 5, 5, 5, 5, 50, time.UTC).Rfc3339Copy()},
|
||
|
{Date(1998, time.May, 5, 5, 5, 5, 0, time.UTC).Rfc3339Copy()},
|
||
|
}
|
||
|
|
||
|
for _, c := range cases {
|
||
|
input := TimeHolder{c.input}
|
||
|
jsonMarshalled, err := json.Marshal(&input)
|
||
|
if err != nil {
|
||
|
t.Errorf("1: Failed to marshal input: '%v': %v", input, err)
|
||
|
}
|
||
|
|
||
|
var result TimeHolder
|
||
|
err = yaml.Unmarshal(jsonMarshalled, &result)
|
||
|
if err != nil {
|
||
|
t.Errorf("2: Failed to unmarshall '%+v': %v", string(jsonMarshalled), err)
|
||
|
}
|
||
|
|
||
|
if !reflect.DeepEqual(input, result) {
|
||
|
t.Errorf("3: Failed to marshal input '%+v': got %+v", input, result)
|
||
|
}
|
||
|
}
|
||
|
}
|