PageRenderTime 31ms CodeModel.GetById 1ms RepoModel.GetById 1ms app.codeStats 0ms

/source/samples/ObviousCode.Interlace.BitTunnel/TestBitTunnel/FileModificationMessageTests.cs

https://bitbucket.org/VahidN/interlace
C# | 633 lines | 458 code | 163 blank | 12 comment | 45 complexity | 5590fdcae7cda4d2f37ef7d2b877ced8 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using MbUnit.Framework;
  6. using ObviousCode.Interlace.BitTunnelLibrary;
  7. using System.Net;
  8. using ObviousCode.Interlace.BitTunnel.Connectivity;
  9. using ObviousCode.Interlace.BitTunnelLibrary.File;
  10. using System.Threading;
  11. using ObviousCode.Interlace.BitTunnelLibrary.Interfaces;
  12. using ObviousCode.Interlace.BitTunnelLibrary.Messages;
  13. using ObviousCode.Interlace.BitTunnelLibrary.Events;
  14. using System.IO;
  15. using System.Security.Cryptography;
  16. using ObviousCode.Interlace.BitTunnelLibrary.Messages.MessageInstances;
  17. namespace TestBitTunnel
  18. {
  19. [TestFixture]
  20. public class FileModificationMessageTests
  21. {
  22. IMessage _serverMessage;
  23. IMessage _clientMessage;
  24. AppSettings _settings = new AppSettings();
  25. FileInfo _existingFile1;
  26. FileInfo _existingFile2;
  27. FileInfo _existingFile3;
  28. FileModificationMessage _serverModificationMessage;
  29. [SetUp]
  30. public void TestSetup()
  31. {
  32. _serverModificationMessage = null;
  33. _serverMessage = null;
  34. }
  35. [TestFixtureSetUp]
  36. public void SetUp()
  37. {
  38. _settings.Port = 1234;
  39. _settings.ServerAddress = IPAddress.Parse("127.0.0.1");
  40. _settings.ClientConnectionTimeout = 1000;
  41. _existingFile1 = CreateNewFile();
  42. _existingFile2 = CreateNewFile();
  43. _existingFile3 = CreateNewFile();
  44. }
  45. [TestFixtureTearDown]
  46. public void TearDown()
  47. {
  48. _existingFile1.Delete();
  49. _existingFile2.Delete();
  50. _existingFile3.Delete();
  51. }
  52. internal FileInfo CreateNewFile()
  53. {
  54. FileInfo file;
  55. do
  56. {
  57. file = new FileInfo(string.Format(@"C:\{0}.test", Guid.NewGuid().ToString().Replace("-", "")));
  58. }
  59. while (file.Exists); //highly unlikely
  60. using(StreamWriter writer = file.CreateText())
  61. {
  62. for (int i = 0; i < 10; i++)
  63. {
  64. writer.WriteLine(DateTime.Now.Ticks.ToString());
  65. Thread.Sleep(10);
  66. }
  67. }
  68. return new FileInfo(file.FullName);
  69. }
  70. #region Test FileName Modification Comms
  71. [Test]
  72. public void WhenFileModificationMessages_ModeNew_AreSentByClient_TheyShouldBeFullyReceivedByServer()
  73. {
  74. _serverMessage = null;
  75. FileDescriptor[] descriptors = null;
  76. string originId = "Not Set";
  77. using (ServerInstance server = new ServerInstance(_settings))
  78. {
  79. server.MessageReceived += new EventHandler<ObviousCode.Interlace.BitTunnelLibrary.Events.MessageEventArgs>(server_MessageReceived);
  80. server.Connect();
  81. while (!server.IsConnected) ;
  82. using (ClientInstance client = new ClientInstance(_settings))
  83. {
  84. client.Connect();
  85. originId = client.ConnectionDetails.InstanceId;
  86. descriptors = new List<FileDescriptor>()
  87. {
  88. FileDescriptor.Create(_existingFile1, true),
  89. FileDescriptor.Create(_existingFile2, true),
  90. FileDescriptor.Create(_existingFile3, true)
  91. }.ToArray();
  92. _serverModificationMessage = null;
  93. client.AddFiles(descriptors);
  94. DateTime then = DateTime.Now;
  95. while (_serverModificationMessage == null && (DateTime.Now - then).TotalSeconds < 1) ;
  96. Assert.IsNotNull(_serverModificationMessage);
  97. Assert.AreEqual(descriptors[0].FileFullName, _serverModificationMessage.Modifications[0].FileFullName);
  98. Assert.AreEqual(descriptors[1].FileFullName, _serverModificationMessage.Modifications[1].FileFullName);
  99. Assert.AreEqual(descriptors[2].FileFullName, _serverModificationMessage.Modifications[2].FileFullName);
  100. //Assert.AreEqual(descriptors[0].FileId, _serverModificationMessage.Modifications[0].FileId);
  101. //Assert.AreEqual(descriptors[1].FileId, _serverModificationMessage.Modifications[1].FileId);
  102. //Assert.AreEqual(descriptors[2].FileId, _serverModificationMessage.Modifications[2].FileId);
  103. Assert.AreEqual(originId, _serverModificationMessage.Modifications[0].OriginId);
  104. Assert.AreEqual(originId, _serverModificationMessage.Modifications[1].OriginId);
  105. Assert.AreEqual(originId, _serverModificationMessage.Modifications[2].OriginId);
  106. Assert.AreEqual(FileModificationMode.New, _serverModificationMessage.Modifications[0].Mode);
  107. Assert.AreEqual(FileModificationMode.New, _serverModificationMessage.Modifications[1].Mode);
  108. Assert.AreEqual(FileModificationMode.New, _serverModificationMessage.Modifications[2].Mode);
  109. }
  110. }
  111. }
  112. [Test]
  113. public void WhenFileModificationMessages_ModeRemoved_AreSentByClient_TheyShouldBeFullyReceivedByServer()
  114. {
  115. _serverMessage = null;
  116. FileDescriptor[] descriptors = null;
  117. string originId = "Not Set";
  118. using (ServerInstance server = new ServerInstance(_settings))
  119. {
  120. server.MessageReceived += new EventHandler<ObviousCode.Interlace.BitTunnelLibrary.Events.MessageEventArgs>(server_MessageReceived);
  121. server.Connect();
  122. while (!server.IsConnected) ;
  123. using (ClientInstance client = new ClientInstance(_settings))
  124. {
  125. client.Connect();
  126. originId = client.ConnectionDetails.InstanceId;
  127. descriptors = new List<FileDescriptor>()
  128. {
  129. FileDescriptor.Create(_existingFile1, true),
  130. FileDescriptor.Create(_existingFile2, true),
  131. FileDescriptor.Create(_existingFile3, true)
  132. }.ToArray();
  133. _serverModificationMessage = null;
  134. client.RemoveFiles(descriptors);
  135. DateTime then = DateTime.Now;
  136. while (_serverModificationMessage == null && (DateTime.Now - then).TotalSeconds < 1) ;
  137. Assert.IsNotNull(_serverModificationMessage);
  138. Assert.AreEqual(descriptors[0].FileFullName, _serverModificationMessage.Modifications[0].FileFullName);
  139. Assert.AreEqual(descriptors[1].FileFullName, _serverModificationMessage.Modifications[1].FileFullName);
  140. Assert.AreEqual(descriptors[2].FileFullName, _serverModificationMessage.Modifications[2].FileFullName);
  141. //Assert.AreEqual(descriptors[0].FileId, _serverModificationMessage.Modifications[0].FileId);
  142. //Assert.AreEqual(descriptors[1].FileId, _serverModificationMessage.Modifications[1].FileId);
  143. //Assert.AreEqual(descriptors[2].FileId, _serverModificationMessage.Modifications[2].FileId);
  144. Assert.AreEqual(originId, _serverModificationMessage.Modifications[0].OriginId);
  145. Assert.AreEqual(originId, _serverModificationMessage.Modifications[1].OriginId);
  146. Assert.AreEqual(originId, _serverModificationMessage.Modifications[2].OriginId);
  147. Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[0].Mode);
  148. Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[1].Mode);
  149. Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[2].Mode);
  150. }
  151. }
  152. }
  153. #endregion
  154. #region Test FileName Hashing
  155. #region Not Exists
  156. [Test]
  157. public void WhenFileDescriptorIsCreatedForNonExistingFile_FileHashShouldBeNull()
  158. {
  159. FileDescriptor descriptor = FileDescriptor.Create(@"C:\NothingToSeeHere.txt", true);
  160. Assert.IsNull(descriptor.Hash);
  161. }
  162. [Test]
  163. public void WhenFileDescriptorIsCreatedForNonExistingFile_ExistsPropertyShouldBeFalse()
  164. {
  165. FileDescriptor descriptor = FileDescriptor.Create(@"C:\NothingToSeeHere.txt", true);
  166. Assert.IsFalse(descriptor.Exists);
  167. }
  168. [Test]
  169. public void WhenFileModificationDescriptorIsCreatedForNonExistingFile_FileHashShouldBeNull()
  170. {
  171. FileDescriptor descriptor = FileDescriptor.Create(@"C:\NothingToSeeHere.txt", true);
  172. FileModificationDescriptor modification = new FileModificationDescriptor(descriptor, FileModificationMode.Remove);
  173. Assert.IsNull(modification.Hash);
  174. }
  175. [Test]
  176. public void WhenFileModificationDescriptorIsCreatedForNonExistingFile_HashGenerated_ExistsPropertyShouldBeFalse()
  177. {
  178. FileDescriptor descriptor = FileDescriptor.Create(@"C:\NothingToSeeHere.txt", true);
  179. FileModificationDescriptor modification = new FileModificationDescriptor(descriptor, FileModificationMode.New);
  180. Assert.IsNull(descriptor.Hash);
  181. }
  182. [Test]
  183. public void WhenFileModificationDescriptorIsCreatedForNonExistingFile_NoHashGenerated_ExistsPropertyShouldBeFalse()
  184. {
  185. FileDescriptor descriptor = FileDescriptor.Create(@"C:\NothingToSeeHere.txt", false);
  186. FileModificationDescriptor modification = new FileModificationDescriptor(descriptor, FileModificationMode.New);
  187. Assert.IsNull(descriptor.Hash);
  188. }
  189. #endregion
  190. #region Exists
  191. [Test]
  192. public void WhenFileDescriptorIsCreatedForExistingFile_HashGenerated_FileHashShouldNotBeNull()
  193. {
  194. FileDescriptor descriptor = FileDescriptor.Create(_existingFile1.FullName, true);
  195. Assert.IsNotNull(descriptor.Hash);
  196. }
  197. [Test]
  198. public void WhenFileDescriptorIsCreatedForExistingFile_NoHashGenerated_FileHashShouldBeNull()
  199. {
  200. FileDescriptor descriptor = FileDescriptor.Create(_existingFile1.FullName, false);
  201. Assert.IsNull(descriptor.Hash);
  202. }
  203. [Test]
  204. public void WhenFileDescriptorIsCreatedForExistingFile_HashGeneratedSeparately_HashShouldNotBeNull()
  205. {
  206. FileDescriptor descriptor = FileDescriptor.Create(_existingFile1.FullName, false);
  207. descriptor.GenerateHash();
  208. Assert.IsNotNull(descriptor.Hash);
  209. }
  210. [Test]
  211. public void WhenFileDescriptorIsCreatedForExistingFile_HashGenerated_ExistsPropertyShouldBeTrue()
  212. {
  213. FileDescriptor descriptor = FileDescriptor.Create(_existingFile1.FullName, true);
  214. Assert.IsTrue(descriptor.Exists);
  215. }
  216. [Test]
  217. public void WhenFileDescriptorIsCreatedForExistingFile_HashNotGenerated_ExistsPropertyShouldBeTrue()
  218. {
  219. FileDescriptor descriptor = FileDescriptor.Create(_existingFile1.FullName, true);
  220. Assert.IsTrue(descriptor.Exists);
  221. }
  222. [Test]
  223. public void WhenFileModificationDescriptorIsCreatedForExistingFile_FileDescriptorParameterWithHash_FileHashShouldNotBeNull()
  224. {
  225. FileDescriptor descriptor = FileDescriptor.Create(_existingFile3.FullName, true);
  226. FileModificationDescriptor modification = new FileModificationDescriptor(descriptor, FileModificationMode.New);
  227. Assert.IsNotNull(descriptor.Hash);
  228. }
  229. [Test]
  230. public void WhenFileModificationDescriptorIsCreatedForExistingFile_FileDescriptorParameterWithoutHash_FileHashShouldBeNull()
  231. {
  232. FileDescriptor descriptor = FileDescriptor.Create(_existingFile3.FullName, false);
  233. FileModificationDescriptor modification = new FileModificationDescriptor(descriptor, FileModificationMode.New);
  234. Assert.IsNull(descriptor.Hash);
  235. }
  236. [Test]
  237. public void WhenFileModificationDescriptorIsCreatedForExistingFile_FileDescriptorParameter_ExistsPropertyShouldNotBeFalse()
  238. {
  239. FileDescriptor descriptor = FileDescriptor.Create(_existingFile1.FullName, true);
  240. FileModificationDescriptor modification = new FileModificationDescriptor(descriptor, FileModificationMode.New);
  241. Assert.IsNotNull(descriptor.Hash);
  242. }
  243. //[Test]
  244. public void Test()
  245. {
  246. string file = @"C:\users\john\Downloads\FATHER_TED.ISO";
  247. int i=0;
  248. while (i < 1)
  249. {
  250. DateTime before = DateTime.Now;
  251. CreateMD5Hash(file);
  252. TimeSpan afterMD5 = DateTime.Now - before;
  253. before = DateTime.Now;
  254. CreateSHA1Hash(file);
  255. TimeSpan afterSHA1 = DateTime.Now - before;
  256. before = DateTime.Now;
  257. CreateSHA256Hash(file);
  258. TimeSpan afterSHA256 = DateTime.Now - before;
  259. Console.WriteLine("{0}----------", i);
  260. Console.WriteLine("MD5 = {0}", afterMD5.ToString());
  261. Console.WriteLine("SHA1 = {0}", afterSHA1.ToString());
  262. Console.WriteLine("SHA256 = {0}", afterSHA256.ToString());
  263. }
  264. }
  265. private static string CreateMD5Hash(string fileName)
  266. {
  267. FileInfo file = new FileInfo(fileName);
  268. if (file.Exists)
  269. {
  270. using (FileStream stream = file.OpenRead())
  271. {
  272. using (MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider())
  273. {
  274. return BitConverter.ToString(
  275. hasher.ComputeHash(stream)
  276. );
  277. }
  278. }
  279. }
  280. return null;
  281. }
  282. private static string CreateSHA1Hash(string fileName)
  283. {
  284. FileInfo file = new FileInfo(fileName);
  285. if (file.Exists)
  286. {
  287. using (FileStream stream = file.OpenRead())
  288. {
  289. using (SHA1CryptoServiceProvider hasher = new SHA1CryptoServiceProvider())
  290. {
  291. return BitConverter.ToString(
  292. hasher.ComputeHash(stream)
  293. );
  294. }
  295. }
  296. }
  297. return null;
  298. }
  299. private static string CreateSHA256Hash(string fileName)
  300. {
  301. FileInfo file = new FileInfo(fileName);
  302. if (file.Exists)
  303. {
  304. using (FileStream stream = file.OpenRead())
  305. {
  306. using (SHA256CryptoServiceProvider hasher = new SHA256CryptoServiceProvider())
  307. {
  308. return BitConverter.ToString(
  309. hasher.ComputeHash(stream)
  310. );
  311. }
  312. }
  313. }
  314. return null;
  315. }
  316. #endregion
  317. #endregion
  318. #region Test File Descriptor
  319. [Test]
  320. public void TestHashSpeed()
  321. {
  322. }
  323. [Test]
  324. public void WhenFileDescriptorCreatedWithFilePath_FileSimpleNameIsSetProperly()
  325. {
  326. FileDescriptor descriptor = FileDescriptor.Create(@"C:\DirectoryLevel1\DirectoryLevel2\MyFile.ext", true);
  327. Assert.AreEqual("MyFile.ext", descriptor.FileName);
  328. }
  329. #endregion
  330. [Test]
  331. public void WhenFirstClientConnectsToServer_ClientReceivesEmptyFileListMessage()
  332. {
  333. using (ServerInstance server = new ServerInstance(_settings))
  334. {
  335. server.Connect();
  336. using (ClientInstance client = new ClientInstance(_settings, "Test Client"))
  337. {
  338. client.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
  339. client.Connect();
  340. DateTime start = DateTime.Now;
  341. while ((_clientMessage == null || _clientMessage.Key != MessageKeys.FileList) && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  342. Assert.IsNotNull(_clientMessage);
  343. Assert.AreEqual(MessageKeys.FileList, _clientMessage.Key);
  344. Assert.AreEqual(0, (_clientMessage as FileListMessage).FileList.Count);
  345. }
  346. }
  347. }
  348. [Test]
  349. public void WhenFirstClientConnectsToServer_SendsNew_NonExisting_Files_SecondClientConnects_SecondClientShouldReceiveEmptytFileListMessage()
  350. {
  351. using (ServerInstance server = new ServerInstance(_settings))
  352. {
  353. server.Connect();
  354. using (ClientInstance client = new ClientInstance(_settings, "Test Client 1"))
  355. {
  356. client.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
  357. client.Connect();
  358. DateTime start = DateTime.Now;
  359. while ((_clientMessage == null || _clientMessage.Key != MessageKeys.FileList) && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  360. Assert.IsNotNull(_clientMessage);
  361. Assert.AreEqual(MessageKeys.FileList, _clientMessage.Key);
  362. Assert.AreEqual(0, (_clientMessage as FileListMessage).FileList.Count);
  363. _clientMessage = null;
  364. using (ClientInstance client2 = new ClientInstance(_settings, "Test Client 2"))
  365. {
  366. client2.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
  367. client2.Connect();
  368. FileDescriptor[] descriptors = new List<FileDescriptor>()
  369. {
  370. FileDescriptor.Create(@"C:\DoesNotExist.txt", true),
  371. FileDescriptor.Create(@"C:\CompletelyFake.txt", true),
  372. FileDescriptor.Create(@"C:\PureHumbug.txt", true)
  373. }.ToArray();
  374. client.AddFiles(descriptors);
  375. start = DateTime.Now;
  376. while ((_clientMessage == null || _clientMessage.Key != MessageKeys.FileListModifications) && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  377. Assert.IsNotNull(_clientMessage as FileModificationMessage);
  378. Assert.AreEqual(MessageKeys.FileListModifications, _clientMessage.Key);
  379. Assert.AreEqual(0, (_clientMessage as FileModificationMessage).Modifications.Count);
  380. _clientMessage = null;
  381. client2.MessageReceived -= new EventHandler<MessageEventArgs>(client_MessageReceived);
  382. client.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
  383. descriptors = new List<FileDescriptor>()
  384. {
  385. FileDescriptor.Create(@"C:\DoesNotExist.txt", true),
  386. FileDescriptor.Create(@"C:\CompletelyFake.txt", true),
  387. FileDescriptor.Create(@"C:\PureHumbug.txt", true)
  388. }.ToArray();
  389. client.AddFiles(descriptors);
  390. start = DateTime.Now;
  391. while ((_clientMessage == null || _clientMessage.Key != MessageKeys.FileListModifications) && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  392. Assert.IsNotNull(_clientMessage as FileModificationMessage);
  393. Assert.AreEqual(MessageKeys.FileListModifications, _clientMessage.Key);
  394. Assert.AreEqual(0, (_clientMessage as FileModificationMessage).Modifications.Count);
  395. }
  396. }
  397. }
  398. }
  399. [Test]
  400. public void WhenFirstClientConnectsToServer_SendsNew_Existing_Files_SecondClientConnects_SecondClientShouldReceiveCorrectFileListMessage()
  401. {
  402. using (ServerInstance server = new ServerInstance(_settings))
  403. {
  404. server.Connect();
  405. using (ClientInstance client = new ClientInstance(_settings, "Test Client 1"))
  406. {
  407. _clientMessage = null;
  408. client.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
  409. client.Connect();
  410. DateTime start = DateTime.Now;
  411. while ((_clientMessage == null || _clientMessage.Key != MessageKeys.FileList) && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  412. Assert.IsNotNull(_clientMessage);
  413. Assert.AreEqual(MessageKeys.FileList, _clientMessage.Key);
  414. Assert.AreEqual(0, (_clientMessage as FileListMessage).FileList.Count);
  415. client.MessageReceived -= new EventHandler<MessageEventArgs>(client_MessageReceived);
  416. _clientMessage = null;
  417. using (ClientInstance client2 = new ClientInstance(_settings, "Test Client 2"))
  418. {
  419. client.MessageReceived += new EventHandler<MessageEventArgs>(client_MessageReceived);
  420. client2.Connect();
  421. FileDescriptor[] descriptors = new List<FileDescriptor>()
  422. {
  423. FileDescriptor.Create(_existingFile1.FullName, true),
  424. FileDescriptor.Create(_existingFile2.FullName, true),
  425. FileDescriptor.Create(_existingFile3.FullName, true)
  426. }.ToArray();
  427. client2.AddFiles(descriptors);
  428. start = DateTime.Now;
  429. //Wait a second for the network activity
  430. while ((_clientMessage == null || _clientMessage.Key != MessageKeys.FileListModifications) && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  431. Assert.IsNotNull(_clientMessage as FileModificationMessage);
  432. Assert.AreEqual(MessageKeys.FileListModifications, _clientMessage.Key);
  433. Assert.AreEqual(3, (_clientMessage as FileModificationMessage).Modifications.Count);
  434. //Side effect of both being on same server?
  435. Assert.IsTrue((_clientMessage as FileModificationMessage).Modifications[0].Exists);
  436. Assert.IsTrue((_clientMessage as FileModificationMessage).Modifications[1].Exists);
  437. Assert.IsTrue((_clientMessage as FileModificationMessage).Modifications[2].Exists);
  438. Assert.AreEqual(_existingFile1.FullName, (_clientMessage as FileModificationMessage).Modifications[0].FileFullName);
  439. Assert.AreEqual(_existingFile2.FullName, (_clientMessage as FileModificationMessage).Modifications[1].FileFullName);
  440. Assert.AreEqual(_existingFile3.FullName, (_clientMessage as FileModificationMessage).Modifications[2].FileFullName);
  441. //Assert.AreEqual(descriptors[0].FileId, (_clientMessage as FileModificationMessage).Modifications[0].FileId);
  442. //Assert.AreEqual(descriptors[1].FileId, (_clientMessage as FileModificationMessage).Modifications[1].FileId);
  443. //Assert.AreEqual(descriptors[2].FileId, (_clientMessage as FileModificationMessage).Modifications[2].FileId);
  444. Assert.AreEqual(descriptors[0].Hash, (_clientMessage as FileModificationMessage).Modifications[0].Hash);
  445. Assert.AreEqual(descriptors[1].Hash, (_clientMessage as FileModificationMessage).Modifications[1].Hash);
  446. Assert.AreEqual(descriptors[2].Hash, (_clientMessage as FileModificationMessage).Modifications[2].Hash);
  447. Assert.AreEqual(FileModificationMode.New, (_clientMessage as FileModificationMessage).Modifications[0].Mode);
  448. Assert.AreEqual(FileModificationMode.New, (_clientMessage as FileModificationMessage).Modifications[1].Mode);
  449. Assert.AreEqual(FileModificationMode.New, (_clientMessage as FileModificationMessage).Modifications[2].Mode);
  450. Assert.AreEqual(descriptors[0].OriginId, (_clientMessage as FileModificationMessage).Modifications[0].OriginId);
  451. Assert.AreEqual(descriptors[1].OriginId, (_clientMessage as FileModificationMessage).Modifications[1].OriginId);
  452. Assert.AreEqual(descriptors[2].OriginId, (_clientMessage as FileModificationMessage).Modifications[2].OriginId);
  453. }
  454. }
  455. }
  456. }
  457. void client_MessageReceived(object sender, MessageEventArgs e)
  458. {
  459. _clientMessage = e.Message;
  460. }
  461. void server_MessageReceived(object sender, ObviousCode.Interlace.BitTunnelLibrary.Events.MessageEventArgs e)
  462. {
  463. _serverMessage = e.Message;
  464. if (_serverMessage is FileModificationMessage)
  465. {
  466. _serverModificationMessage = _serverMessage as FileModificationMessage;
  467. }
  468. }
  469. }
  470. }