(t *testing.T)
| 110 | } |
| 111 | |
| 112 | func TestReconcileNetworks_Diverged(t *testing.T) { |
| 113 | project := &types.Project{ |
| 114 | Name: "myproject", |
| 115 | Networks: types.Networks{ |
| 116 | "frontend": {Name: "myproject_frontend", Driver: "overlay"}, |
| 117 | }, |
| 118 | Services: types.Services{ |
| 119 | "web": { |
| 120 | Name: "web", |
| 121 | Scale: intPtr(1), |
| 122 | Networks: map[string]*types.ServiceNetworkConfig{"frontend": {}}, |
| 123 | }, |
| 124 | }, |
| 125 | } |
| 126 | observed := &ObservedState{ |
| 127 | ProjectName: "myproject", |
| 128 | Containers: map[string][]ObservedContainer{ |
| 129 | "web": {{ |
| 130 | ID: "c1aabbccddee", Number: 1, State: container.StateRunning, |
| 131 | Summary: container.Summary{ |
| 132 | ID: "c1aabbccddee", |
| 133 | Labels: map[string]string{ |
| 134 | api.ServiceLabel: "web", |
| 135 | api.ContainerNumberLabel: "1", |
| 136 | }, |
| 137 | }, |
| 138 | }}, |
| 139 | }, |
| 140 | Networks: map[string]ObservedNetwork{ |
| 141 | "frontend": {ID: "net1", Name: "myproject_frontend", ConfigHash: "oldhash"}, |
| 142 | }, |
| 143 | Volumes: map[string]ObservedVolume{}, |
| 144 | } |
| 145 | |
| 146 | plan, err := reconcile(t.Context(), project, observed, defaultReconcileOptions(), noPrompt) |
| 147 | assert.NilError(t, err) |
| 148 | |
| 149 | // The recreate phase reuses the Stop from the network-recreate phase |
| 150 | // instead of emitting a second one against an already-stopped container. |
| 151 | assert.Equal(t, plan.String(), strings.TrimSpace(` |
| 152 | [] -> #1 service:web:1, StopContainer, network frontend config changed |
| 153 | [1] -> #2 service:web:1, DisconnectNetwork, network frontend recreate |
| 154 | [2] -> #3 network:frontend, RemoveNetwork, config hash diverged |
| 155 | [3] -> #4 network:frontend, CreateNetwork, recreate after config change |
| 156 | [4] -> #5 service:web:1, CreateContainer, config changed (tmpName) [recreate:web:1] |
| 157 | [1,5] -> #6 service:web:1, RemoveContainer, replaced by #5 [recreate:web:1] |
| 158 | [6] -> #7 service:web:1, RenameContainer, finalize recreate [recreate:web:1] |
| 159 | `)+"\n") |
| 160 | } |
| 161 | |
| 162 | func TestReconcileNetworks_DivergedMultipleServices(t *testing.T) { |
| 163 | project := &types.Project{ |
nothing calls this directly
no test coverage detected