@@ -40,7 +40,7 @@ await CreateAndVisitPayload(
4040 public async Task EncodeAsync_AllPayloads_EncodesAll ( )
4141 {
4242 var comp = new WorkflowActivationCompletion ( ) ;
43- var codec = new MarkerPayloadCodec ( ) ;
43+ var codecs = new List < IPayloadCodec > { new MarkerPayloadCodec ( ) , new MarkerNoClonePayloadCodec ( ) } ;
4444 await CreateAndVisitPayload ( new ( ) , comp , async ( ctx , payload ) =>
4545 {
4646 // We don't check search attributes on purpose
@@ -49,10 +49,13 @@ await CreateAndVisitPayload(new(), comp, async (ctx, payload) =>
4949 return ;
5050 }
5151 Assert . DoesNotContain ( "encoded" , payload ( ) . Metadata . Keys ) ;
52- await WorkflowCodecHelper . EncodeAsync ( codec , comp ) ;
53- if ( ! payload ( ) . Metadata . ContainsKey ( "encoded" ) )
52+ foreach ( var codec in codecs )
5453 {
55- Assert . Fail ( $ "Payload at path { ctx . Path } not encoded") ;
54+ await WorkflowCodecHelper . EncodeAsync ( codec , comp ) ;
55+ if ( ! payload ( ) . Metadata . ContainsKey ( "encoded" ) )
56+ {
57+ Assert . Fail ( $ "Payload at path { ctx . Path } not encoded with codec { codec } ") ;
58+ }
5659 }
5760 } ) ;
5861 }
@@ -61,7 +64,7 @@ await CreateAndVisitPayload(new(), comp, async (ctx, payload) =>
6164 public async Task DecodeAsync_AllPayloads_DecodesAll ( )
6265 {
6366 var act = new WorkflowActivation ( ) ;
64- var codec = new MarkerPayloadCodec ( ) ;
67+ var codecs = new List < IPayloadCodec > { new MarkerPayloadCodec ( ) , new MarkerNoClonePayloadCodec ( ) } ;
6568 await CreateAndVisitPayload ( new ( ) , act , async ( ctx , payload ) =>
6669 {
6770 // We don't check search attributes on purpose
@@ -70,10 +73,13 @@ await CreateAndVisitPayload(new(), act, async (ctx, payload) =>
7073 return ;
7174 }
7275 Assert . DoesNotContain ( "decoded" , payload ( ) . Metadata . Keys ) ;
73- await WorkflowCodecHelper . DecodeAsync ( codec , act ) ;
74- if ( ! payload ( ) . Metadata . ContainsKey ( "decoded" ) )
76+ foreach ( var codec in codecs )
7577 {
76- Assert . Fail ( $ "Payload at path { ctx . Path } not decoded") ;
78+ await WorkflowCodecHelper . DecodeAsync ( codec , act ) ;
79+ if ( ! payload ( ) . Metadata . ContainsKey ( "decoded" ) )
80+ {
81+ Assert . Fail ( $ "Payload at path { ctx . Path } not decoded with codec { codec } ") ;
82+ }
7783 }
7884 } ) ;
7985 }
@@ -189,4 +195,23 @@ public Task<IReadOnlyCollection<Payload>> DecodeAsync(IReadOnlyCollection<Payloa
189195 return newP ;
190196 } ) . ToList ( ) ) ;
191197 }
198+
199+ private class MarkerNoClonePayloadCodec : IPayloadCodec
200+ {
201+ public Task < IReadOnlyCollection < Payload > > EncodeAsync ( IReadOnlyCollection < Payload > payloads ) =>
202+ Task . FromResult < IReadOnlyCollection < Payload > > ( payloads . Select ( p =>
203+ {
204+ var newP = p ;
205+ newP . Metadata [ "encoded" ] = ByteString . Empty ;
206+ return newP ;
207+ } ) . ToList ( ) ) ;
208+
209+ public Task < IReadOnlyCollection < Payload > > DecodeAsync ( IReadOnlyCollection < Payload > payloads ) =>
210+ Task . FromResult < IReadOnlyCollection < Payload > > ( payloads . Select ( p =>
211+ {
212+ var newP = p ;
213+ newP . Metadata [ "decoded" ] = ByteString . Empty ;
214+ return newP ;
215+ } ) . ToList ( ) ) ;
216+ }
192217}
0 commit comments