@@ -1,6 +1,8 @@
1package config
1package config
5 "path/filepath"
7 "path/filepath"
@@ -9,6 +11,17 @@ import (
9 "github.com/stretchr/testify/require"
11 "github.com/stretchr/testify/require"
14+var errDockerUnavailable = errors.New("docker unavailable")
16+func setDockerMCPVersionRunner(t *testing.T, runner func(context.Context) error) {
18+ orig := dockerMCPVersionRunner
19+ dockerMCPVersionRunner = runner
21+ dockerMCPVersionRunner = orig
12func TestIsDockerMCPEnabled(t *testing.T) {
25func TestIsDockerMCPEnabled(t *testing.T) {
13 t.Parallel()
26 t.Parallel()
@@ -43,10 +56,8 @@ func TestIsDockerMCPEnabled(t *testing.T) {
45func TestEnableDockerMCP(t *testing.T) {
58func TestEnableDockerMCP(t *testing.T) {
48 t.Run("adds docker mcp to config", func(t *testing.T) {
59 t.Run("adds docker mcp to config", func(t *testing.T) {
49− t.Parallel()
60+ setDockerMCPVersionRunner(t, func(context.Context) error { return nil })
51 // Create a temporary directory for config.
62 // Create a temporary directory for config.
52 tmpDir := t.TempDir()
63 tmpDir := t.TempDir()
@@ -61,11 +72,6 @@ func TestEnableDockerMCP(t *testing.T) {
61 resolver: NewShellVariableResolver(env.New()),
72 resolver: NewShellVariableResolver(env.New()),
64− // Only run this test if docker mcp is available.
65− if !IsDockerMCPAvailable() {
66− t.Skip("Docker MCP not available, skipping test")
69 err := store.EnableDockerMCP()
75 err := store.EnableDockerMCP()
70 require.NoError(t, err)
76 require.NoError(t, err)
@@ -86,7 +92,7 @@ func TestEnableDockerMCP(t *testing.T) {
88 t.Run("fails when docker mcp not available", func(t *testing.T) {
94 t.Run("fails when docker mcp not available", func(t *testing.T) {
89− t.Parallel()
95+ setDockerMCPVersionRunner(t, func(context.Context) error { return errDockerUnavailable })
91 // Create a temporary directory for config.
97 // Create a temporary directory for config.
92 tmpDir := t.TempDir()
98 tmpDir := t.TempDir()
@@ -101,11 +107,6 @@ func TestEnableDockerMCP(t *testing.T) {
101 resolver: NewShellVariableResolver(env.New()),
107 resolver: NewShellVariableResolver(env.New()),
104− // Skip if docker mcp is actually available.
105− if IsDockerMCPAvailable() {
106− t.Skip("Docker MCP is available, skipping unavailable test")
109 err := store.EnableDockerMCP()
110 err := store.EnableDockerMCP()
110 require.Error(t, err)
111 require.Error(t, err)
111 require.Contains(t, err.Error(), "docker mcp is not available")
112 require.Contains(t, err.Error(), "docker mcp is not available")
@@ -166,3 +167,27 @@ func TestDisableDockerMCP(t *testing.T) {
166 require.NoError(t, err)
167 require.NoError(t, err)
171+func TestEnableDockerMCPWithRealDockerWhenAvailable(t *testing.T) {
174+ if !IsDockerMCPAvailable() {
175+ t.Skip("docker mcp not available on this machine")
178+ tmpDir := t.TempDir()
179+ configPath := filepath.Join(tmpDir, "crush.json")
182+ MCP: make(map[string]MCPConfig),
184+ store := &ConfigStore{
186+ globalDataPath: configPath,
187+ resolver: NewShellVariableResolver(env.New()),
190+ err := store.EnableDockerMCP()
191+ require.NoError(t, err)
192+ require.True(t, cfg.IsDockerMCPEnabled())