@@ -178,6 +178,47 @@ func TestProvisionerd(t *testing.T) {
178
178
require .NoError (t , closer .Close ())
179
179
})
180
180
181
+ t .Run ("TooLargeTar" , func (t * testing.T ) {
182
+ // Ensures tars with "../../../etc/passwd" as the path
183
+ // are not allowed to run, and will fail the job.
184
+ t .Parallel ()
185
+ done := make (chan struct {})
186
+ t .Cleanup (func () {
187
+ close (done )
188
+ })
189
+ var (
190
+ completeChan = make (chan struct {})
191
+ completeOnce sync.Once
192
+ acq = newAcquireOne (t , & proto.AcquiredJob {
193
+ JobId : "test" ,
194
+ Provisioner : "someprovisioner" ,
195
+ TemplateSourceArchive : testutil .CreateTar (t , map [string ]string {
196
+ "toolarge.txt" : string (make ([]byte , 10 * 1024 * 1024 )),
197
+ }),
198
+ Type : & proto.AcquiredJob_TemplateImport_ {
199
+ TemplateImport : & proto.AcquiredJob_TemplateImport {
200
+ Metadata : & sdkproto.Metadata {},
201
+ },
202
+ },
203
+ })
204
+ )
205
+
206
+ closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
207
+ return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
208
+ acquireJobWithCancel : acq .acquireWithCancel ,
209
+ updateJob : noopUpdateJob ,
210
+ failJob : func (ctx context.Context , job * proto.FailedJob ) (* proto.Empty , error ) {
211
+ completeOnce .Do (func () { close (completeChan ) })
212
+ return & proto.Empty {}, nil
213
+ },
214
+ }), nil
215
+ }, provisionerd.LocalProvisioners {
216
+ "someprovisioner" : createProvisionerClient (t , done , provisionerTestServer {}),
217
+ })
218
+ require .Condition (t , closedWithin (completeChan , testutil .WaitMedium ))
219
+ require .NoError (t , closer .Close ())
220
+ })
221
+
181
222
t .Run ("RunningPeriodicUpdate" , func (t * testing.T ) {
182
223
t .Parallel ()
183
224
done := make (chan struct {})
0 commit comments