| package runconfig |
| |
| import ( |
| "bytes" |
| "encoding/json" |
| "fmt" |
| "io/ioutil" |
| "testing" |
| ) |
| |
| func TestEntrypointMarshalJSON(t *testing.T) { |
| entrypoints := map[*Entrypoint]string{ |
| nil: "", |
| &Entrypoint{}: "null", |
| &Entrypoint{[]string{"/bin/sh", "-c", "echo"}}: `["/bin/sh","-c","echo"]`, |
| } |
| |
| for entrypoint, expected := range entrypoints { |
| data, err := entrypoint.MarshalJSON() |
| if err != nil { |
| t.Fatal(err) |
| } |
| if string(data) != expected { |
| t.Fatalf("Expected %v, got %v", expected, string(data)) |
| } |
| } |
| } |
| |
| func TestEntrypointUnmarshalJSON(t *testing.T) { |
| parts := map[string][]string{ |
| "": {"default", "values"}, |
| "[]": {}, |
| `["/bin/sh","-c","echo"]`: {"/bin/sh", "-c", "echo"}, |
| } |
| for json, expectedParts := range parts { |
| entrypoint := &Entrypoint{ |
| []string{"default", "values"}, |
| } |
| if err := entrypoint.UnmarshalJSON([]byte(json)); err != nil { |
| t.Fatal(err) |
| } |
| |
| actualParts := entrypoint.Slice() |
| if len(actualParts) != len(expectedParts) { |
| t.Fatalf("Expected %v parts, got %v (%v)", len(expectedParts), len(actualParts), expectedParts) |
| } |
| for index, part := range actualParts { |
| if part != expectedParts[index] { |
| t.Fatalf("Expected %v, got %v", expectedParts, actualParts) |
| break |
| } |
| } |
| } |
| } |
| |
| func TestCommandToString(t *testing.T) { |
| commands := map[*Command]string{ |
| &Command{[]string{""}}: "", |
| &Command{[]string{"one"}}: "one", |
| &Command{[]string{"one", "two"}}: "one two", |
| } |
| for command, expected := range commands { |
| toString := command.ToString() |
| if toString != expected { |
| t.Fatalf("Expected %v, got %v", expected, toString) |
| } |
| } |
| } |
| |
| func TestCommandMarshalJSON(t *testing.T) { |
| commands := map[*Command]string{ |
| nil: "", |
| &Command{}: "null", |
| &Command{[]string{"/bin/sh", "-c", "echo"}}: `["/bin/sh","-c","echo"]`, |
| } |
| |
| for command, expected := range commands { |
| data, err := command.MarshalJSON() |
| if err != nil { |
| t.Fatal(err) |
| } |
| if string(data) != expected { |
| t.Fatalf("Expected %v, got %v", expected, string(data)) |
| } |
| } |
| } |
| |
| func TestCommandUnmarshalJSON(t *testing.T) { |
| parts := map[string][]string{ |
| "": {"default", "values"}, |
| "[]": {}, |
| `["/bin/sh","-c","echo"]`: {"/bin/sh", "-c", "echo"}, |
| } |
| for json, expectedParts := range parts { |
| command := &Command{ |
| []string{"default", "values"}, |
| } |
| if err := command.UnmarshalJSON([]byte(json)); err != nil { |
| t.Fatal(err) |
| } |
| |
| actualParts := command.Slice() |
| if len(actualParts) != len(expectedParts) { |
| t.Fatalf("Expected %v parts, got %v (%v)", len(expectedParts), len(actualParts), expectedParts) |
| } |
| for index, part := range actualParts { |
| if part != expectedParts[index] { |
| t.Fatalf("Expected %v, got %v", expectedParts, actualParts) |
| break |
| } |
| } |
| } |
| } |
| |
| func TestDecodeContainerConfig(t *testing.T) { |
| fixtures := []struct { |
| file string |
| entrypoint *Entrypoint |
| }{ |
| {"fixtures/container_config_1_14.json", NewEntrypoint()}, |
| {"fixtures/container_config_1_17.json", NewEntrypoint("bash")}, |
| {"fixtures/container_config_1_19.json", NewEntrypoint("bash")}, |
| } |
| |
| for _, f := range fixtures { |
| b, err := ioutil.ReadFile(f.file) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| c, h, err := DecodeContainerConfig(bytes.NewReader(b)) |
| if err != nil { |
| t.Fatal(fmt.Errorf("Error parsing %s: %v", f, err)) |
| } |
| |
| if c.Image != "ubuntu" { |
| t.Fatalf("Expected ubuntu image, found %s\n", c.Image) |
| } |
| |
| if c.Entrypoint.Len() != f.entrypoint.Len() { |
| t.Fatalf("Expected %v, found %v\n", f.entrypoint, c.Entrypoint) |
| } |
| |
| if h.Memory != 1000 { |
| t.Fatalf("Expected memory to be 1000, found %d\n", h.Memory) |
| } |
| } |
| } |
| |
| func TestEntrypointUnmarshalString(t *testing.T) { |
| var e *Entrypoint |
| echo, err := json.Marshal("echo") |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err := json.Unmarshal(echo, &e); err != nil { |
| t.Fatal(err) |
| } |
| |
| slice := e.Slice() |
| if len(slice) != 1 { |
| t.Fatalf("expected 1 element after unmarshal: %q", slice) |
| } |
| |
| if slice[0] != "echo" { |
| t.Fatalf("expected `echo`, got: %q", slice[0]) |
| } |
| } |
| |
| func TestEntrypointUnmarshalSlice(t *testing.T) { |
| var e *Entrypoint |
| echo, err := json.Marshal([]string{"echo"}) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err := json.Unmarshal(echo, &e); err != nil { |
| t.Fatal(err) |
| } |
| |
| slice := e.Slice() |
| if len(slice) != 1 { |
| t.Fatalf("expected 1 element after unmarshal: %q", slice) |
| } |
| |
| if slice[0] != "echo" { |
| t.Fatalf("expected `echo`, got: %q", slice[0]) |
| } |
| } |
| |
| func TestCommandUnmarshalSlice(t *testing.T) { |
| var e *Command |
| echo, err := json.Marshal([]string{"echo"}) |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err := json.Unmarshal(echo, &e); err != nil { |
| t.Fatal(err) |
| } |
| |
| slice := e.Slice() |
| if len(slice) != 1 { |
| t.Fatalf("expected 1 element after unmarshal: %q", slice) |
| } |
| |
| if slice[0] != "echo" { |
| t.Fatalf("expected `echo`, got: %q", slice[0]) |
| } |
| } |
| |
| func TestCommandUnmarshalString(t *testing.T) { |
| var e *Command |
| echo, err := json.Marshal("echo") |
| if err != nil { |
| t.Fatal(err) |
| } |
| if err := json.Unmarshal(echo, &e); err != nil { |
| t.Fatal(err) |
| } |
| |
| slice := e.Slice() |
| if len(slice) != 1 { |
| t.Fatalf("expected 1 element after unmarshal: %q", slice) |
| } |
| |
| if slice[0] != "echo" { |
| t.Fatalf("expected `echo`, got: %q", slice[0]) |
| } |
| } |