@@ -178,6 +178,79 @@ func TestProvisionerd(t *testing.T) {
178178require .NoError (t ,closer .Close ())
179179})
180180
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+
181254t .Run ("RunningPeriodicUpdate" ,func (t * testing.T ) {
182255t .Parallel ()
183256done := make (chan struct {})
@@ -1115,7 +1188,9 @@ func createProvisionerDaemonClient(t *testing.T, done <-chan struct{}, server pr
11151188mux := drpcmux .New ()
11161189err := proto .DRPCRegisterProvisionerDaemon (mux ,& server )
11171190require .NoError (t ,err )
1118- srv := drpcserver .New (mux )
1191+ srv := drpcserver .NewWithOptions (mux , drpcserver.Options {
1192+ Manager :drpcsdk .DefaultDRPCOptions (nil ),
1193+ })
11191194ctx ,cancelFunc := context .WithCancel (context .Background ())
11201195closed := make (chan struct {})
11211196go func () {