(t *testing.T)
| 152 | } |
| 153 | |
| 154 | func TestPreStart_ImageFallsBackToBuiltImage(t *testing.T) { |
| 155 | tested, apiClient := newPreStartTestService(t) |
| 156 | |
| 157 | project := &types.Project{Name: "demo"} |
| 158 | // Service with no explicit image (build-only); hook image also empty. |
| 159 | service := types.ServiceConfig{ |
| 160 | Name: "web", |
| 161 | PreStart: []types.ServiceHook{ |
| 162 | {Command: types.ShellCommand{"echo", "hi"}}, |
| 163 | }, |
| 164 | } |
| 165 | ctr := container.Summary{ID: "service-ctr-id"} |
| 166 | |
| 167 | var gotImage string |
| 168 | apiClient.EXPECT().ContainerCreate(gomock.Any(), gomock.Any()). |
| 169 | DoAndReturn(func(_ any, opts client.ContainerCreateOptions) (client.ContainerCreateResult, error) { |
| 170 | gotImage = opts.Config.Image |
| 171 | return client.ContainerCreateResult{ID: "hook-1"}, nil |
| 172 | }) |
| 173 | apiClient.EXPECT().ContainerStart(gomock.Any(), "hook-1", gomock.Any()). |
| 174 | Return(client.ContainerStartResult{}, nil) |
| 175 | apiClient.EXPECT().ContainerLogs(gomock.Any(), "hook-1", gomock.Any()). |
| 176 | Return(emptyLogs(), nil) |
| 177 | apiClient.EXPECT().ContainerWait(gomock.Any(), "hook-1", gomock.Any()). |
| 178 | Return(waitResultExit(0)) |
| 179 | |
| 180 | err := tested.runPreStart(t.Context(), project, service, ctr, func(api.ContainerEvent) {}) |
| 181 | assert.NilError(t, err) |
| 182 | assert.Equal(t, gotImage, api.GetImageNameOrDefault(service, project.Name)) |
| 183 | } |
| 184 | |
| 185 | func TestPreStart_ExplicitHookImageUsed(t *testing.T) { |
| 186 | tested, apiClient := newPreStartTestService(t) |
nothing calls this directly
no test coverage detected