1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Linq ;
3
4
using System . Threading . Tasks ;
4
5
using Microsoft . VisualStudio . TestTools . UnitTesting ;
5
6
using Moq ;
@@ -8,59 +9,52 @@ namespace Serilog.Sinks.Async.UnitTests
8
9
{
9
10
public class BufferedQueueSpec
10
11
{
12
+ private static List < TestMessage > CreateMessages ( int count )
13
+ {
14
+ var messages = new List < TestMessage > ( ) ;
15
+
16
+ Loop . For ( ( ) => { messages . Add ( new TestMessage ( ) ) ; } , count ) ;
17
+
18
+ return messages ;
19
+ }
20
+
21
+ // ReSharper disable once MemberCanBePrivate.Global
11
22
public interface IRanAction < in TMessage >
12
23
{
13
24
void Ran ( TMessage message ) ;
14
25
}
15
26
16
27
[ TestClass ]
17
- public class GivenAContext
28
+ public class GivenAnAction
18
29
{
30
+ private const int BufferSize = 5 ;
19
31
private BufferedQueue < TestMessage > _queue ;
20
32
private Mock < IRanAction < TestMessage > > _ranner ;
21
33
22
34
[ TestInitialize ]
23
35
public void Initialize ( )
24
36
{
25
37
_ranner = new Mock < IRanAction < TestMessage > > ( ) ;
26
- _queue = new BufferedQueue < TestMessage > ( 5 ) ;
38
+ _queue = new BufferedQueue < TestMessage > ( BufferSize , _ranner . Object . Ran ) ;
27
39
}
28
40
29
- [ TestMethod , TestCategory ( "Unit" ) ]
30
- public async Task WhenProduceBatchOfOne_ThenReturnsProduced ( )
41
+ [ TestCleanup ]
42
+ public void Cleanup ( )
31
43
{
32
- await _queue . ProduceAsync ( new TestMessage ( ) ) ;
33
-
34
- Assert . AreEqual ( 1 , _queue . Count ) ;
35
- }
36
-
37
- [ TestMethod , TestCategory ( "Unit" ) ]
38
- public void WhenProduceBatch_ThenReturnsProduced ( )
39
- {
40
- var messages = new List < TestMessage >
44
+ if ( _queue != null )
41
45
{
42
- new TestMessage ( ) ,
43
- new TestMessage ( ) ,
44
- new TestMessage ( )
45
- } ;
46
-
47
- messages . ForEach ( async msg => await _queue . ProduceAsync ( msg ) ) ;
48
-
49
- Assert . AreEqual ( 3 , _queue . Count ) ;
46
+ _queue . Complete ( ) ;
47
+ }
50
48
}
51
49
52
50
[ TestMethod , TestCategory ( "Unit" ) ]
53
- public async Task WhenConsumeAsyncAndNoMessages_ThenConsumesNone ( )
51
+ public void WhenProduceNoMessages_ThenConsumesNone ( )
54
52
{
55
- var consumer = _queue . ConsumeAsync ( msg => _ranner . Object . Ran ( msg ) ) ;
56
- _queue . Complete ( ) ;
57
- await consumer ;
58
-
59
53
_ranner . Verify ( r => r . Ran ( It . IsAny < TestMessage > ( ) ) , Times . Never ) ;
60
54
}
61
55
62
56
[ TestMethod , TestCategory ( "Unit" ) ]
63
- public async Task WhenConsumeAsyncAndActionThrows_ThenConsumesAllProduced ( )
57
+ public async Task WhenProduceAndActionThrows_ThenConsumesAllProduced ( )
64
58
{
65
59
var messages = new List < TestMessage >
66
60
{
@@ -72,81 +66,68 @@ public async Task WhenConsumeAsyncAndActionThrows_ThenConsumesAllProduced()
72
66
_ranner . Setup ( r => r . Ran ( It . IsAny < TestMessage > ( ) ) )
73
67
. Throws ( exception ) ;
74
68
75
- messages . ForEach ( async msg => await _queue . ProduceAsync ( msg ) ) ;
76
- var consumer = _queue . ConsumeAsync ( msg => _ranner . Object . Ran ( msg ) ) ;
69
+ await Task . WhenAll ( messages . Select ( msg => _queue . ProduceAsync ( msg ) ) ) ;
77
70
_queue . Complete ( ) ;
78
71
79
- await Task . WhenAll ( consumer , _queue . IsComplete ) ;
72
+ await _queue . IsComplete ;
80
73
81
74
messages . ForEach ( msg => { _ranner . Verify ( r => r . Ran ( msg ) , Times . Once ) ; } ) ;
82
75
}
83
76
84
77
[ TestMethod , TestCategory ( "Unit" ) ]
85
- public async Task WhenConsumeAsyncWithProducedBatchOfOne_ThenConsumesAllProduced ( )
78
+ public async Task WhenProduceBatchOfOne_ThenConsumesAllProduced ( )
86
79
{
87
80
var message = new TestMessage ( ) ;
88
81
89
82
await _queue . ProduceAsync ( message ) ;
90
- var consumer = _queue . ConsumeAsync ( msg => _ranner . Object . Ran ( msg ) ) ;
91
83
_queue . Complete ( ) ;
92
84
93
- await Task . WhenAll ( consumer , _queue . IsComplete ) ;
85
+ await _queue . IsComplete ;
94
86
95
87
_ranner . Verify ( r => r . Ran ( message ) , Times . Once ) ;
96
88
}
97
89
98
90
[ TestMethod , TestCategory ( "Unit" ) ]
99
- public async Task WhenConsumeAsyncWithProducedBatchSmallerThanBuffer_ThenConsumesAllProduced ( )
91
+ public async Task WhenProducedBatchSmallerThanBuffer_ThenConsumesAllProduced ( )
100
92
{
101
- var messages = CreateMessages ( 3 ) ;
93
+ var messages = CreateMessages ( BufferSize - 1 ) ;
102
94
103
- messages . ForEach ( async msg => await _queue . ProduceAsync ( msg ) ) ;
104
- var consumer = _queue . ConsumeAsync ( msg => _ranner . Object . Ran ( msg ) ) ;
95
+ await Task . WhenAll ( messages . Select ( msg => _queue . ProduceAsync ( msg ) ) ) ;
105
96
_queue . Complete ( ) ;
106
97
107
- await Task . WhenAll ( consumer , _queue . IsComplete ) ;
98
+ await _queue . IsComplete ;
108
99
109
100
messages . ForEach ( msg => { _ranner . Verify ( r => r . Ran ( msg ) , Times . Once ) ; } ) ;
110
101
}
111
102
112
103
[ TestMethod , TestCategory ( "Unit" ) ]
113
- public async Task WhenConsumeAsyncWithProducedBatchSizeOfBuffer_ThenConsumesAllProduced ( )
104
+ public async Task WhenProducedBatchSizeOfBuffer_ThenConsumesAllProduced ( )
114
105
{
115
- var messages = CreateMessages ( _queue . Size ) ;
106
+ var messages = CreateMessages ( BufferSize ) ;
116
107
117
- messages . ForEach ( async msg => await _queue . ProduceAsync ( msg ) ) ;
118
- var consumer = _queue . ConsumeAsync ( msg => _ranner . Object . Ran ( msg ) ) ;
108
+ await Task . WhenAll ( messages . Select ( msg => _queue . ProduceAsync ( msg ) ) ) ;
119
109
_queue . Complete ( ) ;
120
110
121
- await Task . WhenAll ( consumer , _queue . IsComplete ) ;
111
+ await _queue . IsComplete ;
122
112
123
113
messages . ForEach ( msg => { _ranner . Verify ( r => r . Ran ( msg ) , Times . Once ) ; } ) ;
124
114
}
125
115
126
116
[ TestMethod , TestCategory ( "Unit" ) ]
127
- public async Task WhenConsumeAsyncWithProducedBatchLargerThanBuffer_ThenConsumesAllProduced ( )
117
+ public async Task WhenProducedBatchLargerThanBuffer_ThenConsumesAllProduced ( )
128
118
{
129
- var messages = CreateMessages ( _queue . Size + 1 ) ;
119
+ var messages = CreateMessages ( BufferSize + 1 ) ;
130
120
131
- messages . ForEach ( async msg => await _queue . ProduceAsync ( msg ) ) ;
132
- var consumer = _queue . ConsumeAsync ( msg => _ranner . Object . Ran ( msg ) ) ;
121
+ await Task . WhenAll ( messages . Select ( msg => _queue . ProduceAsync ( msg ) ) ) ;
133
122
_queue . Complete ( ) ;
134
123
135
- await Task . WhenAll ( consumer , _queue . IsComplete ) ;
124
+ await _queue . IsComplete ;
136
125
137
126
messages . ForEach ( msg => { _ranner . Verify ( r => r . Ran ( msg ) , Times . Once ) ; } ) ;
138
127
}
139
-
140
- private static List < TestMessage > CreateMessages ( int count )
141
- {
142
- var messages = new List < TestMessage > ( ) ;
143
-
144
- Loop . For ( counter => { messages . Add ( new TestMessage ( ) ) ; } , count ) ;
145
-
146
- return messages ;
147
- }
148
128
}
149
129
130
+ // ReSharper disable once MemberCanBePrivate.Global
150
131
public class TestMessage
151
132
{
152
133
}
0 commit comments