@@ -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 () {