Mercurial > hg > orthanc-stone
comparison UnitTestsSources/TestMessageBroker.cpp @ 299:3897f9f28cfa am-callable-and-promise
backup work in progress: updated messaging framework with ICallable
author | am@osimis.io |
---|---|
date | Fri, 14 Sep 2018 16:44:01 +0200 |
parents | 5bd4161bf11b |
children | 1d9dd542adfe |
comparison
equal
deleted
inserted
replaced
298:f58bfb7bbcc9 | 299:3897f9f28cfa |
---|---|
1 /** | 1 ///** |
2 * Stone of Orthanc | 2 // * Stone of Orthanc |
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics | 3 // * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
4 * Department, University Hospital of Liege, Belgium | 4 // * Department, University Hospital of Liege, Belgium |
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium | 5 // * Copyright (C) 2017-2018 Osimis S.A., Belgium |
6 * | 6 // * |
7 * This program is free software: you can redistribute it and/or | 7 // * This program is free software: you can redistribute it and/or |
8 * modify it under the terms of the GNU Affero General Public License | 8 // * modify it under the terms of the GNU Affero General Public License |
9 * as published by the Free Software Foundation, either version 3 of | 9 // * as published by the Free Software Foundation, either version 3 of |
10 * the License, or (at your option) any later version. | 10 // * the License, or (at your option) any later version. |
11 * | 11 // * |
12 * This program is distributed in the hope that it will be useful, but | 12 // * This program is distributed in the hope that it will be useful, but |
13 * WITHOUT ANY WARRANTY; without even the implied warranty of | 13 // * WITHOUT ANY WARRANTY; without even the implied warranty of |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 14 // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 * Affero General Public License for more details. | 15 // * Affero General Public License for more details. |
16 * | 16 // * |
17 * You should have received a copy of the GNU Affero General Public License | 17 // * You should have received a copy of the GNU Affero General Public License |
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 // * along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 **/ | 19 // **/ |
20 | 20 |
21 | 21 |
22 #include "gtest/gtest.h" | 22 //#include "gtest/gtest.h" |
23 | 23 |
24 #include "../Framework/Messages/MessageBroker.h" | 24 //#include "../Framework/Messages/MessageBroker.h" |
25 #include "../Framework/Messages/IMessage.h" | 25 //#include "../Framework/Messages/IMessage.h" |
26 #include "../Framework/Messages/IObservable.h" | 26 //#include "../Framework/Messages/IObservable.h" |
27 #include "../Framework/Messages/IObserver.h" | 27 //#include "../Framework/Messages/IObserver.h" |
28 #include "../Framework/StoneEnumerations.h" | 28 //#include "../Framework/StoneEnumerations.h" |
29 | 29 |
30 | 30 |
31 static int test1Counter = 0; | 31 //static int test1Counter = 0; |
32 static int test2Counter = 0; | 32 //static int test2Counter = 0; |
33 class MyFullObserver : public OrthancStone::IObserver | 33 //class MyFullObserver : public OrthancStone::IObserver |
34 { | 34 //{ |
35 | 35 |
36 public: | 36 //public: |
37 MyFullObserver(OrthancStone::MessageBroker& broker) | 37 // MyFullObserver(OrthancStone::MessageBroker& broker) |
38 : OrthancStone::IObserver(broker) | 38 // : OrthancStone::IObserver(broker) |
39 { | 39 // { |
40 DeclareHandledMessage(OrthancStone::MessageType_Test1); | 40 //// DeclareHandledMessage(OrthancStone::MessageType_Test1); |
41 DeclareIgnoredMessage(OrthancStone::MessageType_Test2); | 41 //// DeclareIgnoredMessage(OrthancStone::MessageType_Test2); |
42 } | 42 // } |
43 | 43 |
44 | 44 |
45 void HandleMessage(OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { | 45 // void HandleMessage(OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { |
46 switch (message.GetType()) | 46 // switch (message.GetType()) |
47 { | 47 // { |
48 case OrthancStone::MessageType_Test1: | 48 // case OrthancStone::MessageType_Test1: |
49 test1Counter++; | 49 // test1Counter++; |
50 break; | 50 // break; |
51 case OrthancStone::MessageType_Test2: | 51 // case OrthancStone::MessageType_Test2: |
52 test2Counter++; | 52 // test2Counter++; |
53 break; | 53 // break; |
54 default: | 54 // default: |
55 throw OrthancStone::MessageNotDeclaredException(message.GetType()); | 55 // throw OrthancStone::MessageNotDeclaredException(message.GetType()); |
56 } | 56 // } |
57 } | 57 // } |
58 | 58 |
59 }; | 59 //}; |
60 | 60 |
61 class MyPartialObserver : public OrthancStone::IObserver | 61 //class MyPartialObserver : public OrthancStone::IObserver |
62 { | 62 //{ |
63 | 63 |
64 public: | 64 //public: |
65 MyPartialObserver(OrthancStone::MessageBroker& broker) | 65 // MyPartialObserver(OrthancStone::MessageBroker& broker) |
66 : OrthancStone::IObserver(broker) | 66 // : OrthancStone::IObserver(broker) |
67 { | 67 // { |
68 DeclareHandledMessage(OrthancStone::MessageType_Test1); | 68 //// DeclareHandledMessage(OrthancStone::MessageType_Test1); |
69 // don't declare Test2 on purpose | 69 // // don't declare Test2 on purpose |
70 } | 70 // } |
71 | 71 |
72 | 72 |
73 void HandleMessage(OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { | 73 // void HandleMessage(OrthancStone::IObservable& from, const OrthancStone::IMessage& message) { |
74 switch (message.GetType()) | 74 // switch (message.GetType()) |
75 { | 75 // { |
76 case OrthancStone::MessageType_Test1: | 76 // case OrthancStone::MessageType_Test1: |
77 test1Counter++; | 77 // test1Counter++; |
78 break; | 78 // break; |
79 case OrthancStone::MessageType_Test2: | 79 // case OrthancStone::MessageType_Test2: |
80 test2Counter++; | 80 // test2Counter++; |
81 break; | 81 // break; |
82 default: | 82 // default: |
83 throw OrthancStone::MessageNotDeclaredException(message.GetType()); | 83 // throw OrthancStone::MessageNotDeclaredException(message.GetType()); |
84 } | 84 // } |
85 } | 85 // } |
86 | 86 |
87 }; | 87 //}; |
88 | 88 |
89 | 89 |
90 class MyObservable : public OrthancStone::IObservable | 90 //class MyObservable : public OrthancStone::IObservable |
91 { | 91 //{ |
92 | 92 |
93 public: | 93 //public: |
94 MyObservable(OrthancStone::MessageBroker& broker) | 94 // MyObservable(OrthancStone::MessageBroker& broker) |
95 : OrthancStone::IObservable(broker) | 95 // : OrthancStone::IObservable(broker) |
96 { | 96 // { |
97 DeclareEmittableMessage(OrthancStone::MessageType_Test1); | 97 // DeclareEmittableMessage(OrthancStone::MessageType_Test1); |
98 DeclareEmittableMessage(OrthancStone::MessageType_Test2); | 98 // DeclareEmittableMessage(OrthancStone::MessageType_Test2); |
99 } | 99 // } |
100 | 100 |
101 }; | 101 //}; |
102 | 102 |
103 | 103 |
104 TEST(MessageBroker, NormalUsage) | 104 //TEST(MessageBroker, NormalUsage) |
105 { | 105 //{ |
106 OrthancStone::MessageBroker broker; | 106 // OrthancStone::MessageBroker broker; |
107 MyObservable observable(broker); | 107 // MyObservable observable(broker); |
108 | 108 |
109 test1Counter = 0; | 109 // test1Counter = 0; |
110 | 110 |
111 // no observers have been registered -> nothing shall happen | 111 // // no observers have been registered -> nothing shall happen |
112 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); | 112 // observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); |
113 | 113 |
114 ASSERT_EQ(0, test1Counter); | 114 // ASSERT_EQ(0, test1Counter); |
115 | 115 |
116 // register an observer, check it is called | 116 // // register an observer, check it is called |
117 MyFullObserver fullObserver(broker); | 117 // MyFullObserver fullObserver(broker); |
118 ASSERT_NO_THROW(observable.RegisterObserver(fullObserver)); | 118 // ASSERT_NO_THROW(observable.RegisterObserver(fullObserver)); |
119 | 119 |
120 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); | 120 // observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); |
121 | 121 |
122 ASSERT_EQ(1, test1Counter); | 122 // ASSERT_EQ(1, test1Counter); |
123 | 123 |
124 // register an invalid observer, check it raises an exception | 124 // // register an invalid observer, check it raises an exception |
125 MyPartialObserver partialObserver(broker); | 125 // MyPartialObserver partialObserver(broker); |
126 ASSERT_THROW(observable.RegisterObserver(partialObserver), OrthancStone::MessageNotDeclaredException); | 126 // ASSERT_THROW(observable.RegisterObserver(partialObserver), OrthancStone::MessageNotDeclaredException); |
127 | 127 |
128 // check an exception is thrown when the observable emits an undeclared message | 128 // // check an exception is thrown when the observable emits an undeclared message |
129 ASSERT_THROW(observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_LayerSource_GeometryReady)), OrthancStone::MessageNotDeclaredException); | 129 // ASSERT_THROW(observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_LayerSource_GeometryReady)), OrthancStone::MessageNotDeclaredException); |
130 | 130 |
131 // unregister the observer, make sure nothing happens afterwards | 131 // // unregister the observer, make sure nothing happens afterwards |
132 observable.UnregisterObserver(fullObserver); | 132 // observable.UnregisterObserver(fullObserver); |
133 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); | 133 // observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); |
134 ASSERT_EQ(1, test1Counter); | 134 // ASSERT_EQ(1, test1Counter); |
135 } | 135 //} |
136 | 136 |
137 TEST(MessageBroker, DeleteObserverWhileRegistered) | 137 //TEST(MessageBroker, DeleteObserverWhileRegistered) |
138 { | 138 //{ |
139 OrthancStone::MessageBroker broker; | 139 // OrthancStone::MessageBroker broker; |
140 MyObservable observable(broker); | 140 // MyObservable observable(broker); |
141 | 141 |
142 test1Counter = 0; | 142 // test1Counter = 0; |
143 | 143 |
144 { | 144 // { |
145 // register an observer, check it is called | 145 // // register an observer, check it is called |
146 MyFullObserver observer(broker); | 146 // MyFullObserver observer(broker); |
147 observable.RegisterObserver(observer); | 147 // observable.RegisterObserver(observer); |
148 | 148 |
149 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); | 149 // observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); |
150 | 150 |
151 ASSERT_EQ(1, test1Counter); | 151 // ASSERT_EQ(1, test1Counter); |
152 } | 152 // } |
153 | 153 |
154 // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !) | 154 // // at this point, the observer has been deleted, the handle shall not be called again (and it shall not crash !) |
155 observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); | 155 // observable.EmitMessage(OrthancStone::IMessage(OrthancStone::MessageType_Test1)); |
156 | 156 |
157 ASSERT_EQ(1, test1Counter); | 157 // ASSERT_EQ(1, test1Counter); |
158 } | 158 //} |