Something went wrong. Try again.
dockscope is a TUI for viewing Docker containers, logs, metrics and other info, inspired by lazydocker and dtop.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135//go:build integration
package docker
import ( "testing")
func TestListContainersAgainstLiveDaemon(t *testing.T) { cli, err := New() if err != nil { t.Skipf("Docker daemon not available: %v", err)
return }
defer func() { if err := cli.Close(); err != nil { t.Logf("close failed: %v", err) } }()
containers, err := cli.ListContainers(t.Context()) if err != nil { t.Fatalf("ListContainers: %v", err) }
for i, c := range containers { if c.ID == "" { t.Errorf("container %d has empty ID", i) }
if c.Name == "" { t.Errorf("container %d has empty Name", i) }
if c.State == "" { t.Errorf("container %d has empty State", i) }
if c.Image == "" { t.Errorf("container %d has empty Image", i) }
if len(c.Name) > 0 && c.Name[0] == '/' { t.Errorf("container %d name %q has leading slash", i, c.Name) } }
t.Logf("found %d containers", len(containers))
for _, c := range containers { t.Logf(" %s: %s (%s)", c.Name, c.State, c.Status) }}
func TestConfigEndpointsAgainstLiveDaemon(t *testing.T) { cli, err := New() if err != nil { t.Skipf("Docker daemon not available: %v", err)
return }
defer func() { if err := cli.Close(); err != nil { t.Logf("close failed: %v", err) } }()
ctx := t.Context()
images, err := cli.ListImages(ctx) if err != nil { t.Fatalf("ListImages: %v", err) }
for i, img := range images { if img.ID == "" { t.Errorf("image %d has empty ID", i) }
if len(img.RepoTags) == 0 { t.Errorf("image %d has no repo tags (dangling should be filtered)", i) } }
t.Logf("found %d images", len(images))
volumes, err := cli.ListVolumes(ctx) if err != nil { t.Fatalf("ListVolumes: %v", err) }
t.Logf("found %d volumes", len(volumes))
networks, err := cli.ListNetworks(ctx) if err != nil { t.Fatalf("ListNetworks: %v", err) }
for i, n := range networks { if n.Name == "" { t.Errorf("network %d has empty Name", i) } }
t.Logf("found %d networks", len(networks))
containers, err := cli.ListContainers(ctx) if err != nil { t.Fatalf("ListContainers: %v", err) }
if len(containers) == 0 { t.Skip("no containers running; skipping inspect/history checks") }
cfg, err := cli.InspectContainerConfig(ctx, containers[0].ID) if err != nil { t.Fatalf("InspectContainerConfig: %v", err) }
t.Logf("container %s: image=%s status=%s env=%d vars", containers[0].Name, cfg.Image, cfg.Status, len(cfg.Env))
if len(images) > 0 { layers, err := cli.ImageHistory(ctx, images[0].ID) if err != nil { t.Fatalf("ImageHistory: %v", err) }
t.Logf("image %s has %d layers", images[0].RepoTags[0], len(layers)) }}