@@ -95,6 +95,78 @@ func TestScaleWithDepsCases(t *testing.T) {
95
95
checkServiceContainer (t , res .Combined (), "scale-deps-tests-db" , NO_STATE_TO_CHECK , 1 )
96
96
}
97
97
98
+ func TestScaleUpAndDownPreserveContainerNumber (t * testing.T ) {
99
+ const projectName = "scale-up-down-test"
100
+
101
+ c := NewCLI (t , WithEnv (
102
+ "COMPOSE_PROJECT_NAME=" + projectName ))
103
+
104
+ reset := func () {
105
+ c .RunDockerComposeCmd (t , "down" , "--rmi" , "all" )
106
+ }
107
+ t .Cleanup (reset )
108
+ res := c .RunDockerComposeCmd (t , "--project-directory" , "fixtures/scale" , "up" , "-d" , "--scale" , "db=2" , "db" )
109
+ res .Assert (t , icmd .Success )
110
+
111
+ res = c .RunDockerComposeCmd (t , "ps" , "--format" , "{{.Name}}" , "db" )
112
+ res .Assert (t , icmd .Success )
113
+ assert .Equal (t , strings .TrimSpace (res .Stdout ()), projectName + "-db-1\n " + projectName + "-db-2" )
114
+
115
+ t .Log ("scale down removes replica #2" )
116
+ res = c .RunDockerComposeCmd (t , "--project-directory" , "fixtures/scale" , "up" , "-d" , "--scale" , "db=1" , "db" )
117
+ res .Assert (t , icmd .Success )
118
+
119
+ res = c .RunDockerComposeCmd (t , "ps" , "--format" , "{{.Name}}" , "db" )
120
+ res .Assert (t , icmd .Success )
121
+ assert .Equal (t , strings .TrimSpace (res .Stdout ()), projectName + "-db-1" )
122
+
123
+ t .Log ("scale up restores replica #2" )
124
+ res = c .RunDockerComposeCmd (t , "--project-directory" , "fixtures/scale" , "up" , "-d" , "--scale" , "db=2" , "db" )
125
+ res .Assert (t , icmd .Success )
126
+
127
+ res = c .RunDockerComposeCmd (t , "ps" , "--format" , "{{.Name}}" , "db" )
128
+ res .Assert (t , icmd .Success )
129
+ assert .Equal (t , strings .TrimSpace (res .Stdout ()), projectName + "-db-1\n " + projectName + "-db-2" )
130
+ }
131
+
132
+ func TestScaleDownRemovesObsolete (t * testing.T ) {
133
+ const projectName = "scale-down-obsolete-test"
134
+ c := NewCLI (t , WithEnv (
135
+ "COMPOSE_PROJECT_NAME=" + projectName ))
136
+
137
+ reset := func () {
138
+ c .RunDockerComposeCmd (t , "down" , "--rmi" , "all" )
139
+ }
140
+ t .Cleanup (reset )
141
+ res := c .RunDockerComposeCmd (t , "--project-directory" , "fixtures/scale" , "up" , "-d" , "db" )
142
+ res .Assert (t , icmd .Success )
143
+
144
+ res = c .RunDockerComposeCmd (t , "ps" , "--format" , "{{.Name}}" , "db" )
145
+ res .Assert (t , icmd .Success )
146
+ assert .Equal (t , strings .TrimSpace (res .Stdout ()), projectName + "-db-1" )
147
+
148
+ cmd := c .NewDockerComposeCmd (t , "--project-directory" , "fixtures/scale" , "up" , "-d" , "--scale" , "db=2" , "db" )
149
+ res = icmd .RunCmd (cmd , func (cmd * icmd.Cmd ) {
150
+ cmd .Env = append (cmd .Env , "MAYBE=value" )
151
+ })
152
+ res .Assert (t , icmd .Success )
153
+
154
+ res = c .RunDockerComposeCmd (t , "ps" , "--format" , "{{.Name}}" , "db" )
155
+ res .Assert (t , icmd .Success )
156
+ assert .Equal (t , strings .TrimSpace (res .Stdout ()), projectName + "-db-1\n " + projectName + "-db-2" )
157
+
158
+ t .Log ("scale down removes obsolete replica #1" )
159
+ cmd = c .NewDockerComposeCmd (t , "--project-directory" , "fixtures/scale" , "up" , "-d" , "--scale" , "db=1" , "db" )
160
+ res = icmd .RunCmd (cmd , func (cmd * icmd.Cmd ) {
161
+ cmd .Env = append (cmd .Env , "MAYBE=value" )
162
+ })
163
+ res .Assert (t , icmd .Success )
164
+
165
+ res = c .RunDockerComposeCmd (t , "ps" , "--format" , "{{.Name}}" , "db" )
166
+ res .Assert (t , icmd .Success )
167
+ assert .Equal (t , strings .TrimSpace (res .Stdout ()), projectName + "-db-1" )
168
+ }
169
+
98
170
func checkServiceContainer (t * testing.T , stdout , containerName , containerState string , count int ) {
99
171
found := 0
100
172
lines := strings .Split (stdout , "\n " )
0 commit comments