PageRenderTime 25ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/test/service/monitor/entriesmanager.cpp

https://gitlab.com/github-cloud-corporation/cynara
C++ | 358 lines | 246 code | 88 blank | 24 comment | 0 complexity | 75db7f441bc0e62f1e74870f7cb3cb1f MD5 | raw file
  1. /*
  2. * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /**
  17. * @file test/service/monitor/entriesmanager.cpp
  18. * @author Aleksander Zdyb <a.zdyb@samsung.com>
  19. * @version 1.0
  20. * @brief Tests of EntriesManager
  21. */
  22. #include <gtest/gtest.h>
  23. #include <gmock/gmock.h>
  24. #include <ctime>
  25. #include <service/monitor/EntriesManager.h>
  26. #include <common/types/MonitorEntry.h>
  27. #include "../../helpers.h"
  28. using namespace Cynara;
  29. namespace {
  30. typedef std::vector<MonitorEntry> MonitorEntries;
  31. } /* namespace anonymous */
  32. TEST(EntriesManager, oneClient) {
  33. EntriesManager entriesManager;
  34. auto filledClient = entriesManager.getFilledClientId();
  35. ASSERT_EQ(-1, filledClient);
  36. }
  37. TEST(EntriesManager, oneClientNotFilled) {
  38. EntriesManager entriesManager;
  39. entriesManager.addClient(666, 3);
  40. auto filledClient = entriesManager.getFilledClientId();
  41. ASSERT_EQ(-1, filledClient);
  42. }
  43. TEST(EntriesManager, oneClientFilled) {
  44. EntriesManager entriesManager;
  45. entriesManager.addClient(666, 3);
  46. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  47. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  48. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  49. auto filledClient = entriesManager.getFilledClientId();
  50. ASSERT_EQ(666, filledClient);
  51. }
  52. TEST(EntriesManager, oneClientModified) {
  53. EntriesManager entriesManager;
  54. entriesManager.addClient(666, 5);
  55. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  56. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  57. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  58. ASSERT_EQ(-1, entriesManager.getFilledClientId());
  59. entriesManager.modifyClient(666, 3);
  60. ASSERT_EQ(666, entriesManager.getFilledClientId());
  61. }
  62. TEST(EntriesManager, oneClientRemoved) {
  63. EntriesManager entriesManager;
  64. entriesManager.addClient(666, 3);
  65. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  66. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  67. entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}});
  68. ASSERT_EQ(666, entriesManager.getFilledClientId());
  69. entriesManager.removeClient(666);
  70. ASSERT_EQ(-1, entriesManager.getFilledClientId());
  71. }
  72. TEST(EntriesManager, fetchForOne) {
  73. EntriesManager entriesManager;
  74. MonitorEntries expectedEntries;
  75. expectedEntries.push_back({{"c1", "u1", "p1"}, 0, {0, 0}});
  76. expectedEntries.push_back({{"c2", "u2", "p2"}, 0, {0, 0}});
  77. expectedEntries.push_back({{"c3", "u3", "p3"}, 0, {0, 0}});
  78. entriesManager.addClient(666, 3);
  79. entriesManager.addEntry(expectedEntries.at(0));
  80. entriesManager.addEntry(expectedEntries.at(1));
  81. entriesManager.addEntry(expectedEntries.at(2));
  82. auto actualEntries = entriesManager.fetchEntriesForClient(666);
  83. ASSERT_EQ(expectedEntries, actualEntries);
  84. }
  85. TEST(EntriesManager, fetchForMore) {
  86. EntriesManager entriesManager;
  87. MonitorEntries expectedEntries;
  88. expectedEntries.push_back({{"c1", "u1", "p1"}, 0, {0, 0}});
  89. expectedEntries.push_back({{"c2", "u2", "p2"}, 0, {0, 0}});
  90. expectedEntries.push_back({{"c3", "u3", "p3"}, 0, {0, 0}});
  91. expectedEntries.push_back({{"c4", "u4", "p4"}, 0, {0, 0}});
  92. entriesManager.addClient(666, 3);
  93. entriesManager.addClient(777, 4);
  94. entriesManager.addEntry(expectedEntries.at(0));
  95. entriesManager.addEntry(expectedEntries.at(1));
  96. entriesManager.addEntry(expectedEntries.at(2));
  97. // 666 should be filled as they are waiting for only 3 entries
  98. ASSERT_TRUE(entriesManager.isClientFilled(666));
  99. ASSERT_FALSE(entriesManager.isClientFilled(777));
  100. // 666 should get their 3 entries, then be unregistered
  101. auto actualEntries666 = entriesManager.fetchEntriesForClient(666);
  102. ASSERT_EQ(actualEntries666, Helpers::sliced<MonitorEntries>(expectedEntries.begin(), 3));
  103. ASSERT_FALSE(entriesManager.isClientFilled(666));
  104. // Add one more entry and assert 777 is filled
  105. entriesManager.addEntry(expectedEntries.at(3));
  106. ASSERT_TRUE(entriesManager.isClientFilled(777));
  107. auto actualEntries777 = entriesManager.fetchEntriesForClient(777);
  108. ASSERT_EQ(actualEntries777, expectedEntries);
  109. ASSERT_FALSE(entriesManager.isClientFilled(777));
  110. }
  111. TEST(EntriesManager, user1) {
  112. EntriesManager entriesManager;
  113. ASSERT_FALSE(entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}}));
  114. ASSERT_TRUE(entriesManager.addClient(666, 1));
  115. ASSERT_FALSE(entriesManager.isClientFilled(666));
  116. }
  117. TEST(EntriesManager, user2) {
  118. EntriesManager entriesManager;
  119. ASSERT_FALSE(entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}}));
  120. ASSERT_TRUE(entriesManager.addClient(666, 1));
  121. ASSERT_FALSE(entriesManager.isClientFilled(666));
  122. ASSERT_EQ(-1, entriesManager.getFilledClientId());
  123. ASSERT_TRUE(entriesManager.addEntry({{"c", "u", "p"}, 0, {0, 0}}));
  124. ASSERT_TRUE(entriesManager.isClientFilled(666));
  125. }
  126. TEST(EntriesManager, user3) {
  127. using ::testing::ElementsAre;
  128. EntriesManager entriesManager;
  129. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  130. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  131. ASSERT_FALSE(entriesManager.addEntry(entry1));
  132. ASSERT_TRUE(entriesManager.addClient(666, 1));
  133. ASSERT_FALSE(entriesManager.isClientFilled(666));
  134. ASSERT_EQ(-1, entriesManager.getFilledClientId());
  135. ASSERT_TRUE(entriesManager.addEntry(entry2));
  136. ASSERT_TRUE(entriesManager.isClientFilled(666));
  137. ASSERT_EQ(666, entriesManager.getFilledClientId());
  138. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry2));
  139. }
  140. TEST(EntriesManager, user4) {
  141. using ::testing::ElementsAre;
  142. EntriesManager entriesManager;
  143. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  144. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  145. ASSERT_TRUE(entriesManager.addClient(666, 2));
  146. ASSERT_TRUE(entriesManager.addClient(777, 2));
  147. ASSERT_TRUE(entriesManager.addEntry(entry1));
  148. ASSERT_TRUE(entriesManager.addEntry(entry2));
  149. ASSERT_TRUE(entriesManager.isClientFilled(666));
  150. ASSERT_TRUE(entriesManager.isClientFilled(777));
  151. ASSERT_TRUE(entriesManager.removeClient(666));
  152. ASSERT_TRUE(entriesManager.isClientFilled(777));
  153. ASSERT_THAT(entriesManager.fetchEntriesForClient(777), ElementsAre(entry1, entry2));
  154. }
  155. TEST(EntriesManager, user5) {
  156. using ::testing::ElementsAre;
  157. EntriesManager entriesManager;
  158. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  159. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  160. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  161. ASSERT_TRUE(entriesManager.addClient(666, 1));
  162. ASSERT_TRUE(entriesManager.addEntry(entry1));
  163. ASSERT_TRUE(entriesManager.addClient(777, 2))
  164. ;
  165. ASSERT_TRUE(entriesManager.addEntry(entry2));
  166. ASSERT_TRUE(entriesManager.addEntry(entry3));
  167. ASSERT_TRUE(entriesManager.removeClient(666));
  168. ASSERT_THAT(entriesManager.fetchEntriesForClient(777), ElementsAre(entry2, entry3));
  169. }
  170. TEST(EntriesManager, user6) {
  171. using ::testing::ElementsAre;
  172. EntriesManager entriesManager;
  173. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  174. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  175. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  176. ASSERT_TRUE(entriesManager.addClient(666, 2));
  177. ASSERT_TRUE(entriesManager.addEntry(entry1));
  178. ASSERT_TRUE(entriesManager.addClient(777, 2))
  179. ;
  180. ASSERT_TRUE(entriesManager.addEntry(entry2));
  181. ASSERT_TRUE(entriesManager.addEntry(entry3));
  182. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry1, entry2));
  183. ASSERT_THAT(entriesManager.fetchEntriesForClient(777), ElementsAre(entry2, entry3));
  184. }
  185. TEST(EntriesManager, user7) {
  186. using ::testing::ElementsAre;
  187. EntriesManager entriesManager;
  188. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  189. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  190. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  191. MonitorEntry entry4{{"c4", "u", "p"}, 0, {0, 0}};
  192. ASSERT_TRUE(entriesManager.addClient(666, 2));
  193. ASSERT_TRUE(entriesManager.addEntry(entry1));
  194. ASSERT_TRUE(entriesManager.addEntry(entry2));
  195. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry1, entry2));
  196. ASSERT_TRUE(entriesManager.modifyClient(666, 2));
  197. ASSERT_TRUE(entriesManager.addEntry(entry3));
  198. ASSERT_TRUE(entriesManager.addEntry(entry4));
  199. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry3, entry4));
  200. }
  201. TEST(EntriesManager, user8) {
  202. using ::testing::ElementsAre;
  203. EntriesManager entriesManager;
  204. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  205. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  206. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  207. MonitorEntry entry4{{"c4", "u", "p"}, 0, {0, 0}};
  208. ASSERT_TRUE(entriesManager.addClient(666, 2));
  209. ASSERT_TRUE(entriesManager.addClient(777, 2));
  210. ASSERT_TRUE(entriesManager.addEntry(entry1));
  211. ASSERT_TRUE(entriesManager.addEntry(entry2));
  212. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry1, entry2));
  213. ASSERT_TRUE(entriesManager.modifyClient(666, 2));
  214. ASSERT_TRUE(entriesManager.addEntry(entry3));
  215. ASSERT_TRUE(entriesManager.addEntry(entry4));
  216. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry3, entry4));
  217. ASSERT_THAT(entriesManager.fetchEntriesForClient(777), ElementsAre(entry1, entry2));
  218. }
  219. TEST(EntriesManager, user9) {
  220. using ::testing::ElementsAre;
  221. using ::testing::IsEmpty;
  222. EntriesManager entriesManager;
  223. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  224. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  225. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  226. MonitorEntry entry4{{"c4", "u", "p"}, 0, {0, 0}};
  227. ASSERT_TRUE(entriesManager.addClient(666, 2));
  228. ASSERT_TRUE(entriesManager.addEntry(entry1));
  229. ASSERT_TRUE(entriesManager.addEntry(entry2));
  230. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry1, entry2));
  231. ASSERT_TRUE(entriesManager.removeClient(666));
  232. ASSERT_FALSE(entriesManager.addEntry(entry3));
  233. ASSERT_FALSE(entriesManager.addEntry(entry4));
  234. ASSERT_TRUE(entriesManager.addClient(666, 2));
  235. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), IsEmpty());
  236. }
  237. TEST(EntriesManager, userFlush) {
  238. using ::testing::ElementsAre;
  239. EntriesManager entriesManager;
  240. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  241. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  242. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  243. ASSERT_TRUE(entriesManager.addClient(666, 4));
  244. ASSERT_TRUE(entriesManager.addEntry(entry1));
  245. ASSERT_TRUE(entriesManager.addEntry(entry2));
  246. ASSERT_TRUE(entriesManager.addEntry(entry3));
  247. ASSERT_THAT(entriesManager.fetchEntriesForClient(666, true), ElementsAre(entry1, entry2, entry3));
  248. }
  249. TEST(EntriesManager, userFlushNone) {
  250. using ::testing::ElementsAre;
  251. EntriesManager entriesManager;
  252. ASSERT_TRUE(entriesManager.addClient(666, 4));
  253. ASSERT_THAT(entriesManager.fetchEntriesForClient(666, true), ElementsAre());
  254. }
  255. TEST(EntriesManager, userFetchFlush) {
  256. using ::testing::ElementsAre;
  257. EntriesManager entriesManager;
  258. MonitorEntry entry1{{"c1", "u", "p"}, 0, {0, 0}};
  259. MonitorEntry entry2{{"c2", "u", "p"}, 0, {0, 0}};
  260. MonitorEntry entry3{{"c3", "u", "p"}, 0, {0, 0}};
  261. MonitorEntry entry4{{"c4", "u", "p"}, 0, {0, 0}};
  262. ASSERT_TRUE(entriesManager.addClient(666, 3));
  263. ASSERT_TRUE(entriesManager.addEntry(entry1));
  264. ASSERT_TRUE(entriesManager.addEntry(entry2));
  265. ASSERT_TRUE(entriesManager.addEntry(entry3));
  266. ASSERT_THAT(entriesManager.fetchEntriesForClient(666), ElementsAre(entry1, entry2, entry3));
  267. ASSERT_TRUE(entriesManager.addEntry(entry4));
  268. ASSERT_TRUE(entriesManager.modifyClient(666, 3));
  269. ASSERT_THAT(entriesManager.fetchEntriesForClient(666, true), ElementsAre(entry4));
  270. }