@@ -178,6 +178,79 @@ func TestProvisionerd(t *testing.T) {
178
178
require .NoError (t , closer .Close ())
179
179
})
180
180
181
+ // LargePayloads sends a 6mb tar file to the provisioner. The provisioner also
182
+ // returns large payload messages back. The limit should be 10mb, so all
183
+ // these messages should work.
184
+ t .Run ("LargePayloads" , func (t * testing.T ) {
185
+ t .Parallel ()
186
+ done := make (chan struct {})
187
+ t .Cleanup (func () {
188
+ close (done )
189
+ })
190
+ var (
191
+ largeSize = 6 * 1024 * 1024
192
+ completeChan = make (chan struct {})
193
+ completeOnce sync.Once
194
+ acq = newAcquireOne (t , & proto.AcquiredJob {
195
+ JobId : "test" ,
196
+ Provisioner : "someprovisioner" ,
197
+ TemplateSourceArchive : testutil .CreateTar (t , map [string ]string {
198
+ "toolarge.txt" : string (make ([]byte , largeSize )),
199
+ }),
200
+ Type : & proto.AcquiredJob_TemplateImport_ {
201
+ TemplateImport : & proto.AcquiredJob_TemplateImport {
202
+ Metadata : & sdkproto.Metadata {},
203
+ },
204
+ },
205
+ })
206
+ )
207
+
208
+ closer := createProvisionerd (t , func (ctx context.Context ) (proto.DRPCProvisionerDaemonClient , error ) {
209
+ return createProvisionerDaemonClient (t , done , provisionerDaemonTestServer {
210
+ acquireJobWithCancel : acq .acquireWithCancel ,
211
+ updateJob : noopUpdateJob ,
212
+ completeJob : func (ctx context.Context , job * proto.CompletedJob ) (* proto.Empty , error ) {
213
+ completeOnce .Do (func () { close (completeChan ) })
214
+ return & proto.Empty {}, nil
215
+ },
216
+ }), nil
217
+ }, provisionerd.LocalProvisioners {
218
+ "someprovisioner" : createProvisionerClient (t , done , provisionerTestServer {
219
+ parse : func (
220
+ s * provisionersdk.Session ,
221
+ _ * sdkproto.ParseRequest ,
222
+ cancelOrComplete <- chan struct {},
223
+ ) * sdkproto.ParseComplete {
224
+ return & sdkproto.ParseComplete {
225
+ // 6mb readme
226
+ Readme : make ([]byte , largeSize ),
227
+ }
228
+ },
229
+ plan : func (
230
+ _ * provisionersdk.Session ,
231
+ _ * sdkproto.PlanRequest ,
232
+ _ <- chan struct {},
233
+ ) * sdkproto.PlanComplete {
234
+ return & sdkproto.PlanComplete {
235
+ Resources : []* sdkproto.Resource {},
236
+ Plan : make ([]byte , largeSize ),
237
+ }
238
+ },
239
+ apply : func (
240
+ _ * provisionersdk.Session ,
241
+ _ * sdkproto.ApplyRequest ,
242
+ _ <- chan struct {},
243
+ ) * sdkproto.ApplyComplete {
244
+ return & sdkproto.ApplyComplete {
245
+ State : make ([]byte , largeSize ),
246
+ }
247
+ },
248
+ }),
249
+ })
250
+ require .Condition (t , closedWithin (completeChan , testutil .WaitShort ))
251
+ require .NoError (t , closer .Close ())
252
+ })
253
+
181
254
t .Run ("RunningPeriodicUpdate" , func (t * testing.T ) {
182
255
t .Parallel ()
183
256
done := make (chan struct {})
@@ -1115,7 +1188,9 @@ func createProvisionerDaemonClient(t *testing.T, done <-chan struct{}, server pr
1115
1188
mux := drpcmux .New ()
1116
1189
err := proto .DRPCRegisterProvisionerDaemon (mux , & server )
1117
1190
require .NoError (t , err )
1118
- srv := drpcserver .New (mux )
1191
+ srv := drpcserver .NewWithOptions (mux , drpcserver.Options {
1192
+ Manager : drpcsdk .DefaultDRPCOptions (nil ),
1193
+ })
1119
1194
ctx , cancelFunc := context .WithCancel (context .Background ())
1120
1195
closed := make (chan struct {})
1121
1196
go func () {
0 commit comments