(t *testing.T)
| 487 | } |
| 488 | |
| 489 | func TestReconcileContainers_ForceRecreate(t *testing.T) { |
| 490 | svc := types.ServiceConfig{Name: "web", Scale: intPtr(1)} |
| 491 | hash := mustServiceHash(t, svc) |
| 492 | |
| 493 | project := &types.Project{ |
| 494 | Name: "myproject", |
| 495 | Services: types.Services{"web": svc}, |
| 496 | } |
| 497 | observed := &ObservedState{ |
| 498 | ProjectName: "myproject", |
| 499 | Containers: map[string][]ObservedContainer{ |
| 500 | "web": {{ |
| 501 | ID: "c1aabbccddee", Number: 1, State: container.StateRunning, ConfigHash: hash, |
| 502 | Summary: container.Summary{ |
| 503 | ID: "c1aabbccddee", State: container.StateRunning, |
| 504 | Labels: map[string]string{api.ServiceLabel: "web", api.ContainerNumberLabel: "1", api.ConfigHashLabel: hash}, |
| 505 | }, |
| 506 | }}, |
| 507 | }, |
| 508 | Networks: map[string]ObservedNetwork{}, |
| 509 | Volumes: map[string]ObservedVolume{}, |
| 510 | } |
| 511 | |
| 512 | opts := defaultReconcileOptions() |
| 513 | opts.Recreate = api.RecreateForce |
| 514 | |
| 515 | plan, err := reconcile(t.Context(), project, observed, opts, noPrompt) |
| 516 | assert.NilError(t, err) |
| 517 | |
| 518 | assert.Equal(t, plan.String(), strings.TrimSpace(` |
| 519 | [] -> #1 service:web:1, CreateContainer, config changed (tmpName) [recreate:web:1] |
| 520 | [1] -> #2 service:web:1, StopContainer, replaced by #1 [recreate:web:1] |
| 521 | [2] -> #3 service:web:1, RemoveContainer, replaced by #1 [recreate:web:1] |
| 522 | [3] -> #4 service:web:1, RenameContainer, finalize recreate [recreate:web:1] |
| 523 | `)+"\n") |
| 524 | } |
| 525 | |
| 526 | func TestReconcileContainers_NeverRecreate(t *testing.T) { |
| 527 | project := &types.Project{ |
nothing calls this directly
no test coverage detected