1
1
using CodexPlugin ;
2
+ using FileUtils ;
2
3
using NUnit . Framework ;
4
+ using System . Diagnostics ;
3
5
using Utils ;
4
6
5
7
namespace CodexTests . BasicTests
@@ -10,11 +12,47 @@ public class OneClientTests : CodexDistTest
10
12
[ Test ]
11
13
public void OneClientTest ( )
12
14
{
13
- var primary = StartCodex ( ) ;
15
+ var node = StartCodex ( ) ;
14
16
15
- PerformOneClientTest ( primary ) ;
17
+ PerformOneClientTest ( node ) ;
16
18
17
- LogNodeStatus ( primary ) ;
19
+ LogNodeStatus ( node ) ;
20
+ }
21
+
22
+ [ Test ]
23
+ public void InterruptUploadTest ( )
24
+ {
25
+ var tasks = new List < Task < bool > > ( ) ;
26
+ for ( var i = 0 ; i < 10 ; i ++ )
27
+ {
28
+ tasks . Add ( Task < bool > . Run ( ( ) => RunInterruptUploadTest ( ) ) ) ;
29
+ }
30
+ Task . WaitAll ( tasks . ToArray ( ) ) ;
31
+
32
+ Assert . That ( tasks . Select ( t => t . Result ) . All ( r => r == true ) ) ;
33
+ }
34
+
35
+ private bool RunInterruptUploadTest ( )
36
+ {
37
+ var node = StartCodex ( ) ;
38
+ var file = GenerateTestFile ( 300 . MB ( ) ) ;
39
+
40
+ var process = StartCurlUploadProcess ( node , file ) ;
41
+
42
+ Thread . Sleep ( 500 ) ;
43
+ process . Kill ( ) ;
44
+ Thread . Sleep ( 1000 ) ;
45
+
46
+ var log = Ci . DownloadLog ( node ) ;
47
+ return ! log . GetLinesContaining ( "Unhandled exception in async proc, aborting" ) . Any ( ) ;
48
+ }
49
+
50
+ private Process StartCurlUploadProcess ( ICodexNode node , TrackedFile file )
51
+ {
52
+ var apiAddress = node . Container . GetAddress ( CodexContainerRecipe . ApiPortTag ) ;
53
+ var codexUrl = $ "{ apiAddress } /api/codex/v1/data";
54
+ var filePath = file . Filename ;
55
+ return Process . Start ( "curl" , $ "-X POST { codexUrl } -H \" Content-Type: application/octet-stream\" -T { filePath } ") ;
18
56
}
19
57
20
58
private void PerformOneClientTest ( ICodexNode primary )
0 commit comments