PageRenderTime 56ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/AcceptnaceTests/GeneralClientTest.cs

http://Geeba.codeplex.com
C# | 404 lines | 342 code | 46 blank | 16 comment | 29 complexity | 841994f5cf72632281472bcb60debc99 MD5 | raw file
  1. using System;
  2. using System.Text;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using GeebaClient;
  7. using System.Threading;
  8. using ServerAdapter.WcfGeebaService;
  9. using WcfGeebaServer.DBDAL;
  10. namespace AcceptnaceTests
  11. {
  12. [TestClass]
  13. public class GeneralClientTest
  14. {
  15. private static ConsoleClient_Accessor _target = new ConsoleClient_Accessor();
  16. private static Member _admin = null;
  17. public GeneralClientTest()
  18. {
  19. Data.ClearDB();
  20. User adminUser = _target.server.serverEntry();
  21. _admin = _target.server.serverLogin(adminUser, TestUtils.GetAdminUsername(), TestUtils.GetAdminPassword());
  22. }
  23. #region DurableTests
  24. [TestMethod()]
  25. [DeploymentItem("GeebaClient.exe")]
  26. public void DurableUsersTest()
  27. {
  28. string username = TestUtils.GetNextUsername();
  29. string password = TestUtils.GetPassword();
  30. User user = _target.server.serverEntry();
  31. _target.server.serverRegister(username, password);
  32. Member mem = null;
  33. for (int i = 0; i < 50; i++)
  34. {
  35. mem = _target.server.serverLogin(user, username, password);
  36. Assert.IsNotNull(mem);
  37. user = _target.server.serverLogout(mem);
  38. mem = null;
  39. }
  40. }
  41. [TestMethod()]
  42. [DeploymentItem("GeebaClient.exe")]
  43. public void DurableSubForumsTest()
  44. {
  45. string topic = AddNewSubForum();
  46. try
  47. {
  48. // attempt to find it over time...
  49. for (int i = 0; i < 50; i++)
  50. {
  51. User user = _target.server.serverEntry();
  52. bool found = false;
  53. foreach (GSubForum sf in _target.server.serverGetSubForums())
  54. {
  55. if (sf.topic.Equals(topic))
  56. {
  57. found = true;
  58. break;
  59. }
  60. }
  61. if (!found)
  62. {
  63. throw new Exception("Sub forum with topic " + topic + " was not found on the "+ i + "th iteration!");
  64. }
  65. }
  66. Assert.IsTrue(true);
  67. }
  68. catch (Exception e)
  69. {
  70. Console.Write(e.Data);
  71. Assert.IsTrue(false);
  72. }
  73. }
  74. [TestMethod()]
  75. [DeploymentItem("GeebaClient.exe")]
  76. public void DurableThreads()
  77. {
  78. Data.ClearDB();
  79. string topic = AddNewSubForum();
  80. User olduser = RegisterNewMember();
  81. Member member = _target.server.serverLogin(olduser, TestUtils.GetCurrentUsername(), TestUtils.GetPassword());
  82. Assert.IsNotNull(member);
  83. GThread newMessage = PostNewThread(topic, member);
  84. Assert.IsTrue(newMessage._id >= 0);
  85. _target.server.serverLogout(member);
  86. User olduser2 = RegisterNewMember();
  87. // create sub forum stub
  88. GSubForum subforum = new GSubForum();
  89. subforum.topic = topic;
  90. // attempt to find it over time...
  91. for (int i = 0; i < 40; i++)
  92. {
  93. Member member2 = _target.server.serverLogin(olduser2, TestUtils.GetCurrentUsername(), TestUtils.GetPassword());
  94. // find thread in sub forum
  95. bool found = false;
  96. foreach (GThread th in _target.server.serverGetThreads(subforum))
  97. {
  98. if (th._id.Equals(newMessage._id))
  99. {
  100. found = true;
  101. break;
  102. }
  103. }
  104. Assert.IsTrue(found);
  105. olduser2 = _target.server.serverLogout(member2);
  106. }
  107. }
  108. [TestMethod()]
  109. [DeploymentItem("GeebaClient.exe")]
  110. public void DurableComments()
  111. {
  112. Data.ClearDB();
  113. string topic = AddNewSubForum();
  114. User olduser = RegisterNewMember();
  115. Member member = _target.server.serverLogin(olduser, TestUtils.GetCurrentUsername(), TestUtils.GetPassword());
  116. Assert.IsNotNull(member);
  117. GThread newMessage = PostNewThread(topic, member);
  118. Assert.IsNotNull(newMessage);
  119. GPost post = PostNewComment(topic, member, newMessage);
  120. Assert.IsNotNull(post);
  121. Assert.IsNotNull(_target.server.serverLogout(member));
  122. User olduser2 = RegisterNewMember();
  123. Assert.IsNotNull(olduser2);
  124. // create sub forum stub
  125. GSubForum subforum = new GSubForum();
  126. subforum.topic = topic;
  127. // attempt to find it over time...
  128. for (int i = 0; i < 30; i++)
  129. {
  130. Member member2 = _target.server.serverLogin(olduser2, TestUtils.GetCurrentUsername(), TestUtils.GetPassword());
  131. Assert.IsNotNull(member2);
  132. // find thread in sub forum
  133. GThread thread = null;
  134. foreach (GThread th in _target.server.serverGetThreads(subforum))
  135. {
  136. if (th._id.Equals(newMessage._id))
  137. {
  138. thread = th;
  139. break;
  140. }
  141. }
  142. Assert.IsNotNull(thread);
  143. // find post in thread
  144. bool found = false;
  145. foreach (GPost ps in _target.server.serverGetComments(member2, topic, thread._id))
  146. {
  147. if (ps._id.Equals(ps._id))
  148. {
  149. found = true;
  150. break;
  151. }
  152. }
  153. Assert.IsTrue(found);
  154. olduser2 = _target.server.serverLogout(member2);
  155. Assert.IsNotNull(olduser2);
  156. }
  157. }
  158. #endregion
  159. #region EnduranceTest
  160. private static void EnduranceTestThread()
  161. {
  162. try
  163. {
  164. for (int i = 0; i < 5; i++)
  165. {
  166. // enter
  167. User user = _target.server.serverEntry();
  168. // register
  169. string username = TestUtils.GetNextUsername();
  170. string password = TestUtils.GetPassword();
  171. Assert.IsTrue(_target.server.serverRegister(username, password));
  172. // login
  173. Member member = _target.server.serverLogin(user, username, password);
  174. // publish
  175. GThread newMessage = new GThread();
  176. newMessage._subject = TestUtils.GetNextSubject();
  177. newMessage._content = TestUtils.GetNextContent();
  178. newMessage._publisher = member;
  179. newMessage._id = _target.server.serverPublish(member, TestUtils.GetCurrentTopic(), newMessage);
  180. // watch it
  181. GSubForum sf = new GSubForum();
  182. sf.topic = TestUtils.GetCurrentTopic();
  183. List<GThread> all_threads = _target.server.serverGetThreads(sf);
  184. // verify threads
  185. bool res = false;
  186. for (int j = 0; j < all_threads.Count; j++)
  187. {
  188. if (all_threads[j]._id == newMessage._id)
  189. {
  190. res = true;
  191. break;
  192. }
  193. }
  194. if (!res)
  195. {
  196. throw new Exception("Could not find thread!");
  197. }
  198. }
  199. }
  200. catch (Exception e)
  201. {
  202. Console.Write(e.Message);
  203. }
  204. }
  205. [TestMethod()]
  206. [DeploymentItem("GeebaClient.exe")]
  207. public void EnduranceTest()
  208. {
  209. List<Thread> allThreads = new List<Thread>();
  210. AddNewSubForum();
  211. for (int i = 0; i < 100; i++)
  212. {
  213. ConsoleClientTest consoleClient = new ConsoleClientTest();
  214. Thread consoleThread = new Thread(GeneralClientTest.EnduranceTestThread);
  215. allThreads.Add(consoleThread);
  216. consoleThread.Start();
  217. }
  218. foreach (Thread th in allThreads)
  219. {
  220. th.Join();
  221. }
  222. Assert.IsTrue(true);
  223. }
  224. #endregion
  225. #region InteractivityTests
  226. private static int _postedThread1 = 0;
  227. private static int _postedThread2 = 0;
  228. private static int _postedThread3 = 0;
  229. private static int _postedThread4 = 0;
  230. private static int _postedThread5 = 0;
  231. [TestMethod()]
  232. [DeploymentItem("GeebaClient.exe")]
  233. public void Interactivity()
  234. {
  235. ServerAdapter.SAdapter _server = _target.server;
  236. _target.listener.OnUpdateFromServer += new ServerAdapter.ClientListener.OnUpdate(listener_OnUpdateFromServerTest);
  237. string topic = AddNewSubForum();
  238. Member member = RegisterAndLoginNewMember();
  239. _server.serverSubscribe(member.username);
  240. PostNewThread(topic, member);
  241. Member member2 = RegisterAndLoginNewMember();
  242. _postedThread1 = PostNewThread(topic, member2)._id;
  243. string topic2 = AddNewSubForum();
  244. _postedThread2 = PostNewThread(topic2, member2)._id;
  245. _postedThread3 = PostNewThread(topic2, member)._id;
  246. _postedThread4 = PostNewThread(topic2, member2)._id;
  247. _postedThread5 = PostNewThread(topic2, member)._id;
  248. }
  249. void listener_OnUpdateFromServerTest(GThread message, DateTime timestamp, bool isNotification)
  250. {
  251. bool shouldNotify = (message._id == _postedThread1) || (message._id == _postedThread4);
  252. bool shouldNotNotify = (message._id == _postedThread2) || (message._id == _postedThread4) || (message._id == _postedThread5);
  253. if (isNotification)
  254. {
  255. if (shouldNotNotify)
  256. {
  257. Assert.Fail();
  258. }
  259. if (shouldNotify)
  260. {
  261. Assert.IsTrue(true);
  262. }
  263. }
  264. else
  265. {
  266. if (shouldNotify)
  267. {
  268. // isNotification should be true!
  269. Assert.Fail();
  270. }
  271. }
  272. }
  273. #endregion
  274. # region UtilMethods
  275. private static string AddNewSubForum()
  276. {
  277. string topic = TestUtils.GetNextTopic();
  278. _target.server.serverAddSubForum(_admin, topic, TestUtils.GetAdminUsername());
  279. return topic;
  280. }
  281. private static User RegisterNewMember()
  282. {
  283. User olduser = _target.server.serverEntry();
  284. string username = TestUtils.GetNextUsername();
  285. string password = TestUtils.GetPassword();
  286. _target.server.serverRegister(username, password);
  287. return olduser;
  288. }
  289. private static GThread PostNewThread(string topic, Member member)
  290. {
  291. GThread newMessage = new GThread();
  292. newMessage._subject = TestUtils.GetNextSubject();
  293. newMessage._content = TestUtils.GetContent();
  294. newMessage._publisher = member;
  295. newMessage._id = _target.server.serverPublish(member, topic, newMessage);
  296. return newMessage;
  297. }
  298. private static GPost PostNewComment(string topic, Member member, GThread newMessage)
  299. {
  300. GPost post = new GPost();
  301. post._subject = TestUtils.GetNextSubject();
  302. post._content = TestUtils.GetNextContent();
  303. post._publisher = member;
  304. post._id = _target.server.commentOnThread(member, post, topic, newMessage._id);
  305. return post;
  306. }
  307. private static Member LoginNewMemberWithCurrentName()
  308. {
  309. string username = TestUtils.GetCurrentMember();
  310. _target.server.serverRegister(username, TestUtils.GetPassword());
  311. Member mem = _target.server.serverLogin(_target.server.serverEntry(), username, TestUtils.GetPassword());
  312. return mem;
  313. }
  314. private static Member RegisterAndLoginNewMember()
  315. {
  316. RegisterNewMember();
  317. string username = TestUtils.GetCurrentUsername();
  318. _target.server.serverRegister(username, TestUtils.GetPassword());
  319. Member mem = _target.server.serverLogin(_target.server.serverEntry(), username, TestUtils.GetPassword());
  320. return mem;
  321. }
  322. private static bool DoesSubForumExist(string topic)
  323. {
  324. bool actual = false;
  325. foreach (GSubForum sf in _target.server.serverGetSubForums())
  326. {
  327. if (sf.topic.Equals(topic))
  328. {
  329. actual = true;
  330. break;
  331. }
  332. }
  333. return actual;
  334. }
  335. public static void AddSubForumWithCurrentTopic()
  336. {
  337. _target.server.serverAddSubForum(_admin, TestUtils.GetCurrentTopic(), TestUtils.GetAdminUsername());
  338. }
  339. public static void ConsoleAddThread()
  340. {
  341. AddSubForumWithCurrentTopic();
  342. Member mem = LoginNewMemberWithCurrentName();
  343. PostNewThread(TestUtils.GetCurrentTopic(), mem);
  344. }
  345. public static void ConsoleAddModerator()
  346. {
  347. AddSubForumWithCurrentTopic();
  348. Member member = LoginNewMemberWithCurrentName();
  349. // add new member as moderator
  350. for (int i = 0; i < 5; i++)
  351. {
  352. PostNewThread(TestUtils.GetCurrentTopic(), member);
  353. }
  354. _target.server.serverAddModerator(_admin, TestUtils.GetCurrentTopic(), member.username);
  355. }
  356. #endregion
  357. }
  358. }