2
2
//
3
3
// SPDX-License-Identifier: MPL-2.0
4
4
5
+ using Microsoft . Extensions . Options ;
5
6
using NSubstitute ;
6
7
using SAF . Common ;
7
8
using SAF . Toolbox . FileTransfer ;
@@ -15,9 +16,9 @@ public class FileSenderTests
15
16
[ Theory ]
16
17
[ InlineData ( 1 ) ] // 1 byte
17
18
[ InlineData ( 1024 ) ] // 1 kByte
18
- [ InlineData ( 1024 * 3 ) ] // 3 kByte
19
+ [ InlineData ( 1024 * 3 ) ] // 3 kByte
19
20
[ InlineData ( 1024 * 1024 ) ] // 1 MByte
20
- [ InlineData ( 1024 * 1024 * 3 ) ] // 3 MByte
21
+ [ InlineData ( 1024 * 1024 * 3 ) ] // 3 MByte
21
22
[ InlineData ( FileSender . MaxChunkSize - 1 ) ] // excact chunk size - 1
22
23
[ InlineData ( FileSender . MaxChunkSize ) ] // excact chunk size
23
24
[ InlineData ( FileSender . MaxChunkSize + 1 ) ] // excact chunk size + 1
@@ -30,7 +31,9 @@ public async Task SendInChunksCallsPublishOk(int fileSizeInBytes)
30
31
Action < Message > ? senderHandler = null ;
31
32
var messaging = Substitute . For < IMessagingInfrastructure > ( ) ;
32
33
messaging . When ( m => m . Subscribe ( Arg . Any < string > ( ) , Arg . Any < Action < Message > > ( ) ) )
33
- . Do ( args => senderHandler = args . Arg < Action < Message > > ( ) ) ;
34
+ . Do ( args => senderHandler = args . Arg < Action < Message > > ( ) ) ;
35
+ var options = Substitute . For < IOptions < FileSenderConfiguration > > ( ) ;
36
+ options . Value . Returns ( new FileSenderConfiguration ( ) ) ;
34
37
35
38
var testChannel = $ "tests/fileSender/{ fileSizeInBytes } ";
36
39
var buffer = new byte [ fileSizeInBytes ] ;
@@ -43,7 +46,7 @@ public async Task SendInChunksCallsPublishOk(int fileSizeInBytes)
43
46
} ) ;
44
47
using ( var tempFile = new TemporaryFile ( $ "file{ fileSizeInBytes } .tmp", buffer ) )
45
48
{
46
- var fileSender = new FileSender ( messaging , null ) ;
49
+ var fileSender = new FileSender ( messaging , null , options ) ;
47
50
var sendResult = await fileSender . SendInChunks ( testChannel , tempFile . TempFilePath ) ;
48
51
Assert . Equal ( FileTransferStatus . Delivered , sendResult ) ;
49
52
}
@@ -56,9 +59,9 @@ public async Task SendInChunksCallsPublishOk(int fileSizeInBytes)
56
59
[ Theory ]
57
60
[ InlineData ( 1 ) ] // 1 byte
58
61
[ InlineData ( 1024 ) ] // 1 kByte
59
- [ InlineData ( 1024 * 3 ) ] // 3 kByte
62
+ [ InlineData ( 1024 * 3 ) ] // 3 kByte
60
63
[ InlineData ( 1024 * 1024 ) ] // 1 MByte
61
- [ InlineData ( 1024 * 1024 * 3 ) ] // 3 MByte
64
+ [ InlineData ( 1024 * 1024 * 3 ) ] // 3 MByte
62
65
[ InlineData ( FileSender . MaxChunkSize - 1 ) ] // excact chunk size - 1
63
66
[ InlineData ( FileSender . MaxChunkSize ) ] // excact chunk size
64
67
[ InlineData ( FileSender . MaxChunkSize + 1 ) ] // excact chunk size + 1
@@ -71,6 +74,8 @@ public async Task SendInChunksAllowsWriteAccessToFileAfterSendingLastChunkOk(int
71
74
var messaging = Substitute . For < IMessagingInfrastructure > ( ) ;
72
75
messaging . When ( m => m . Subscribe ( Arg . Any < string > ( ) , Arg . Any < Action < Message > > ( ) ) )
73
76
. Do ( args => senderHandler = args . Arg < Action < Message > > ( ) ) ;
77
+ var options = Substitute . For < IOptions < FileSenderConfiguration > > ( ) ;
78
+ options . Value . Returns ( new FileSenderConfiguration ( ) ) ;
74
79
75
80
var testChannel = $ "tests/fileSender/{ fileSizeInBytes } ";
76
81
var buffer = new byte [ fileSizeInBytes ] ;
@@ -93,7 +98,7 @@ public async Task SendInChunksAllowsWriteAccessToFileAfterSendingLastChunkOk(int
93
98
senderHandler ? . Invoke ( new Message { Topic = req . ReplyTo , Payload = "OK" } ) ;
94
99
} ) ;
95
100
96
- var fileSender = new FileSender ( messaging , null ) ;
101
+ var fileSender = new FileSender ( messaging , null , options ) ;
97
102
var sendResult = await fileSender . SendInChunks ( testChannel , tempFile . TempFilePath ) ;
98
103
Assert . Equal ( FileTransferStatus . Delivered , sendResult ) ;
99
104
}
@@ -121,6 +126,8 @@ public async Task SendInChunksUsesSameUniqueTransferIdForEachChunkOk(int fileSiz
121
126
var messaging = Substitute . For < IMessagingInfrastructure > ( ) ;
122
127
messaging . When ( m => m . Subscribe ( Arg . Any < string > ( ) , Arg . Any < Action < Message > > ( ) ) )
123
128
. Do ( args => senderHandler = args . Arg < Action < Message > > ( ) ) ;
129
+ var options = Substitute . For < IOptions < FileSenderConfiguration > > ( ) ;
130
+ options . Value . Returns ( new FileSenderConfiguration ( ) ) ;
124
131
125
132
var testChannel = $ "tests/fileSender/{ fileSizeInBytes } ";
126
133
var buffer = new byte [ fileSizeInBytes ] ;
@@ -139,7 +146,7 @@ public async Task SendInChunksUsesSameUniqueTransferIdForEachChunkOk(int fileSiz
139
146
} ) ;
140
147
using ( var tempFile = new TemporaryFile ( $ "file{ fileSizeInBytes } .tmp", buffer ) )
141
148
{
142
- var fileSender = new FileSender ( messaging , null ) ;
149
+ var fileSender = new FileSender ( messaging , null , options ) ;
143
150
var sendResult = await fileSender . SendInChunks ( testChannel , tempFile . TempFilePath ) ;
144
151
Assert . Equal ( FileTransferStatus . Delivered , sendResult ) ;
145
152
}
@@ -149,23 +156,30 @@ public async Task SendInChunksUsesSameUniqueTransferIdForEachChunkOk(int fileSiz
149
156
messaging . Received ( Convert . ToInt32 ( expectedCalls ) ) . Publish ( Arg . Is < Message > ( msg => msg . Topic == testChannel ) ) ;
150
157
}
151
158
152
- [ Fact ]
153
- public async Task SendInChunksWithMissingAnswerReturnsTimedOutOk ( )
159
+ [ Theory ]
160
+ [ InlineData ( 1 ) ]
161
+ [ InlineData ( 4 ) ]
162
+ public async Task SendInChunksWithMissingAnswerReturnsTimedOutOk ( int expectedCalls )
154
163
{
155
164
const int fileSizeInBytes = 1024 ;
156
165
157
166
var messaging = Substitute . For < IMessagingInfrastructure > ( ) ;
167
+ var options = Substitute . For < IOptions < FileSenderConfiguration > > ( ) ;
168
+ options . Value . Returns ( new FileSenderConfiguration
169
+ {
170
+ RetryAttemptsForFailedChunks = expectedCalls - 1
171
+ } ) ;
158
172
159
173
var testChannel = $ "tests/fileSender/{ fileSizeInBytes } ";
160
174
var buffer = new byte [ fileSizeInBytes ] ;
161
175
using ( var tempFile = new TemporaryFile ( $ "file{ fileSizeInBytes } .tst", buffer ) )
162
176
{
163
- var fileSender = new FileSender ( messaging , null ) ;
177
+ var fileSender = new FileSender ( messaging , null , options ) ;
178
+ fileSender . Timeout = 2000 ;
164
179
var sendResult = await fileSender . SendInChunks ( testChannel , tempFile . TempFilePath ) ;
165
180
Assert . Equal ( FileTransferStatus . TimedOut , sendResult ) ;
166
181
}
167
182
168
- var expectedCalls = 1 ;
169
183
messaging . Received ( expectedCalls ) . Publish ( Arg . Is < Message > ( msg => msg . Topic == testChannel ) ) ;
170
184
}
171
185
}
0 commit comments