1
+ // Copyright 2007-2008 The Apache Software Foundation.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
+ // this file except in compliance with the License. You may obtain a copy of the
5
+ // License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software distributed
10
+ // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11
+ // CONDITIONS OF ANY KIND, either express or implied. See the License for the
12
+ // specific language governing permissions and limitations under the License.
13
+ namespace Magnum . Specs . Channels
14
+ {
15
+ using System ;
16
+ using Fibers ;
17
+ using Magnum . Channels ;
18
+ using Magnum . Extensions ;
19
+ using NUnit . Framework ;
20
+ using TestFramework ;
21
+
22
+ [ TestFixture ]
23
+ public class Building_an_aggregator_network
24
+ {
25
+ private SynchronousFiber _fiber ;
26
+ private TimeSpan _timeout ;
27
+
28
+ [ SetUp ]
29
+ public void Setup ( )
30
+ {
31
+ _fiber = new SynchronousFiber ( ) ;
32
+ _timeout = 100 . Milliseconds ( ) ;
33
+ }
34
+
35
+
36
+ [ Test ]
37
+ public void Should_send_to_a_adapter_consumer_chain ( )
38
+ {
39
+ Future < TestMessage > future = new Future < TestMessage > ( ) ;
40
+
41
+ var consumer = new ConsumerChannel < TestMessage > ( _fiber , future . Complete ) ;
42
+ var adapter = new ChannelAdapter < TestMessage > ( consumer ) ;
43
+
44
+ adapter . Send ( new TestMessage ( ) ) ;
45
+
46
+ future . IsCompleted . ShouldBeTrue ( ) ;
47
+ }
48
+
49
+ private class TestMessage
50
+ {
51
+ }
52
+
53
+ [ Test ]
54
+ public void Should_add_a_consumer_to_an_empty_adapter_chain ( )
55
+ {
56
+ var adapter = new ChannelAdapter < TestMessage > ( new ShuntChannel < TestMessage > ( ) ) ;
57
+
58
+ var future = new Future < TestMessage > ( ) ;
59
+
60
+ using ( var scope = adapter . CreateBinderScope ( ) )
61
+ {
62
+ var consumer = new ConsumerChannel < TestMessage > ( _fiber , future . Complete ) ;
63
+
64
+ scope . Add ( consumer ) ;
65
+
66
+ adapter . Send ( new TestMessage ( ) ) ;
67
+ }
68
+
69
+ future . IsCompleted . ShouldBeTrue ( ) ;
70
+ }
71
+
72
+ [ Test ]
73
+ public void Should_add_a_consumer_to_an_existing_adapter_chain ( )
74
+ {
75
+ var firstFuture = new Future < TestMessage > ( ) ;
76
+ var secondFuture = new Future < TestMessage > ( ) ;
77
+
78
+ var first = new ConsumerChannel < TestMessage > ( _fiber , firstFuture . Complete ) ;
79
+ var subs = new PublishSubscribeChannel < TestMessage > ( _fiber , new [ ] { first } ) ;
80
+ var adapter = new ChannelAdapter < TestMessage > ( subs ) ;
81
+
82
+ using ( var scope = adapter . CreateBinderScope ( ) )
83
+ {
84
+ var second = new ConsumerChannel < TestMessage > ( _fiber , secondFuture . Complete ) ;
85
+ scope . Add ( second ) ;
86
+
87
+ adapter . Send ( new TestMessage ( ) ) ;
88
+ }
89
+
90
+ firstFuture . IsCompleted . ShouldBeTrue ( ) ;
91
+ secondFuture . IsCompleted . ShouldBeTrue ( ) ;
92
+ }
93
+
94
+ [ Test ]
95
+ public void Should_remove_a_consumer_from_an_adapter_chain ( )
96
+ {
97
+ var adapter = new ChannelAdapter < TestMessage > ( new ShuntChannel < TestMessage > ( ) ) ;
98
+
99
+ var future = new Future < TestMessage > ( ) ;
100
+
101
+ using ( var scope = adapter . CreateBinderScope ( ) )
102
+ {
103
+ var consumer = new ConsumerChannel < TestMessage > ( _fiber , future . Complete ) ;
104
+
105
+ scope . Add ( consumer ) ;
106
+ }
107
+
108
+ adapter . Send ( new TestMessage ( ) ) ;
109
+
110
+ future . IsCompleted . ShouldBeFalse ( ) ;
111
+ }
112
+ }
113
+ }
0 commit comments