@@ -40,7 +40,7 @@ await CreateAndVisitPayload(
40
40
public async Task EncodeAsync_AllPayloads_EncodesAll ( )
41
41
{
42
42
var comp = new WorkflowActivationCompletion ( ) ;
43
- var codec = new MarkerPayloadCodec ( ) ;
43
+ var codecs = new List < IPayloadCodec > { new MarkerPayloadCodec ( ) , new MarkerNoClonePayloadCodec ( ) } ;
44
44
await CreateAndVisitPayload ( new ( ) , comp , async ( ctx , payload ) =>
45
45
{
46
46
// We don't check search attributes on purpose
@@ -49,10 +49,13 @@ await CreateAndVisitPayload(new(), comp, async (ctx, payload) =>
49
49
return ;
50
50
}
51
51
Assert . DoesNotContain ( "encoded" , payload ( ) . Metadata . Keys ) ;
52
- await WorkflowCodecHelper . EncodeAsync ( codec , comp ) ;
53
- if ( ! payload ( ) . Metadata . ContainsKey ( "encoded" ) )
52
+ foreach ( var codec in codecs )
54
53
{
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
+ }
56
59
}
57
60
} ) ;
58
61
}
@@ -61,7 +64,7 @@ await CreateAndVisitPayload(new(), comp, async (ctx, payload) =>
61
64
public async Task DecodeAsync_AllPayloads_DecodesAll ( )
62
65
{
63
66
var act = new WorkflowActivation ( ) ;
64
- var codec = new MarkerPayloadCodec ( ) ;
67
+ var codecs = new List < IPayloadCodec > { new MarkerPayloadCodec ( ) , new MarkerNoClonePayloadCodec ( ) } ;
65
68
await CreateAndVisitPayload ( new ( ) , act , async ( ctx , payload ) =>
66
69
{
67
70
// We don't check search attributes on purpose
@@ -70,10 +73,13 @@ await CreateAndVisitPayload(new(), act, async (ctx, payload) =>
70
73
return ;
71
74
}
72
75
Assert . DoesNotContain ( "decoded" , payload ( ) . Metadata . Keys ) ;
73
- await WorkflowCodecHelper . DecodeAsync ( codec , act ) ;
74
- if ( ! payload ( ) . Metadata . ContainsKey ( "decoded" ) )
76
+ foreach ( var codec in codecs )
75
77
{
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
+ }
77
83
}
78
84
} ) ;
79
85
}
@@ -189,4 +195,23 @@ public Task<IReadOnlyCollection<Payload>> DecodeAsync(IReadOnlyCollection<Payloa
189
195
return newP ;
190
196
} ) . ToList ( ) ) ;
191
197
}
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
+ }
192
217
}
0 commit comments