PageRenderTime 46ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/silverlight/PubnubSilverlightUnitTest/WhenAMessageIsPublished.cs

https://github.com/Sfyler/c-sharp
C# | 835 lines | 727 code | 108 blank | 0 comment | 110 complexity | 6ca2ddbb649d82724ae70f8df249a690 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Microsoft.VisualStudio.TestTools.UnitTesting;
  6. using System.ComponentModel;
  7. using System.Threading;
  8. using System.Collections;
  9. using Newtonsoft.Json;
  10. using Newtonsoft.Json.Linq;
  11. using Microsoft.Silverlight.Testing;
  12. using PubNubMessaging.Core;
  13. namespace PubnubSilverlight.UnitTest
  14. {
  15. [TestClass]
  16. public class WhenAMessageIsPublished : SilverlightTest
  17. {
  18. bool isPublished2 = false;
  19. bool isPublished3 = false;
  20. bool isUnencryptPublished = false;
  21. bool isUnencryptObjectPublished = false;
  22. bool isEncryptObjectPublished = false;
  23. bool isUnencryptDH = false;
  24. bool isUnencryptObjectDH = false;
  25. bool isEncryptObjectDH = false;
  26. bool isEncryptPublished = false;
  27. bool isSecretEncryptPublished = false;
  28. bool isEncryptDH = false;
  29. bool isSecretEncryptDH = false;
  30. bool isComplexObjectPublished = false;
  31. bool isComplexObjectDetailedHistory = false;
  32. bool isSerializedObjectMessagePublished = false;
  33. bool isSerializedObjectMessageDetailedHistory = false;
  34. bool isLargeMessagePublished = false;
  35. long unEncryptPublishTimetoken = 0;
  36. long unEncryptObjectPublishTimetoken = 0;
  37. long encryptObjectPublishTimetoken = 0;
  38. long encryptPublishTimetoken = 0;
  39. long secretEncryptPublishTimetoken = 0;
  40. long complexObjectPublishTimetoken = 0;
  41. long serializedMessagePublishTimetoken = 0;
  42. ManualResetEvent mrePublish = new ManualResetEvent(false);
  43. ManualResetEvent mreDetailedHistory = new ManualResetEvent(false);
  44. ManualResetEvent mreGrant = new ManualResetEvent(false);
  45. const string messageForUnencryptPublish = "Pubnub Messaging API 1";
  46. const string messageForEncryptPublish = "漢語";
  47. const string messageForSecretEncryptPublish = "Pubnub Messaging API 2";
  48. const string messageLarge2K = "Numerous questions remain about the origins of the chemical and what impact its apparent use could have on the ongoing Syrian civil war and international involvement in it.When asked if the intelligence community's conclusion pushed the situation across President Barack Obama's \"red line\" that could potentially trigger more U.S. involvement in the Syrian civil war, Hagel said it's too soon to say.\"We need all the facts. We need all the information,\" he said. \"What I've just given you is what our intelligence community has said they know. As I also said, they are still assessing and they are still looking at what happened, who was responsible and the other specifics that we'll need.\" In a letter sent to lawmakers before Hagel's announcement, the White House said that intelligence analysts have concluded \"with varying degrees of confidence that the Syrian regime has used chemical weapons on a small scale in Syria, specifically the chemical agent sarin.\" In the letter, signed by White House legislative affairs office Director Miguel Rodriguez, the White House said the \"chain of custody\" of the chemicals was not clear and that intelligence analysts could not confirm the circumstances under which the sarin was used, including the role of Syrian President Bashar al-Assad's regime. Read Rodriguez's letter to Levin (PDF) But, the letter said, \"we do believe that any use of chemical weapons in Syria would very likely have originated with the Assad regime.\" The Syrian government has been battling a rebellion for more than two years, bringing international condemnation of the regime and pleas for greater international assistance. The United Nations estimated in February that more than 70,000 people had died since the conflict began. The administration is \"pressing for a comprehensive United Nations investigation that can credibly evaluate the evidence and establish what took place,\" the White House letter said. Sen. John McCain, one of the lawmakers who received the letter, said the use of";
  49. string messageObjectForUnencryptPublish = "";
  50. string messageObjectForEncryptPublish = "";
  51. string messageComplexObjectForPublish = "";
  52. string serializedObjectMessageForPublish;
  53. bool receivedGrantMessage = false;
  54. bool grantInitCallbackInvoked = false;
  55. [ClassInitialize, Asynchronous]
  56. public void Init()
  57. {
  58. if (!PubnubCommon.PAMEnabled)
  59. {
  60. EnqueueTestComplete();
  61. return;
  62. }
  63. receivedGrantMessage = false;
  64. ThreadPool.QueueUserWorkItem((s) =>
  65. {
  66. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, PubnubCommon.SecretKey, "", false);
  67. PubnubUnitTest unitTest = new PubnubUnitTest();
  68. unitTest.TestClassName = "GrantRequestUnitTest";
  69. unitTest.TestCaseName = "Init";
  70. pubnub.PubnubUnitTest = unitTest;
  71. string channel = "hello_my_channel";
  72. EnqueueCallback(() => pubnub.GrantAccess<string>(channel, true, true, 20, ThenPublishInitializeShouldReturnGrantMessage, DummyErrorCallback));
  73. mreGrant.WaitOne(310 * 1000);
  74. EnqueueCallback(() => Assert.IsTrue(receivedGrantMessage, "WhenAClientIsPresent Grant access failed."));
  75. EnqueueTestComplete();
  76. });
  77. }
  78. [Asynchronous]
  79. void ThenPublishInitializeShouldReturnGrantMessage(string receivedMessage)
  80. {
  81. try
  82. {
  83. if (!string.IsNullOrEmpty(receivedMessage) && !string.IsNullOrEmpty(receivedMessage.Trim()))
  84. {
  85. object[] serializedMessage = JsonConvert.DeserializeObject<object[]>(receivedMessage);
  86. JContainer dictionary = serializedMessage[0] as JContainer;
  87. var status = dictionary["status"].ToString();
  88. if (status == "200")
  89. {
  90. receivedGrantMessage = true;
  91. }
  92. }
  93. }
  94. catch { }
  95. finally
  96. {
  97. mreGrant.Set();
  98. }
  99. }
  100. [TestMethod, Asynchronous]
  101. public void ThenUnencryptPublishShouldReturnSuccessCodeAndInfo()
  102. {
  103. isUnencryptPublished = false;
  104. mrePublish = new ManualResetEvent(false);
  105. mreDetailedHistory = new ManualResetEvent(false);
  106. ThreadPool.QueueUserWorkItem((s) =>
  107. {
  108. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "", false);
  109. string channel = "hello_my_channel";
  110. string message = messageForUnencryptPublish;
  111. PubnubUnitTest unitTest = new PubnubUnitTest();
  112. unitTest.TestClassName = "WhenAMessageIsPublished";
  113. unitTest.TestCaseName = "ThenUnencryptPublishShouldReturnSuccessCodeAndInfo";
  114. pubnub.PubnubUnitTest = unitTest;
  115. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessUnencryptPublishCodeCallback, DummyErrorCallback));
  116. mrePublish.WaitOne(310 * 1000);
  117. EnqueueCallback(() =>
  118. {
  119. if (!isUnencryptPublished)
  120. {
  121. Assert.IsTrue(isUnencryptPublished, "Unencrypt Publish Failed");
  122. }
  123. else
  124. {
  125. pubnub.DetailedHistory<string>(channel, -1, unEncryptPublishTimetoken, -1, false, CaptureUnencryptDetailedHistoryCallback, DummyErrorCallback);
  126. mreDetailedHistory.WaitOne(310 * 1000);
  127. Assert.IsTrue(isUnencryptDH, "Unable to match the successful unencrypt Publish");
  128. }
  129. });
  130. EnqueueTestComplete();
  131. });
  132. }
  133. [Asynchronous]
  134. public void ReturnSuccessUnencryptPublishCodeCallback(string result)
  135. {
  136. if (!string.IsNullOrWhiteSpace(result))
  137. {
  138. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  139. if (receivedObj is object[])
  140. {
  141. long statusCode = Int64.Parse(receivedObj[0].ToString());
  142. string statusMsg = (string)receivedObj[1];
  143. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  144. {
  145. isUnencryptPublished = true;
  146. unEncryptPublishTimetoken = Convert.ToInt64(receivedObj[2].ToString());
  147. }
  148. }
  149. }
  150. mrePublish.Set();
  151. }
  152. [Asynchronous]
  153. public void CaptureUnencryptDetailedHistoryCallback(string result)
  154. {
  155. if (!string.IsNullOrWhiteSpace(result))
  156. {
  157. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  158. if (receivedObj is object[])
  159. {
  160. JArray jObj = JArray.Parse(receivedObj[0].ToString());
  161. if (jObj[0].ToString() == messageForUnencryptPublish)
  162. {
  163. isUnencryptDH = true;
  164. }
  165. }
  166. }
  167. mreDetailedHistory.Set();
  168. }
  169. [TestMethod, Asynchronous]
  170. public void ThenUnencryptObjectPublishShouldReturnSuccessCodeAndInfo()
  171. {
  172. isUnencryptObjectPublished = false;
  173. mrePublish = new ManualResetEvent(false);
  174. mreDetailedHistory = new ManualResetEvent(false);
  175. ThreadPool.QueueUserWorkItem((s) =>
  176. {
  177. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "", false);
  178. string channel = "hello_my_channel";
  179. object message = new CustomClass();
  180. messageObjectForUnencryptPublish = JsonConvert.SerializeObject(message);
  181. PubnubUnitTest unitTest = new PubnubUnitTest();
  182. unitTest.TestClassName = "WhenAMessageIsPublished";
  183. unitTest.TestCaseName = "ThenUnencryptObjectPublishShouldReturnSuccessCodeAndInfo";
  184. pubnub.PubnubUnitTest = unitTest;
  185. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessUnencryptObjectPublishCodeCallback, DummyErrorCallback));
  186. mrePublish.WaitOne(310 * 1000);
  187. EnqueueCallback(() =>
  188. {
  189. if (!isUnencryptObjectPublished)
  190. {
  191. Assert.IsTrue(isUnencryptObjectPublished, "Unencrypt Publish Failed");
  192. }
  193. else
  194. {
  195. pubnub.DetailedHistory<string>(channel, -1, unEncryptObjectPublishTimetoken, -1, false, CaptureUnencryptObjectDetailedHistoryCallback, DummyErrorCallback);
  196. mreDetailedHistory.WaitOne(310 * 1000);
  197. Assert.IsTrue(isUnencryptObjectDH, "Unable to match the successful unencrypt object Publish");
  198. }
  199. });
  200. EnqueueTestComplete();
  201. });
  202. }
  203. [Asynchronous]
  204. public void ReturnSuccessUnencryptObjectPublishCodeCallback(string result)
  205. {
  206. if (!string.IsNullOrWhiteSpace(result))
  207. {
  208. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  209. if (receivedObj is object[])
  210. {
  211. long statusCode = Int64.Parse(receivedObj[0].ToString());
  212. string statusMsg = (string)receivedObj[1];
  213. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  214. {
  215. isUnencryptObjectPublished = true;
  216. unEncryptObjectPublishTimetoken = Convert.ToInt64(receivedObj[2].ToString());
  217. }
  218. }
  219. }
  220. mrePublish.Set();
  221. }
  222. [Asynchronous]
  223. public void CaptureUnencryptObjectDetailedHistoryCallback(string result)
  224. {
  225. if (!string.IsNullOrWhiteSpace(result))
  226. {
  227. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  228. if (receivedObj is object[])
  229. {
  230. JArray jArr = JArray.Parse(receivedObj[0].ToString());
  231. if (jArr[0].ToString(Formatting.None) == messageObjectForUnencryptPublish)
  232. {
  233. isUnencryptObjectDH = true;
  234. }
  235. }
  236. }
  237. mreDetailedHistory.Set();
  238. }
  239. [TestMethod, Asynchronous]
  240. public void ThenEncryptObjectPublishShouldReturnSuccessCodeAndInfo()
  241. {
  242. isEncryptObjectPublished = false;
  243. mrePublish = new ManualResetEvent(false);
  244. mreDetailedHistory = new ManualResetEvent(false);
  245. ThreadPool.QueueUserWorkItem((s) =>
  246. {
  247. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "enigma", false);
  248. string channel = "hello_my_channel";
  249. object message = new SecretCustomClass();
  250. messageObjectForEncryptPublish = JsonConvert.SerializeObject(message);
  251. PubnubUnitTest unitTest = new PubnubUnitTest();
  252. unitTest.TestClassName = "WhenAMessageIsPublished";
  253. unitTest.TestCaseName = "ThenEncryptObjectPublishShouldReturnSuccessCodeAndInfo";
  254. pubnub.PubnubUnitTest = unitTest;
  255. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessEncryptObjectPublishCodeCallback, DummyErrorCallback));
  256. mrePublish.WaitOne(310 * 1000);
  257. EnqueueCallback(() =>
  258. {
  259. if (!isEncryptObjectPublished)
  260. {
  261. Assert.IsTrue(isEncryptObjectPublished, "Encrypt Object Publish Failed");
  262. }
  263. else
  264. {
  265. pubnub.DetailedHistory<string>(channel, -1, encryptObjectPublishTimetoken, -1, false, CaptureEncryptObjectDetailedHistoryCallback, DummyErrorCallback);
  266. mreDetailedHistory.WaitOne(310 * 1000);
  267. Assert.IsTrue(isEncryptObjectDH, "Unable to match the successful encrypt object Publish");
  268. }
  269. });
  270. EnqueueTestComplete();
  271. });
  272. }
  273. [Asynchronous]
  274. public void ReturnSuccessEncryptObjectPublishCodeCallback(string result)
  275. {
  276. if (!string.IsNullOrWhiteSpace(result))
  277. {
  278. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  279. if (receivedObj is object[])
  280. {
  281. long statusCode = Int64.Parse(receivedObj[0].ToString());
  282. string statusMsg = (string)receivedObj[1];
  283. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  284. {
  285. isEncryptObjectPublished = true;
  286. encryptObjectPublishTimetoken = Convert.ToInt64(receivedObj[2].ToString());
  287. }
  288. }
  289. }
  290. mrePublish.Set();
  291. }
  292. [Asynchronous]
  293. public void CaptureEncryptObjectDetailedHistoryCallback(string result)
  294. {
  295. if (!string.IsNullOrWhiteSpace(result))
  296. {
  297. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  298. if (receivedObj is object[])
  299. {
  300. JArray jArr = JArray.Parse(receivedObj[0].ToString());
  301. if (jArr[0].ToString(Formatting.None) == messageObjectForEncryptPublish)
  302. {
  303. isEncryptObjectDH = true;
  304. }
  305. }
  306. }
  307. mreDetailedHistory.Set();
  308. }
  309. [TestMethod, Asynchronous]
  310. public void ThenEncryptPublishShouldReturnSuccessCodeAndInfo()
  311. {
  312. isEncryptPublished = false;
  313. mrePublish = new ManualResetEvent(false);
  314. mreDetailedHistory = new ManualResetEvent(false);
  315. ThreadPool.QueueUserWorkItem((s) =>
  316. {
  317. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "enigma", false);
  318. string channel = "hello_my_channel";
  319. string message = messageForEncryptPublish;
  320. PubnubUnitTest unitTest = new PubnubUnitTest();
  321. unitTest.TestClassName = "WhenAMessageIsPublished";
  322. unitTest.TestCaseName = "ThenEncryptPublishShouldReturnSuccessCodeAndInfo";
  323. pubnub.PubnubUnitTest = unitTest;
  324. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessEncryptPublishCodeCallback, DummyErrorCallback));
  325. mrePublish.WaitOne(310 * 1000);
  326. EnqueueCallback(() =>
  327. {
  328. if (!isEncryptPublished)
  329. {
  330. Assert.IsTrue(isEncryptPublished, "Encrypt Publish Failed");
  331. }
  332. else
  333. {
  334. pubnub.DetailedHistory<string>(channel, -1, encryptPublishTimetoken, -1, false, CaptureEncryptDetailedHistoryCallback, DummyErrorCallback);
  335. mreDetailedHistory.WaitOne(310 * 1000);
  336. Assert.IsTrue(isEncryptDH, "Unable to decrypt the successful Publish");
  337. }
  338. });
  339. EnqueueTestComplete();
  340. });
  341. }
  342. [Asynchronous]
  343. public void ReturnSuccessEncryptPublishCodeCallback(string result)
  344. {
  345. if (!string.IsNullOrWhiteSpace(result))
  346. {
  347. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  348. if (receivedObj is object[])
  349. {
  350. long statusCode = Int64.Parse(receivedObj[0].ToString());
  351. string statusMsg = (string)receivedObj[1];
  352. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  353. {
  354. isEncryptPublished = true;
  355. encryptPublishTimetoken = Convert.ToInt64(receivedObj[2].ToString());
  356. }
  357. }
  358. }
  359. mrePublish.Set();
  360. }
  361. [Asynchronous]
  362. public void CaptureEncryptDetailedHistoryCallback(string result)
  363. {
  364. if (!string.IsNullOrWhiteSpace(result))
  365. {
  366. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  367. if (receivedObj is object[])
  368. {
  369. JArray jArr = JArray.Parse(receivedObj[0].ToString());
  370. if (jArr[0].ToString() == messageForEncryptPublish)
  371. {
  372. isEncryptDH = true;
  373. }
  374. }
  375. }
  376. mreDetailedHistory.Set();
  377. }
  378. [TestMethod, Asynchronous]
  379. public void ThenSecretKeyWithEncryptPublishShouldReturnSuccessCodeAndInfo()
  380. {
  381. isSecretEncryptPublished = false;
  382. mrePublish = new ManualResetEvent(false);
  383. mreDetailedHistory = new ManualResetEvent(false);
  384. ThreadPool.QueueUserWorkItem((s) =>
  385. {
  386. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "key", "enigma", false);
  387. string channel = "hello_my_channel";
  388. string message = messageForSecretEncryptPublish;
  389. PubnubUnitTest unitTest = new PubnubUnitTest();
  390. unitTest.TestClassName = "WhenAMessageIsPublished";
  391. unitTest.TestCaseName = "ThenSecretKeyWithEncryptPublishShouldReturnSuccessCodeAndInfo";
  392. pubnub.PubnubUnitTest = unitTest;
  393. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessSecretEncryptPublishCodeCallback, DummyErrorCallback));
  394. mrePublish.WaitOne(310 * 1000);
  395. EnqueueCallback(() =>
  396. {
  397. if (!isSecretEncryptPublished)
  398. {
  399. Assert.IsTrue(isSecretEncryptPublished, "Secret Encrypt Publish Failed");
  400. }
  401. else
  402. {
  403. pubnub.DetailedHistory<string>(channel, -1, secretEncryptPublishTimetoken, -1, false, CaptureSecretEncryptDetailedHistoryCallback, DummyErrorCallback);
  404. mreDetailedHistory.WaitOne(310 * 1000);
  405. Assert.IsTrue(isSecretEncryptDH, "Unable to decrypt the successful Secret key Publish");
  406. }
  407. });
  408. EnqueueTestComplete();
  409. });
  410. }
  411. [Asynchronous]
  412. public void ReturnSuccessSecretEncryptPublishCodeCallback(string result)
  413. {
  414. if (!string.IsNullOrWhiteSpace(result))
  415. {
  416. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  417. if (receivedObj is object[])
  418. {
  419. long statusCode = Int64.Parse(receivedObj[0].ToString());
  420. string statusMsg = (string)receivedObj[1];
  421. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  422. {
  423. isSecretEncryptPublished = true;
  424. secretEncryptPublishTimetoken = Convert.ToInt64(receivedObj[2].ToString());
  425. }
  426. }
  427. }
  428. mrePublish.Set();
  429. }
  430. [Asynchronous]
  431. private void CaptureSecretEncryptDetailedHistoryCallback(string result)
  432. {
  433. if (!string.IsNullOrWhiteSpace(result))
  434. {
  435. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  436. if (receivedObj is object[])
  437. {
  438. JArray jArr = JArray.Parse(receivedObj[0].ToString());
  439. if (jArr[0].ToString() == messageForSecretEncryptPublish)
  440. {
  441. isSecretEncryptDH = true;
  442. }
  443. }
  444. }
  445. mreDetailedHistory.Set();
  446. }
  447. [TestMethod]
  448. public void ThenPubnubShouldGenerateUniqueIdentifier()
  449. {
  450. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "", false);
  451. Assert.IsNotNull(pubnub.GenerateGuid());
  452. }
  453. [TestMethod]
  454. [ExpectedException(typeof(MissingFieldException))]
  455. public void ThenPublishKeyShouldNotBeEmpty()
  456. {
  457. Pubnub pubnub = new Pubnub("", PubnubCommon.SubscribeKey, "", "", false);
  458. string channel = "hello_my_channel";
  459. string message = "Pubnub API Usage Example";
  460. pubnub.Publish<string>(channel, message, null, DummyErrorCallback);
  461. }
  462. [TestMethod, Asynchronous]
  463. public void ThenOptionalSecretKeyShouldBeProvidedInConstructor()
  464. {
  465. isPublished2 = false;
  466. mrePublish = new ManualResetEvent(false);
  467. ThreadPool.QueueUserWorkItem((s) =>
  468. {
  469. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "key");
  470. string channel = "hello_my_channel";
  471. string message = "Pubnub API Usage Example";
  472. PubnubUnitTest unitTest = new PubnubUnitTest();
  473. unitTest.TestClassName = "WhenAMessageIsPublished";
  474. unitTest.TestCaseName = "ThenOptionalSecretKeyShouldBeProvidedInConstructor";
  475. pubnub.PubnubUnitTest = unitTest;
  476. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSecretKeyPublishCallback, DummyErrorCallback));
  477. mrePublish.WaitOne(310 * 1000);
  478. EnqueueCallback(() => Assert.IsTrue(isPublished2, "Publish Failed with secret key"));
  479. EnqueueTestComplete();
  480. });
  481. }
  482. [Asynchronous]
  483. public void ReturnSecretKeyPublishCallback(string result)
  484. {
  485. if (!string.IsNullOrWhiteSpace(result))
  486. {
  487. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  488. if (receivedObj is object[])
  489. {
  490. long statusCode = Int64.Parse(receivedObj[0].ToString());
  491. string statusMsg = (string)receivedObj[1];
  492. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  493. {
  494. isPublished2 = true;
  495. }
  496. }
  497. }
  498. mrePublish.Set();
  499. }
  500. [TestMethod, Asynchronous]
  501. public void IfSSLNotProvidedThenDefaultShouldBeFalse()
  502. {
  503. isPublished3 = false;
  504. mrePublish = new ManualResetEvent(false);
  505. ThreadPool.QueueUserWorkItem((s) =>
  506. {
  507. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "");
  508. string channel = "hello_my_channel";
  509. string message = "Pubnub API Usage Example";
  510. PubnubUnitTest unitTest = new PubnubUnitTest();
  511. unitTest.TestClassName = "WhenAMessageIsPublished";
  512. unitTest.TestCaseName = "IfSSLNotProvidedThenDefaultShouldBeFalse";
  513. pubnub.PubnubUnitTest = unitTest;
  514. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnNoSSLDefaultFalseCallback, DummyErrorCallback));
  515. mrePublish.WaitOne(310 * 1000);
  516. EnqueueCallback(() => Assert.IsTrue(isPublished3, "Publish Failed with no SSL"));
  517. EnqueueTestComplete();
  518. });
  519. }
  520. [Asynchronous]
  521. public void ReturnNoSSLDefaultFalseCallback(string result)
  522. {
  523. if (!string.IsNullOrWhiteSpace(result))
  524. {
  525. object[] receivedObj = JsonConvert.DeserializeObject<object[]>(result);
  526. if (receivedObj is object[])
  527. {
  528. long statusCode = Int64.Parse(receivedObj[0].ToString());
  529. string statusMsg = (string)receivedObj[1];
  530. if (statusCode == 1 && statusMsg.ToLower() == "sent")
  531. {
  532. isPublished3 = true;
  533. }
  534. }
  535. }
  536. mrePublish.Set();
  537. }
  538. [TestMethod, Asynchronous]
  539. public void ThenComplexMessageObjectShouldReturnSuccessCodeAndInfo()
  540. {
  541. isComplexObjectPublished = false;
  542. mrePublish = new ManualResetEvent(false);
  543. mreDetailedHistory = new ManualResetEvent(false);
  544. ThreadPool.QueueUserWorkItem((s) =>
  545. {
  546. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "", false);
  547. PubnubUnitTest unitTest = new PubnubUnitTest();
  548. unitTest.TestClassName = "WhenAMessageIsPublished";
  549. unitTest.TestCaseName = "ThenComplexMessageObjectShouldReturnSuccessCodeAndInfo";
  550. pubnub.PubnubUnitTest = unitTest;
  551. string channel = "hello_my_channel";
  552. object message = new PubnubDemoObject();
  553. messageComplexObjectForPublish = JsonConvert.SerializeObject(message);
  554. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessComplexObjectPublishCodeCallback, DummyErrorCallback));
  555. mrePublish.WaitOne(310 * 1000);
  556. EnqueueCallback(() =>
  557. {
  558. if (!isComplexObjectPublished)
  559. {
  560. Assert.IsTrue(isComplexObjectPublished, "Complex Object Publish Failed");
  561. }
  562. else
  563. {
  564. pubnub.DetailedHistory<string>(channel, -1, complexObjectPublishTimetoken, -1, false, CaptureComplexObjectDetailedHistoryCallback, DummyErrorCallback);
  565. mreDetailedHistory.WaitOne(310 * 1000);
  566. Assert.IsTrue(isComplexObjectDetailedHistory, "Unable to match the successful unencrypt object Publish");
  567. }
  568. });
  569. EnqueueTestComplete();
  570. });
  571. }
  572. [Asynchronous]
  573. private void ReturnSuccessComplexObjectPublishCodeCallback(string result)
  574. {
  575. if (!string.IsNullOrEmpty(result) && !string.IsNullOrEmpty(result.Trim()))
  576. {
  577. object[] deserializedMessage = JsonConvert.DeserializeObject<object[]>(result);
  578. if (deserializedMessage is object[])
  579. {
  580. long statusCode = Int64.Parse(deserializedMessage[0].ToString());
  581. string statusMessage = (string)deserializedMessage[1];
  582. if (statusCode == 1 && statusMessage.ToLower() == "sent")
  583. {
  584. isComplexObjectPublished = true;
  585. complexObjectPublishTimetoken = Convert.ToInt64(deserializedMessage[2].ToString());
  586. }
  587. }
  588. }
  589. mrePublish.Set();
  590. }
  591. [Asynchronous]
  592. private void CaptureComplexObjectDetailedHistoryCallback(string result)
  593. {
  594. if (!string.IsNullOrEmpty(result) && !string.IsNullOrEmpty(result.Trim()))
  595. {
  596. object[] deserializedMessage = JsonConvert.DeserializeObject<object[]>(result);
  597. if (deserializedMessage is object[])
  598. {
  599. JArray message = deserializedMessage[0] as JArray;
  600. if (message != null && message[0].ToString(Formatting.None) == messageComplexObjectForPublish)
  601. {
  602. isComplexObjectDetailedHistory = true;
  603. }
  604. }
  605. }
  606. mreDetailedHistory.Set();
  607. }
  608. [TestMethod, Asynchronous]
  609. public void ThenDisableJsonEncodeShouldSendSerializedObjectMessage()
  610. {
  611. isSerializedObjectMessagePublished = false;
  612. mrePublish = new ManualResetEvent(false);
  613. mreDetailedHistory = new ManualResetEvent(false);
  614. ThreadPool.QueueUserWorkItem((s) =>
  615. {
  616. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "", false);
  617. pubnub.EnableJsonEncodingForPublish = false;
  618. PubnubUnitTest unitTest = new PubnubUnitTest();
  619. unitTest.TestClassName = "WhenAMessageIsPublished";
  620. unitTest.TestCaseName = "ThenDisableJsonEncodeShouldSendSerializedObjectMessage";
  621. pubnub.PubnubUnitTest = unitTest;
  622. string channel = "hello_my_channel";
  623. object message = "{\"operation\":\"ReturnData\",\"channel\":\"Mobile1\",\"sequenceNumber\":0,\"data\":[\"ping 1.0.0.1\"]}";
  624. serializedObjectMessageForPublish = message.ToString();
  625. EnqueueCallback(() => pubnub.Publish<string>(channel, message, ReturnSuccessSerializedObjectMessageForPublishCallback, DummyErrorCallback));
  626. mrePublish.WaitOne(310 * 1000);
  627. EnqueueCallback(() =>
  628. {
  629. if (!isSerializedObjectMessagePublished)
  630. {
  631. EnqueueCallback(() => Assert.IsTrue(isSerializedObjectMessagePublished, "Serialized Object Message Publish Failed"));
  632. }
  633. else
  634. {
  635. pubnub.DetailedHistory<string>(channel, -1, serializedMessagePublishTimetoken, -1, false, CaptureSerializedMessagePublishDetailedHistoryCallback, DummyErrorCallback);
  636. mreDetailedHistory.WaitOne(310 * 1000);
  637. Assert.IsTrue(isSerializedObjectMessageDetailedHistory, "Unable to match the successful serialized object message Publish");
  638. }
  639. });
  640. EnqueueTestComplete();
  641. });
  642. }
  643. [Asynchronous]
  644. private void ReturnSuccessSerializedObjectMessageForPublishCallback(string result)
  645. {
  646. if (!string.IsNullOrEmpty(result) && !string.IsNullOrEmpty(result.Trim()))
  647. {
  648. object[] deserializedResult = JsonConvert.DeserializeObject<object[]>(result);
  649. if (deserializedResult is object[])
  650. {
  651. long statusCode = Int64.Parse(deserializedResult[0].ToString());
  652. string statusMessage = (string)deserializedResult[1];
  653. if (statusCode == 1 && statusMessage.ToLower() == "sent")
  654. {
  655. isSerializedObjectMessagePublished = true;
  656. serializedMessagePublishTimetoken = Convert.ToInt64(deserializedResult[2].ToString());
  657. }
  658. }
  659. }
  660. mrePublish.Set();
  661. }
  662. [Asynchronous]
  663. private void CaptureSerializedMessagePublishDetailedHistoryCallback(string result)
  664. {
  665. if (!string.IsNullOrEmpty(result) && !string.IsNullOrEmpty(result.Trim()))
  666. {
  667. object[] deserializedMessage = JsonConvert.DeserializeObject<object[]>(result);
  668. if (deserializedMessage is object[])
  669. {
  670. JArray message = deserializedMessage[0] as JArray;
  671. if (message != null && message[0].ToString(Formatting.None) == serializedObjectMessageForPublish)
  672. {
  673. isSerializedObjectMessageDetailedHistory = true;
  674. }
  675. }
  676. }
  677. mreDetailedHistory.Set();
  678. }
  679. [TestMethod, Asynchronous]
  680. public void ThenLargeMessageShoudFailWithMessageTooLargeInfo()
  681. {
  682. isLargeMessagePublished = false;
  683. mrePublish = new ManualResetEvent(false);
  684. ThreadPool.QueueUserWorkItem((s) =>
  685. {
  686. Pubnub pubnub = new Pubnub(PubnubCommon.PublishKey, PubnubCommon.SubscribeKey, "", "", true);
  687. PubnubUnitTest unitTest = new PubnubUnitTest();
  688. unitTest.TestClassName = "WhenAMessageIsPublished";
  689. unitTest.TestCaseName = "ThenLargeMessageShoudFailWithMessageTooLargeInfo";
  690. pubnub.PubnubUnitTest = unitTest;
  691. string channel = "hello_my_channel";
  692. string message = messageLarge2K.Substring(0, 1320);
  693. EnqueueCallback(() => pubnub.Publish<string>(channel, message, DummyPublishMessageTooLargeInfoCallback, PublishMessageTooLargeErrorCallback));
  694. mrePublish.WaitOne(310 * 100);
  695. EnqueueCallback(() => Assert.IsTrue(isLargeMessagePublished, "Message Too Large is not failing as expected."));
  696. EnqueueTestComplete();
  697. });
  698. }
  699. [Asynchronous]
  700. private void DummyPublishMessageTooLargeInfoCallback(string result)
  701. {
  702. }
  703. [Asynchronous]
  704. private void PublishMessageTooLargeErrorCallback(PubnubClientError result)
  705. {
  706. if (result != null && result.StatusCode > 0)
  707. {
  708. string message = result.Message;
  709. object[] deserializedMessage = JsonConvert.DeserializeObject<object[]>(message);
  710. if (deserializedMessage is object[])
  711. {
  712. long statusCode = Int64.Parse(deserializedMessage[0].ToString());
  713. string statusMessage = (string)deserializedMessage[1];
  714. if (statusCode == 0 && statusMessage.ToLower() == "message too large")
  715. {
  716. isLargeMessagePublished = true;
  717. }
  718. }
  719. }
  720. mrePublish.Set();
  721. }
  722. [Asynchronous]
  723. private void DummyErrorCallback(PubnubClientError result)
  724. {
  725. }
  726. }
  727. }