@@ -49,7 +49,7 @@ func TestBuildPlanExecution(t *testing.T) {
49
49
}
50
50
stages := []* dockerfile.Stage {{from , directives }}
51
51
52
- plan , err := NewBuildPlan (ctx , target , nil , cacheMgr , stages , true , false )
52
+ plan , err := NewBuildPlan (ctx , target , nil , cacheMgr , stages , true , false , "" )
53
53
require .NoError (err )
54
54
55
55
manifest , err := plan .Execute ()
@@ -93,7 +93,7 @@ func TestBuildPlanContextDirs(t *testing.T) {
93
93
// Here we need to set the allowModifyFS to true because we copy
94
94
// files across stages.
95
95
// TODO(pourchet): support copy --from without relying on FS.
96
- plan , err := NewBuildPlan (ctx , target , nil , cacheMgr , stages , true , false )
96
+ plan , err := NewBuildPlan (ctx , target , nil , cacheMgr , stages , true , false , "" )
97
97
require .NoError (err )
98
98
require .Contains (plan .copyFromDirs , "stage1" )
99
99
require .Len (plan .copyFromDirs , 1 )
@@ -108,7 +108,7 @@ func TestBuildPlanContextDirs(t *testing.T) {
108
108
}
109
109
stages = []* dockerfile.Stage {{from , directives }}
110
110
111
- _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false )
111
+ _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false , "" )
112
112
require .Error (err )
113
113
114
114
// Copy from subsequent stage.
@@ -119,7 +119,7 @@ func TestBuildPlanContextDirs(t *testing.T) {
119
119
from2 = dockerfile .FromDirectiveFixture ("" , envImage .String (), "stage2" )
120
120
stages = []* dockerfile.Stage {{from1 , directives1 }, {from2 , nil }}
121
121
122
- _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false )
122
+ _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false , "" )
123
123
require .Error (err )
124
124
}
125
125
@@ -142,7 +142,7 @@ func TestBuildPlanBadRun(t *testing.T) {
142
142
}
143
143
stages := []* dockerfile.Stage {{from , directives }}
144
144
145
- plan , err := NewBuildPlan (ctx , target , nil , cacheMgr , stages , true , false )
145
+ plan , err := NewBuildPlan (ctx , target , nil , cacheMgr , stages , true , false , "" )
146
146
require .NoError (err )
147
147
148
148
_ , err = plan .Execute ()
@@ -166,14 +166,57 @@ func TestDuplicateStageAlias(t *testing.T) {
166
166
from2 := dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias" )
167
167
stages := []* dockerfile.Stage {{from1 , nil }, {from2 , nil }}
168
168
169
- _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false )
169
+ _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false , "" )
170
170
require .Error (err )
171
171
172
172
// Same image different alias.
173
173
from1 = dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias1" )
174
174
from2 = dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias2" )
175
175
stages = []* dockerfile.Stage {{from1 , nil }, {from2 , nil }}
176
176
177
- _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false )
177
+ _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false , "" )
178
+ require .NoError (err )
179
+ }
180
+
181
+ func TestTargetStageMissing (t * testing.T ) {
182
+ require := require .New (t )
183
+
184
+ ctx , cleanup := context .BuildContextFixture ()
185
+ defer cleanup ()
186
+
187
+ target := image .NewImageName ("" , "testrepo" , "testtag" )
188
+ envImage , err := image .ParseName ("scratch" )
189
+ require .NoError (err )
190
+
191
+ cacheMgr := cache .New (ctx .ImageStore , nil , registry .NoopClientFixture ())
192
+
193
+ // Same image same alias.
194
+ from1 := dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias1" )
195
+ from2 := dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias2" )
196
+ stages := []* dockerfile.Stage {{from1 , nil }, {from2 , nil }}
197
+
198
+ _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false , "alias3" )
199
+ require .Error (err )
200
+ }
201
+
202
+ func TestTargetStageOk (t * testing.T ) {
203
+ require := require .New (t )
204
+
205
+ ctx , cleanup := context .BuildContextFixture ()
206
+ defer cleanup ()
207
+
208
+ target := image .NewImageName ("" , "testrepo" , "testtag" )
209
+ envImage , err := image .ParseName ("scratch" )
210
+ require .NoError (err )
211
+
212
+ cacheMgr := cache .New (ctx .ImageStore , nil , registry .NoopClientFixture ())
213
+
214
+ // Same image same alias.
215
+ from1 := dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias1" )
216
+ from2 := dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias2" )
217
+ from3 := dockerfile .FromDirectiveFixture ("" , envImage .String (), "alias3" )
218
+ stages := []* dockerfile.Stage {{from1 , nil }, {from2 , nil }, {from3 , nil }}
219
+
220
+ _ , err = NewBuildPlan (ctx , target , nil , cacheMgr , stages , false , false , "alias2" )
178
221
require .NoError (err )
179
222
}
0 commit comments