test: add error path tests for network detection
Cover edge cases when NetworkSettings.Networks is empty or nil, verifying fallback to "bridge" default.
- commit
- 5990f33fc9e6e2fda8a9305a4f1f2998a864daab
- author
- brice · · 2026-01-17 11:42 UTC
- parent
- 13bac49
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
1 file · +48 -0
M internal/adapters/out/docker/network_test.go +48 -0
| @@ -68,3 +68,51 @@ func TestRuntime_GetContainerNetwork_Fallback(t *testing.T) { | |||
| 68 | 68 | assert.NoError(t, err) | |
| 69 | 69 | assert.Equal(t, "bridge", network) | |
| 70 | 70 | } | |
| 71 | + | ||
| 72 | + | func TestRuntime_GetContainerNetwork_EmptyNetworks(t *testing.T) { | |
| 73 | + | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | |
| 74 | + | assert.Equal(t, http.MethodGet, r.Method) | |
| 75 | + | assert.Equal(t, "/v1.41/containers/abc123/json", r.URL.Path) | |
| 76 | + | w.Header().Set("Content-Type", "application/json") | |
| 77 | + | _, _ = w.Write([]byte(`{ | |
| 78 | + | "NetworkSettings": { | |
| 79 | + | "Networks": {} | |
| 80 | + | } | |
| 81 | + | }`)) | |
| 82 | + | })) | |
| 83 | + | defer server.Close() | |
| 84 | + | ||
| 85 | + | host := strings.TrimPrefix(server.URL, "http://") | |
| 86 | + | cli, err := client.NewClientWithOpts(client.WithHost("tcp://"+host), client.WithVersion("1.41"), client.WithHTTPClient(server.Client())) | |
| 87 | + | if err != nil { | |
| 88 | + | t.Fatalf("failed to create docker client: %v", err) | |
| 89 | + | } | |
| 90 | + | ||
| 91 | + | runtime := NewRuntimeWithClient(cli) | |
| 92 | + | network, err := runtime.GetContainerNetwork(context.Background(), "abc123") | |
| 93 | + | ||
| 94 | + | assert.NoError(t, err) | |
| 95 | + | assert.Equal(t, "bridge", network) | |
| 96 | + | } | |
| 97 | + | ||
| 98 | + | func TestRuntime_GetContainerNetwork_NilNetworkSettings(t *testing.T) { | |
| 99 | + | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | |
| 100 | + | assert.Equal(t, http.MethodGet, r.Method) | |
| 101 | + | assert.Equal(t, "/v1.41/containers/abc123/json", r.URL.Path) | |
| 102 | + | w.Header().Set("Content-Type", "application/json") | |
| 103 | + | _, _ = w.Write([]byte(`{}`)) | |
| 104 | + | })) | |
| 105 | + | defer server.Close() | |
| 106 | + | ||
| 107 | + | host := strings.TrimPrefix(server.URL, "http://") | |
| 108 | + | cli, err := client.NewClientWithOpts(client.WithHost("tcp://"+host), client.WithVersion("1.41"), client.WithHTTPClient(server.Client())) | |
| 109 | + | if err != nil { | |
| 110 | + | t.Fatalf("failed to create docker client: %v", err) | |
| 111 | + | } | |
| 112 | + | ||
| 113 | + | runtime := NewRuntimeWithClient(cli) | |
| 114 | + | network, err := runtime.GetContainerNetwork(context.Background(), "abc123") | |
| 115 | + | ||
| 116 | + | assert.NoError(t, err) | |
| 117 | + | assert.Equal(t, "bridge", network) | |
| 118 | + | } | |
| @@ -68,3 +68,51 @@ func TestRuntime_GetContainerNetwork_Fallback(t *testing.T) { | |||||
| 68 | assert.NoError(t, err) | 68 | assert.NoError(t, err) | ||
| 69 | assert.Equal(t, "bridge", network) | 69 | assert.Equal(t, "bridge", network) | ||
| 70 | } | 70 | } | ||
| 71 | + | ||||
| 72 | + | func TestRuntime_GetContainerNetwork_EmptyNetworks(t *testing.T) { | |||
| 73 | + | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | |||
| 74 | + | assert.Equal(t, http.MethodGet, r.Method) | |||
| 75 | + | assert.Equal(t, "/v1.41/containers/abc123/json", r.URL.Path) | |||
| 76 | + | w.Header().Set("Content-Type", "application/json") | |||
| 77 | + | _, _ = w.Write([]byte(`{ | |||
| 78 | + | "NetworkSettings": { | |||
| 79 | + | "Networks": {} | |||
| 80 | + | } | |||
| 81 | + | }`)) | |||
| 82 | + | })) | |||
| 83 | + | defer server.Close() | |||
| 84 | + | ||||
| 85 | + | host := strings.TrimPrefix(server.URL, "http://") | |||
| 86 | + | cli, err := client.NewClientWithOpts(client.WithHost("tcp://"+host), client.WithVersion("1.41"), client.WithHTTPClient(server.Client())) | |||
| 87 | + | if err != nil { | |||
| 88 | + | t.Fatalf("failed to create docker client: %v", err) | |||
| 89 | + | } | |||
| 90 | + | ||||
| 91 | + | runtime := NewRuntimeWithClient(cli) | |||
| 92 | + | network, err := runtime.GetContainerNetwork(context.Background(), "abc123") | |||
| 93 | + | ||||
| 94 | + | assert.NoError(t, err) | |||
| 95 | + | assert.Equal(t, "bridge", network) | |||
| 96 | + | } | |||
| 97 | + | ||||
| 98 | + | func TestRuntime_GetContainerNetwork_NilNetworkSettings(t *testing.T) { | |||
| 99 | + | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | |||
| 100 | + | assert.Equal(t, http.MethodGet, r.Method) | |||
| 101 | + | assert.Equal(t, "/v1.41/containers/abc123/json", r.URL.Path) | |||
| 102 | + | w.Header().Set("Content-Type", "application/json") | |||
| 103 | + | _, _ = w.Write([]byte(`{}`)) | |||
| 104 | + | })) | |||
| 105 | + | defer server.Close() | |||
| 106 | + | ||||
| 107 | + | host := strings.TrimPrefix(server.URL, "http://") | |||
| 108 | + | cli, err := client.NewClientWithOpts(client.WithHost("tcp://"+host), client.WithVersion("1.41"), client.WithHTTPClient(server.Client())) | |||
| 109 | + | if err != nil { | |||
| 110 | + | t.Fatalf("failed to create docker client: %v", err) | |||
| 111 | + | } | |||
| 112 | + | ||||
| 113 | + | runtime := NewRuntimeWithClient(cli) | |||
| 114 | + | network, err := runtime.GetContainerNetwork(context.Background(), "abc123") | |||
| 115 | + | ||||
| 116 | + | assert.NoError(t, err) | |||
| 117 | + | assert.Equal(t, "bridge", network) | |||
| 118 | + | } | |||