123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537 |
- package formatter
- import (
- "bytes"
- "fmt"
- "testing"
- "time"
- "github.com/docker/engine-api/types"
- )
- func TestContainerContextWrite(t *testing.T) {
- unixTime := time.Now().AddDate(0, 0, -1).Unix()
- expectedTime := time.Unix(unixTime, 0).String()
- contexts := []struct {
- context ContainerContext
- expected string
- }{
- // Errors
- {
- ContainerContext{
- Context: Context{
- Format: "{{InvalidFunction}}",
- },
- },
- `Template parsing error: template: :1: function "InvalidFunction" not defined
- `,
- },
- {
- ContainerContext{
- Context: Context{
- Format: "{{nil}}",
- },
- },
- `Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
- `,
- },
- // Table Format
- {
- ContainerContext{
- Context: Context{
- Format: "table",
- },
- },
- `CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- containerID1 ubuntu "" 24 hours ago foobar_baz
- containerID2 ubuntu "" 24 hours ago foobar_bar
- `,
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}",
- },
- },
- "IMAGE\nubuntu\nubuntu\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}",
- },
- Size: true,
- },
- "IMAGE\nubuntu\nubuntu\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}",
- Quiet: true,
- },
- },
- "IMAGE\nubuntu\nubuntu\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table",
- Quiet: true,
- },
- },
- "containerID1\ncontainerID2\n",
- },
- // Raw Format
- {
- ContainerContext{
- Context: Context{
- Format: "raw",
- },
- },
- fmt.Sprintf(`container_id: containerID1
- image: ubuntu
- command: ""
- created_at: %s
- status:
- names: foobar_baz
- labels:
- ports:
- container_id: containerID2
- image: ubuntu
- command: ""
- created_at: %s
- status:
- names: foobar_bar
- labels:
- ports:
- `, expectedTime, expectedTime),
- },
- {
- ContainerContext{
- Context: Context{
- Format: "raw",
- },
- Size: true,
- },
- fmt.Sprintf(`container_id: containerID1
- image: ubuntu
- command: ""
- created_at: %s
- status:
- names: foobar_baz
- labels:
- ports:
- size: 0 B
- container_id: containerID2
- image: ubuntu
- command: ""
- created_at: %s
- status:
- names: foobar_bar
- labels:
- ports:
- size: 0 B
- `, expectedTime, expectedTime),
- },
- {
- ContainerContext{
- Context: Context{
- Format: "raw",
- Quiet: true,
- },
- },
- "container_id: containerID1\ncontainer_id: containerID2\n",
- },
- // Custom Format
- {
- ContainerContext{
- Context: Context{
- Format: "{{.Image}}",
- },
- },
- "ubuntu\nubuntu\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "{{.Image}}",
- },
- Size: true,
- },
- "ubuntu\nubuntu\n",
- },
- }
- for _, context := range contexts {
- containers := []types.Container{
- {ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unixTime},
- {ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unixTime},
- }
- out := bytes.NewBufferString("")
- context.context.Output = out
- context.context.Containers = containers
- context.context.Write()
- actual := out.String()
- if actual != context.expected {
- t.Fatalf("Expected \n%s, got \n%s", context.expected, actual)
- }
- // Clean buffer
- out.Reset()
- }
- }
- func TestContainerContextWriteWithNoContainers(t *testing.T) {
- out := bytes.NewBufferString("")
- containers := []types.Container{}
- contexts := []struct {
- context ContainerContext
- expected string
- }{
- {
- ContainerContext{
- Context: Context{
- Format: "{{.Image}}",
- Output: out,
- },
- },
- "",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}",
- Output: out,
- },
- },
- "IMAGE\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "{{.Image}}",
- Output: out,
- },
- Size: true,
- },
- "",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}",
- Output: out,
- },
- Size: true,
- },
- "IMAGE\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}\t{{.Size}}",
- Output: out,
- },
- },
- "IMAGE SIZE\n",
- },
- {
- ContainerContext{
- Context: Context{
- Format: "table {{.Image}}\t{{.Size}}",
- Output: out,
- },
- Size: true,
- },
- "IMAGE SIZE\n",
- },
- }
- for _, context := range contexts {
- context.context.Containers = containers
- context.context.Write()
- actual := out.String()
- if actual != context.expected {
- t.Fatalf("Expected \n%s, got \n%s", context.expected, actual)
- }
- // Clean buffer
- out.Reset()
- }
- }
- func TestImageContextWrite(t *testing.T) {
- unixTime := time.Now().AddDate(0, 0, -1).Unix()
- expectedTime := time.Unix(unixTime, 0).String()
- contexts := []struct {
- context ImageContext
- expected string
- }{
- // Errors
- {
- ImageContext{
- Context: Context{
- Format: "{{InvalidFunction}}",
- },
- },
- `Template parsing error: template: :1: function "InvalidFunction" not defined
- `,
- },
- {
- ImageContext{
- Context: Context{
- Format: "{{nil}}",
- },
- },
- `Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
- `,
- },
- // Table Format
- {
- ImageContext{
- Context: Context{
- Format: "table",
- },
- },
- `REPOSITORY TAG IMAGE ID CREATED SIZE
- image tag1 imageID1 24 hours ago 0 B
- image tag2 imageID2 24 hours ago 0 B
- <none> <none> imageID3 24 hours ago 0 B
- `,
- },
- {
- ImageContext{
- Context: Context{
- Format: "table {{.Repository}}",
- },
- },
- "REPOSITORY\nimage\nimage\n<none>\n",
- },
- {
- ImageContext{
- Context: Context{
- Format: "table {{.Repository}}",
- },
- Digest: true,
- },
- `REPOSITORY DIGEST
- image sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
- image <none>
- <none> <none>
- `,
- },
- {
- ImageContext{
- Context: Context{
- Format: "table {{.Repository}}",
- Quiet: true,
- },
- },
- "REPOSITORY\nimage\nimage\n<none>\n",
- },
- {
- ImageContext{
- Context: Context{
- Format: "table",
- Quiet: true,
- },
- },
- "imageID1\nimageID2\nimageID3\n",
- },
- {
- ImageContext{
- Context: Context{
- Format: "table",
- Quiet: false,
- },
- Digest: true,
- },
- `REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
- image tag1 sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf imageID1 24 hours ago 0 B
- image tag2 <none> imageID2 24 hours ago 0 B
- <none> <none> <none> imageID3 24 hours ago 0 B
- `,
- },
- {
- ImageContext{
- Context: Context{
- Format: "table",
- Quiet: true,
- },
- Digest: true,
- },
- "imageID1\nimageID2\nimageID3\n",
- },
- // Raw Format
- {
- ImageContext{
- Context: Context{
- Format: "raw",
- },
- },
- fmt.Sprintf(`repository: image
- tag: tag1
- image_id: imageID1
- created_at: %s
- virtual_size: 0 B
- repository: image
- tag: tag2
- image_id: imageID2
- created_at: %s
- virtual_size: 0 B
- repository: <none>
- tag: <none>
- image_id: imageID3
- created_at: %s
- virtual_size: 0 B
- `, expectedTime, expectedTime, expectedTime),
- },
- {
- ImageContext{
- Context: Context{
- Format: "raw",
- },
- Digest: true,
- },
- fmt.Sprintf(`repository: image
- tag: tag1
- digest: sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
- image_id: imageID1
- created_at: %s
- virtual_size: 0 B
- repository: image
- tag: tag2
- digest: <none>
- image_id: imageID2
- created_at: %s
- virtual_size: 0 B
- repository: <none>
- tag: <none>
- digest: <none>
- image_id: imageID3
- created_at: %s
- virtual_size: 0 B
- `, expectedTime, expectedTime, expectedTime),
- },
- {
- ImageContext{
- Context: Context{
- Format: "raw",
- Quiet: true,
- },
- },
- `image_id: imageID1
- image_id: imageID2
- image_id: imageID3
- `,
- },
- // Custom Format
- {
- ImageContext{
- Context: Context{
- Format: "{{.Repository}}",
- },
- },
- "image\nimage\n<none>\n",
- },
- {
- ImageContext{
- Context: Context{
- Format: "{{.Repository}}",
- },
- Digest: true,
- },
- "image\nimage\n<none>\n",
- },
- }
- for _, context := range contexts {
- images := []types.Image{
- {ID: "imageID1", RepoTags: []string{"image:tag1"}, RepoDigests: []string{"image@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"}, Created: unixTime},
- {ID: "imageID2", RepoTags: []string{"image:tag2"}, Created: unixTime},
- {ID: "imageID3", RepoTags: []string{"<none>:<none>"}, RepoDigests: []string{"<none>@<none>"}, Created: unixTime},
- }
- out := bytes.NewBufferString("")
- context.context.Output = out
- context.context.Images = images
- context.context.Write()
- actual := out.String()
- if actual != context.expected {
- t.Fatalf("Expected \n%s, got \n%s", context.expected, actual)
- }
- // Clean buffer
- out.Reset()
- }
- }
- func TestImageContextWriteWithNoImage(t *testing.T) {
- out := bytes.NewBufferString("")
- images := []types.Image{}
- contexts := []struct {
- context ImageContext
- expected string
- }{
- {
- ImageContext{
- Context: Context{
- Format: "{{.Repository}}",
- Output: out,
- },
- },
- "",
- },
- {
- ImageContext{
- Context: Context{
- Format: "table {{.Repository}}",
- Output: out,
- },
- },
- "REPOSITORY\n",
- },
- {
- ImageContext{
- Context: Context{
- Format: "{{.Repository}}",
- Output: out,
- },
- Digest: true,
- },
- "",
- },
- {
- ImageContext{
- Context: Context{
- Format: "table {{.Repository}}",
- Output: out,
- },
- Digest: true,
- },
- "REPOSITORY DIGEST\n",
- },
- }
- for _, context := range contexts {
- context.context.Images = images
- context.context.Write()
- actual := out.String()
- if actual != context.expected {
- t.Fatalf("Expected \n%s, got \n%s", context.expected, actual)
- }
- // Clean buffer
- out.Reset()
- }
- }
|