@@ -12,6 +12,7 @@ namespace Azure.Functions.PowerShell.Tests.E2E
12
12
13
13
using System . Net . Http ;
14
14
using Newtonsoft . Json ;
15
+ using System . Text ;
15
16
16
17
[ Collection ( Constants . FunctionAppCollectionName ) ]
17
18
public class DurableEndToEndTests
@@ -147,6 +148,120 @@ public async Task LegacyDurableCommandNamesStillWork()
147
148
}
148
149
}
149
150
151
+ [ Fact ]
152
+ public async Task OrchestratationContextHasAllExpectedProperties ( )
153
+ {
154
+ var initialResponse = await Utilities . GetHttpTriggerResponse ( "DurableClientOrchContextProperties" , queryString : string . Empty ) ;
155
+ Assert . Equal ( HttpStatusCode . Accepted , initialResponse . StatusCode ) ;
156
+
157
+ var initialResponseBody = await initialResponse . Content . ReadAsStringAsync ( ) ;
158
+ dynamic initialResponseBodyObject = JsonConvert . DeserializeObject ( initialResponseBody ) ;
159
+ var statusQueryGetUri = ( string ) initialResponseBodyObject . statusQueryGetUri ;
160
+
161
+ var startTime = DateTime . UtcNow ;
162
+
163
+ using ( var httpClient = new HttpClient ( ) )
164
+ {
165
+ while ( true )
166
+ {
167
+ var statusResponse = await httpClient . GetAsync ( statusQueryGetUri ) ;
168
+ switch ( statusResponse . StatusCode )
169
+ {
170
+ case HttpStatusCode . Accepted :
171
+ {
172
+ var statusResponseBody = await GetResponseBodyAsync ( statusResponse ) ;
173
+ var runtimeStatus = ( string ) statusResponseBody . runtimeStatus ;
174
+ Assert . True (
175
+ runtimeStatus == "Running" || runtimeStatus == "Pending" ,
176
+ $ "Unexpected runtime status: { runtimeStatus } ") ;
177
+
178
+ if ( DateTime . UtcNow > startTime + _orchestrationCompletionTimeout )
179
+ {
180
+ Assert . True ( false , $ "The orchestration has not completed after { _orchestrationCompletionTimeout } ") ;
181
+ }
182
+
183
+ await Task . Delay ( TimeSpan . FromSeconds ( 2 ) ) ;
184
+ break ;
185
+ }
186
+
187
+ case HttpStatusCode . OK :
188
+ {
189
+ var statusResponseBody = await GetResponseBodyAsync ( statusResponse ) ;
190
+ Assert . Equal ( "Completed" , ( string ) statusResponseBody . runtimeStatus ) ;
191
+ Assert . Equal ( "True" , statusResponseBody . output [ 0 ] . ToString ( ) ) ;
192
+ Assert . Equal ( "Hello myInstanceId" , statusResponseBody . output [ 1 ] . ToString ( ) ) ;
193
+ Assert . Equal ( "False" , statusResponseBody . output [ 2 ] . ToString ( ) ) ;
194
+ return ;
195
+ }
196
+
197
+ default :
198
+ Assert . True ( false , $ "Unexpected orchestration status code: { statusResponse . StatusCode } ") ;
199
+ break ;
200
+ }
201
+ }
202
+ }
203
+ }
204
+
205
+ [ Fact ]
206
+ public async Task ExternalEventReturnsData ( )
207
+ {
208
+ var initialResponse = await Utilities . GetHttpTriggerResponse ( "DurableClient" , queryString : "?FunctionName=DurableOrchestratorRaiseEvent" ) ;
209
+ Assert . Equal ( HttpStatusCode . Accepted , initialResponse . StatusCode ) ;
210
+
211
+ var initialResponseBody = await initialResponse . Content . ReadAsStringAsync ( ) ;
212
+ dynamic initialResponseBodyObject = JsonConvert . DeserializeObject ( initialResponseBody ) ;
213
+ var statusQueryGetUri = ( string ) initialResponseBodyObject . statusQueryGetUri ;
214
+ var raiseEventUri = ( string ) initialResponseBodyObject . sendEventPostUri ;
215
+
216
+ raiseEventUri = raiseEventUri . Replace ( "{eventName}" , "TESTEVENTNAME" ) ;
217
+
218
+ var startTime = DateTime . UtcNow ;
219
+
220
+ using ( var httpClient = new HttpClient ( ) )
221
+ {
222
+ while ( true )
223
+ {
224
+ // Send external event payload
225
+ var json = JsonConvert . SerializeObject ( "helloWorld!" ) ;
226
+ var httpContent = new StringContent ( json , Encoding . UTF8 , "application/json" ) ;
227
+ await httpClient . PostAsync ( raiseEventUri , httpContent ) ;
228
+
229
+ var statusResponse = await httpClient . GetAsync ( statusQueryGetUri ) ;
230
+ switch ( statusResponse . StatusCode )
231
+ {
232
+ case HttpStatusCode . Accepted :
233
+ {
234
+ var statusResponseBody = await GetResponseBodyAsync ( statusResponse ) ;
235
+ var runtimeStatus = ( string ) statusResponseBody . runtimeStatus ;
236
+ Assert . True (
237
+ runtimeStatus == "Running" || runtimeStatus == "Pending" ,
238
+ $ "Unexpected runtime status: { runtimeStatus } ") ;
239
+
240
+ if ( DateTime . UtcNow > startTime + _orchestrationCompletionTimeout )
241
+ {
242
+ Assert . True ( false , $ "The orchestration has not completed after { _orchestrationCompletionTimeout } ") ;
243
+ }
244
+
245
+ await Task . Delay ( TimeSpan . FromSeconds ( 2 ) ) ;
246
+ break ;
247
+ }
248
+
249
+ case HttpStatusCode . OK :
250
+ {
251
+ var statusResponseBody = await GetResponseBodyAsync ( statusResponse ) ;
252
+ Assert . Equal ( "Completed" , ( string ) statusResponseBody . runtimeStatus ) ;
253
+ Assert . Equal ( "helloWorld!" , statusResponseBody . output . ToString ( ) ) ;
254
+ return ;
255
+ }
256
+
257
+ default :
258
+ Assert . True ( false , $ "Unexpected orchestration status code: { statusResponse . StatusCode } ") ;
259
+ break ;
260
+ }
261
+ }
262
+ }
263
+ }
264
+
150
265
[ Fact ]
151
266
public async Task ActivityCanHaveQueueBinding ( )
152
267
{
0 commit comments