From fa0b23f30bde82f0922ae7511eda5886203b3bd8 Mon Sep 17 00:00:00 2001 From: Vidya Sagar Reddy Desu <35026133+vidya381@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:32:05 -0600 Subject: [PATCH 1/4] add DockerDaemonCheck --- internal/check/docker.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 internal/check/docker.go diff --git a/internal/check/docker.go b/internal/check/docker.go new file mode 100644 index 0000000..db81a5c --- /dev/null +++ b/internal/check/docker.go @@ -0,0 +1,29 @@ +package check + +import ( + "context" + "os/exec" +) + +type DockerDaemonCheck struct{} + +func (c *DockerDaemonCheck) Name() string { + return "Docker daemon running" +} + +func (c *DockerDaemonCheck) Run(_ context.Context) Result { + err := exec.Command("docker", "info").Run() + if err != nil { + return Result{ + Name: c.Name(), + Status: StatusFail, + Message: "Docker daemon is not running", + Fix: "start Docker and try again", + } + } + return Result{ + Name: c.Name(), + Status: StatusPass, + Message: "Docker daemon is running", + } +} From b2e72aad1ec9451cb169691881738831ea7176a1 Mon Sep 17 00:00:00 2001 From: Vidya Sagar Reddy Desu <35026133+vidya381@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:41:18 -0600 Subject: [PATCH 2/4] register docker binary and daemon checks --- internal/check/registry.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/check/registry.go b/internal/check/registry.go index 9faa351..de5f99d 100644 --- a/internal/check/registry.go +++ b/internal/check/registry.go @@ -26,7 +26,8 @@ func Build(stack detector.DetectedStack) []Check { } } if stack.Docker { - // add Docker checks + cs = append(cs, &BinaryCheck{Binary: "docker"}) + cs = append(cs, &DockerDaemonCheck{}) } if stack.Postgres { // add Postgres checks From 157de4a12606727a50952cfd2ae1771d4cd335bb Mon Sep 17 00:00:00 2001 From: Vidya Sagar Reddy Desu <35026133+vidya381@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:44:15 -0600 Subject: [PATCH 3/4] make DockerDaemonCheck runner injectable for testing --- internal/check/docker.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/check/docker.go b/internal/check/docker.go index db81a5c..0bf4e21 100644 --- a/internal/check/docker.go +++ b/internal/check/docker.go @@ -5,15 +5,23 @@ import ( "os/exec" ) -type DockerDaemonCheck struct{} +type DockerDaemonCheck struct { + runner func() error +} func (c *DockerDaemonCheck) Name() string { return "Docker daemon running" } func (c *DockerDaemonCheck) Run(_ context.Context) Result { - err := exec.Command("docker", "info").Run() - if err != nil { + run := c.runner + if run == nil { + run = func() error { + return exec.Command("docker", "info").Run() + } + } + + if err := run(); err != nil { return Result{ Name: c.Name(), Status: StatusFail, From 6fff7c28f36a45f005be66640e36f7c2e2f98a40 Mon Sep 17 00:00:00 2001 From: Vidya Sagar Reddy Desu <35026133+vidya381@users.noreply.github.com> Date: Sat, 28 Feb 2026 20:44:55 -0600 Subject: [PATCH 4/4] add tests for DockerDaemonCheck --- internal/check/docker_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 internal/check/docker_test.go diff --git a/internal/check/docker_test.go b/internal/check/docker_test.go new file mode 100644 index 0000000..58ef359 --- /dev/null +++ b/internal/check/docker_test.go @@ -0,0 +1,23 @@ +package check + +import ( + "context" + "errors" + "testing" +) + +func TestDockerDaemonCheck_Pass(t *testing.T) { + c := &DockerDaemonCheck{runner: func() error { return nil }} + result := c.Run(context.Background()) + if result.Status != StatusPass { + t.Errorf("expected pass, got %v: %s", result.Status, result.Message) + } +} + +func TestDockerDaemonCheck_Fail(t *testing.T) { + c := &DockerDaemonCheck{runner: func() error { return errors.New("daemon not running") }} + result := c.Run(context.Background()) + if result.Status != StatusFail { + t.Errorf("expected fail, got %v", result.Status) + } +}