@@ -155,12 +155,15 @@ public async Task GivenAValidDicomInstanceEntry_WhenProcessed_ThenSuccessfulEntr
155
155
IDicomInstanceEntry dicomInstanceEntry = Substitute . For < IDicomInstanceEntry > ( ) ;
156
156
157
157
dicomInstanceEntry . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( _dicomDataset1 ) ;
158
+ long bytesStored = 100L ;
159
+ _storeOrchestrator . StoreDicomInstanceEntryAsync ( dicomInstanceEntry , DefaultCancellationToken ) . Returns ( bytesStored ) ;
158
160
159
161
await ExecuteAndValidateAsync ( dicomInstanceEntry ) ;
160
162
161
163
_storeResponseBuilder . Received ( 1 ) . AddSuccess ( _dicomDataset1 , DefaultStoreValidationResult , _dicomRequestContext . DataPartition ) ;
162
164
_storeResponseBuilder . DidNotReceiveWithAnyArgs ( ) . AddFailure ( default ) ;
163
165
Assert . Equal ( 1 , _dicomRequestContextAccessor . RequestContext . PartCount ) ;
166
+ Assert . Equal ( bytesStored , _dicomRequestContextAccessor . RequestContext . TotalDicomEgressToStorageBytes ) ;
164
167
}
165
168
166
169
[ Fact ]
@@ -174,6 +177,8 @@ public async Task GiveAnInvalidDicomDataset_WhenProcessed_ThenFailedEntryShouldB
174
177
175
178
_storeResponseBuilder . DidNotReceiveWithAnyArgs ( ) . AddSuccess ( default , DefaultStoreValidationResult , Partition . Default ) ;
176
179
_storeResponseBuilder . Received ( 1 ) . AddFailure ( null , TestConstants . ProcessingFailureReasonCode ) ;
180
+ Assert . Equal ( 0 , _dicomRequestContextAccessor . RequestContext . TotalDicomEgressToStorageBytes ) ;
181
+ await _storeOrchestrator . DidNotReceiveWithAnyArgs ( ) . StoreDicomInstanceEntryAsync ( Arg . Any < IDicomInstanceEntry > ( ) , Arg . Any < CancellationToken > ( ) ) ;
177
182
}
178
183
179
184
[ Fact ]
@@ -187,6 +192,8 @@ public async Task GivenADicomDatasetFailsToOpenDueToDicomValidationException_Whe
187
192
188
193
_storeResponseBuilder . DidNotReceiveWithAnyArgs ( ) . AddSuccess ( default , DefaultStoreValidationResult , Partition . Default ) ;
189
194
_storeResponseBuilder . Received ( 1 ) . AddFailure ( null , TestConstants . ValidationFailureReasonCode ) ;
195
+ Assert . Equal ( 0 , _dicomRequestContextAccessor . RequestContext . TotalDicomEgressToStorageBytes ) ;
196
+ await _storeOrchestrator . DidNotReceiveWithAnyArgs ( ) . StoreDicomInstanceEntryAsync ( Arg . Any < IDicomInstanceEntry > ( ) , Arg . Any < CancellationToken > ( ) ) ;
190
197
}
191
198
192
199
[ Fact ]
@@ -199,6 +206,8 @@ public async Task GivenAValidationError_WhenDropDataEnabled_ThenSucceedsWithErro
199
206
dicomDataset . Add ( DicomTag . StudyDate , "NotAValidStudyDate" ) ;
200
207
201
208
dicomInstanceEntry . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( dicomDataset ) ;
209
+ long bytesStored = 100L ;
210
+ _storeOrchestrator . StoreDicomInstanceEntryAsync ( dicomInstanceEntry , DefaultCancellationToken ) . Returns ( bytesStored ) ;
202
211
203
212
// call
204
213
StoreResponse response = await _storeServiceDropData . ProcessAsync (
@@ -235,6 +244,8 @@ await _storeOrchestrator
235
244
dicomInstanceEntry ,
236
245
DefaultCancellationToken
237
246
) ;
247
+
248
+ Assert . Equal ( bytesStored , _dicomRequestContextAccessorLatestApi . RequestContext . TotalDicomEgressToStorageBytes ) ;
238
249
}
239
250
240
251
[ Fact ]
@@ -247,6 +258,8 @@ public async Task GivenAValidationErrorOnNonCoreTag_WhenDropDataEnabledAndFullDi
247
258
dicomDataset . Add ( DicomTag . StudyDate , "NotAValidStudyDate" ) ;
248
259
249
260
dicomInstanceEntry . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( dicomDataset ) ;
261
+ long bytesStored = 100L ;
262
+ _storeOrchestrator . StoreDicomInstanceEntryAsync ( dicomInstanceEntry , DefaultCancellationToken ) . Returns ( bytesStored ) ;
250
263
251
264
// call
252
265
StoreResponse response = await _storeServiceDropData . ProcessAsync (
@@ -283,6 +296,8 @@ await _storeOrchestrator
283
296
dicomInstanceEntry ,
284
297
DefaultCancellationToken
285
298
) ;
299
+
300
+ Assert . Equal ( bytesStored , _dicomRequestContextAccessorLatestApi . RequestContext . TotalDicomEgressToStorageBytes ) ;
286
301
}
287
302
288
303
[ Fact ]
@@ -515,10 +530,12 @@ public async Task GivenAnExternalStoreExceptionWhenStoring_WhenProcessed_ThenExp
515
530
}
516
531
517
532
[ Fact ]
518
- public async Task GivenMultipleDicomInstanceEntries_WhenProcessed_ThenCorrespondingEntryShouldBeAdded ( )
533
+ public async Task GivenMultipleDicomInstanceEntriesWithFailure_WhenProcessed_ThenCorrespondingEntryShouldBeAdded ( )
519
534
{
520
535
IDicomInstanceEntry dicomInstanceEntryToSucceed = Substitute . For < IDicomInstanceEntry > ( ) ;
521
536
IDicomInstanceEntry dicomInstanceEntryToFail = Substitute . For < IDicomInstanceEntry > ( ) ;
537
+ long bytesStored = 100L ;
538
+ _storeOrchestrator . StoreDicomInstanceEntryAsync ( Arg . Any < IDicomInstanceEntry > ( ) , DefaultCancellationToken ) . Returns ( bytesStored ) ;
522
539
523
540
dicomInstanceEntryToSucceed . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( _dicomDataset1 ) ;
524
541
dicomInstanceEntryToFail . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( _dicomDataset2 ) ;
@@ -535,6 +552,56 @@ public async Task GivenMultipleDicomInstanceEntries_WhenProcessed_ThenCorrespond
535
552
_storeResponseBuilder . Received ( 1 ) . AddSuccess ( _dicomDataset1 , DefaultStoreValidationResult , _dicomRequestContext . DataPartition ) ;
536
553
_storeResponseBuilder . Received ( 1 ) . AddFailure ( _dicomDataset2 , TestConstants . ProcessingFailureReasonCode ) ;
537
554
Assert . Equal ( 2 , _dicomRequestContextAccessor . RequestContext . PartCount ) ;
555
+
556
+ await _storeOrchestrator
557
+ . Received ( 1 )
558
+ . StoreDicomInstanceEntryAsync (
559
+ dicomInstanceEntryToSucceed ,
560
+ DefaultCancellationToken
561
+ ) ;
562
+
563
+ await _storeOrchestrator
564
+ . DidNotReceive ( )
565
+ . StoreDicomInstanceEntryAsync (
566
+ dicomInstanceEntryToFail ,
567
+ DefaultCancellationToken
568
+ ) ;
569
+
570
+ Assert . Equal ( bytesStored , _dicomRequestContextAccessor . RequestContext . TotalDicomEgressToStorageBytes ) ;
571
+ }
572
+
573
+ [ Fact ]
574
+ public async Task GivenMultipleDicomInstanceEntries_WhenProcessed_ThenTotalBytesTracked ( )
575
+ {
576
+ IDicomInstanceEntry dicomInstanceEntryToSucceed = Substitute . For < IDicomInstanceEntry > ( ) ;
577
+ IDicomInstanceEntry dicomInstanceEntryToSucceed2 = Substitute . For < IDicomInstanceEntry > ( ) ;
578
+ long bytesStored = 100L ;
579
+ long totalExpectedBytesStored = bytesStored * 2 ;
580
+ _storeOrchestrator . StoreDicomInstanceEntryAsync ( Arg . Any < IDicomInstanceEntry > ( ) , DefaultCancellationToken ) . Returns ( bytesStored ) ;
581
+
582
+ dicomInstanceEntryToSucceed . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( _dicomDataset1 ) ;
583
+ dicomInstanceEntryToSucceed2 . GetDicomDatasetAsync ( DefaultCancellationToken ) . Returns ( _dicomDataset2 ) ;
584
+
585
+ await ExecuteAndValidateAsync ( dicomInstanceEntryToSucceed , dicomInstanceEntryToSucceed2 ) ;
586
+
587
+ _storeResponseBuilder . Received ( 1 ) . AddSuccess ( _dicomDataset1 , DefaultStoreValidationResult , _dicomRequestContext . DataPartition ) ;
588
+ _storeResponseBuilder . Received ( 1 ) . AddSuccess ( _dicomDataset2 , DefaultStoreValidationResult , _dicomRequestContext . DataPartition ) ;
589
+
590
+ await _storeOrchestrator
591
+ . Received ( 1 )
592
+ . StoreDicomInstanceEntryAsync (
593
+ dicomInstanceEntryToSucceed ,
594
+ DefaultCancellationToken
595
+ ) ;
596
+
597
+ await _storeOrchestrator
598
+ . Received ( 1 )
599
+ . StoreDicomInstanceEntryAsync (
600
+ dicomInstanceEntryToSucceed2 ,
601
+ DefaultCancellationToken
602
+ ) ;
603
+
604
+ Assert . Equal ( totalExpectedBytesStored , _dicomRequestContextAccessor . RequestContext . TotalDicomEgressToStorageBytes ) ;
538
605
}
539
606
540
607
[ Fact ]
0 commit comments