@@ -402,6 +402,94 @@ func TestMiddleware(t *testing.T) {
402402 require .True (t , getAttribute (t , span .Attributes , "snooze" ).AsBool ())
403403 })
404404
405+ t .Run ("WorkBatchResultWithJobError" , func (t * testing.T ) {
406+ t .Parallel ()
407+
408+ middleware , bundle := setup (t )
409+
410+ doInner := func (ctx context.Context ) error {
411+ return & fakeBatchError {errorsByID : map [int64 ]error {
412+ 123 : errors .New ("job-specific error" ),
413+ 456 : errors .New ("other job error" ),
414+ }}
415+ }
416+
417+ err := middleware .Work (ctx , & rivertype.JobRow {ID : 123 , Kind : "no_op" }, doInner )
418+ require .EqualError (t , err , "batch error" )
419+
420+ spans := bundle .traceExporter .GetSpans ()
421+ require .Len (t , spans , 1 )
422+
423+ span := spans [0 ]
424+ require .Equal (t , "error" , getAttribute (t , span .Attributes , "status" ).AsString ())
425+ require .Equal (t , codes .Error , span .Status .Code )
426+ require .Equal (t , "job-specific error" , span .Status .Description )
427+ })
428+
429+ t .Run ("WorkBatchResultWithNoJobError" , func (t * testing.T ) {
430+ t .Parallel ()
431+
432+ middleware , bundle := setup (t )
433+
434+ doInner := func (ctx context.Context ) error {
435+ return & fakeBatchError {errorsByID : map [int64 ]error {
436+ 456 : errors .New ("other job error" ),
437+ }}
438+ }
439+
440+ err := middleware .Work (ctx , & rivertype.JobRow {ID : 123 , Kind : "no_op" }, doInner )
441+ require .EqualError (t , err , "batch error" )
442+
443+ spans := bundle .traceExporter .GetSpans ()
444+ require .Len (t , spans , 1 )
445+
446+ span := spans [0 ]
447+ require .Equal (t , "ok" , getAttribute (t , span .Attributes , "status" ).AsString ())
448+ require .Equal (t , codes .Ok , span .Status .Code )
449+ })
450+
451+ t .Run ("WorkBatchResultWithJobCancelError" , func (t * testing.T ) {
452+ t .Parallel ()
453+
454+ middleware , bundle := setup (t )
455+
456+ doInner := func (ctx context.Context ) error {
457+ return & fakeBatchError {errorsByID : map [int64 ]error {
458+ 123 : rivertype .JobCancel (errors .New ("cancelled" )),
459+ }}
460+ }
461+
462+ err := middleware .Work (ctx , & rivertype.JobRow {ID : 123 , Kind : "no_op" }, doInner )
463+ require .EqualError (t , err , "batch error" )
464+
465+ spans := bundle .traceExporter .GetSpans ()
466+ require .Len (t , spans , 1 )
467+
468+ span := spans [0 ]
469+ require .True (t , getAttribute (t , span .Attributes , "cancel" ).AsBool ())
470+ })
471+
472+ t .Run ("WorkBatchResultWithJobSnoozeError" , func (t * testing.T ) {
473+ t .Parallel ()
474+
475+ middleware , bundle := setup (t )
476+
477+ doInner := func (ctx context.Context ) error {
478+ return & fakeBatchError {errorsByID : map [int64 ]error {
479+ 123 : & rivertype.JobSnoozeError {},
480+ }}
481+ }
482+
483+ err := middleware .Work (ctx , & rivertype.JobRow {ID : 123 , Kind : "no_op" }, doInner )
484+ require .EqualError (t , err , "batch error" )
485+
486+ spans := bundle .traceExporter .GetSpans ()
487+ require .Len (t , spans , 1 )
488+
489+ span := spans [0 ]
490+ require .True (t , getAttribute (t , span .Attributes , "snooze" ).AsBool ())
491+ })
492+
405493 t .Run ("WorkPanic" , func (t * testing.T ) {
406494 t .Parallel ()
407495
@@ -543,6 +631,14 @@ func TestMiddleware(t *testing.T) {
543631 })
544632}
545633
634+ type fakeBatchError struct {
635+ errorsByID map [int64 ]error
636+ }
637+
638+ func (e * fakeBatchError ) Error () string { return "batch error" }
639+
640+ func (e * fakeBatchError ) ErrorsByID () map [int64 ]error { return e .errorsByID }
641+
546642func getAttribute (t * testing.T , attrs []attribute.KeyValue , key string ) attribute.Value {
547643 t .Helper ()
548644
0 commit comments