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

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

https://bitbucket.org/VahidN/interlace
C# | 722 lines | 525 code | 192 blank | 5 comment | 46 complexity | 30b2efd73427cc9a470c69d93b4ca91f 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 System.IO;
  7. using ObviousCode.Interlace.BitTunnelLibrary;
  8. using System.Net;
  9. using System.Threading;
  10. using ObviousCode.Interlace.BitTunnel.Connectivity;
  11. using ObviousCode.Interlace.BitTunnelLibrary.File;
  12. using ObviousCode.Interlace.BitTunnelLibrary.Events;
  13. namespace TestBitTunnel
  14. {
  15. [TestFixture]
  16. public class FileListTests
  17. {
  18. AppSettings _settings = new AppSettings();
  19. FileInfo _existingFile1;
  20. FileInfo _existingFile2;
  21. FileInfo _existingFile3;
  22. bool _fileListReceived;
  23. bool _fileListUpdateReceived;
  24. FileDescriptor[] _existingFiles;
  25. [SetUp]
  26. public void TestSetup()
  27. {
  28. _fileListReceived = false;
  29. _fileListUpdateReceived = false;
  30. }
  31. [TestFixtureSetUp]
  32. public void FixtureSetUp()
  33. {
  34. _settings.Port = 1234;
  35. _settings.ServerAddress = IPAddress.Parse("127.0.0.1");
  36. _settings.ClientConnectionTimeout = 1000;
  37. _existingFile1 = CreateNewFile();
  38. _existingFile2 = CreateNewFile();
  39. _existingFile3 = CreateNewFile();
  40. _existingFiles = new FileDescriptor[] {
  41. FileDescriptor.Create(_existingFile1),
  42. FileDescriptor.Create(_existingFile2),
  43. FileDescriptor.Create(_existingFile3) };
  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. [Test]
  71. public void WhenFirstClientConnectsToServer_FileListReceivedEventShouldFire()
  72. {
  73. using (ServerInstance server = new ServerInstance(_settings))
  74. {
  75. server.Connect();
  76. using (ClientInstance client = new ClientInstance(_settings))
  77. {
  78. client.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  79. client.Connect();
  80. DateTime start = DateTime.Now;
  81. //Give it a second for the file list to be retrieved from server
  82. while (!_fileListReceived && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  83. Assert.IsTrue(_fileListReceived);
  84. }
  85. }
  86. }
  87. [Test]
  88. public void WhenOnlyClientConnectsToServer_ClientsFilesShouldBeEmpty()
  89. {
  90. using (ServerInstance server = new ServerInstance(_settings))
  91. {
  92. server.Connect();
  93. using (ClientInstance client = new ClientInstance(_settings))
  94. {
  95. client.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  96. client.Connect();
  97. DateTime start = DateTime.Now;
  98. //Give it a second for the file list to be retrieved from server
  99. while (!_fileListReceived && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  100. Assert.IsTrue(_fileListReceived);
  101. Assert.AreEqual(0, client.AvailableFiles.GetCurrentUniqueFileList().Count());
  102. }
  103. }
  104. }
  105. [Test]
  106. public void WhenSecondClientConnectsToServerWithFiles_ClientFileCountShouldReflectFirstClientFileCount()
  107. {
  108. using(ServerInstance server = new ServerInstance(_settings))
  109. {
  110. server.Connect();
  111. using (ClientInstance client1 = new ClientInstance(_settings))
  112. {
  113. client1.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  114. client1.Connect();
  115. client1.AddFiles(new FileDescriptor[] {
  116. FileDescriptor.Create(_existingFile1),
  117. FileDescriptor.Create(_existingFile2),
  118. FileDescriptor.Create(_existingFile3) });
  119. DateTime start = DateTime.Now;
  120. while (!_fileListReceived && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  121. _fileListReceived = false;
  122. using (ClientInstance client2 = new ClientInstance(_settings))
  123. {
  124. client2.FullFileListReceived +=new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  125. client2.Connect();
  126. while (!_fileListReceived && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  127. Assert.IsTrue(_fileListReceived);
  128. Assert.AreEqual(3, client2.AvailableFiles.GetCurrentUniqueFileList().Count());
  129. }
  130. }
  131. }
  132. }
  133. [Test]
  134. public void WhenSecondClientConnectsToServerWithFiles_ClientFileCountShouldReflectFirstClientFiles()
  135. {
  136. using (ServerInstance server = new ServerInstance(_settings))
  137. {
  138. server.Connect();
  139. using (ClientInstance client1 = new ClientInstance(_settings))
  140. {
  141. client1.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  142. client1.Connect();
  143. client1.AddFiles(_existingFiles);
  144. DateTime start = DateTime.Now;
  145. while (!_fileListReceived && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  146. _fileListReceived = false;
  147. using (ClientInstance client2 = new ClientInstance(_settings))
  148. {
  149. client2.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  150. client2.Connect();
  151. while (!_fileListReceived && (DateTime.Now - start).TotalMilliseconds < 1000) ;
  152. Assert.IsTrue(_fileListReceived);
  153. Assert.IsTrue(client2.AvailableFiles.Contains(_existingFiles));
  154. Assert.IsTrue(client2.AvailableFiles.Contains(client1.AvailableFiles.GetCurrentUniqueFileList().ToArray()));
  155. }
  156. }
  157. }
  158. }
  159. [Test]
  160. public void WhenClientConnectsToServer_AddsFiles_ClientShouldFireFilesUpdateEvent()
  161. {
  162. using (ServerInstance server = new ServerInstance(_settings))
  163. {
  164. server.Connect();
  165. using (ClientInstance client = new ClientInstance(_settings))
  166. {
  167. client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  168. client.Connect();
  169. client.AddFiles(_existingFiles);
  170. DateTime then = DateTime.Now;
  171. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  172. Assert.IsTrue(_fileListUpdateReceived);
  173. }
  174. }
  175. }
  176. [Test]
  177. public void WhenSecondClientConnectsToServer_AddsFiles_ClientShouldFireFilesUpdateEvent()
  178. {
  179. using (ServerInstance server = new ServerInstance(_settings))
  180. {
  181. server.Connect();
  182. using (ClientInstance client1 = new ClientInstance(_settings))
  183. {
  184. client1.FileListUpdateReceived +=new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  185. client1.Connect();
  186. using (ClientInstance client2 = new ClientInstance(_settings))
  187. {
  188. client2.Connect();
  189. client2.AddFiles(_existingFiles);
  190. DateTime then = DateTime.Now;
  191. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  192. Assert.IsTrue(_fileListUpdateReceived);
  193. }
  194. }
  195. }
  196. }
  197. [Test]
  198. public void WhenSecondClientConnectsToServer_SecondClientAddsFile_FirstClientFilesShouldReflectServerFiles()
  199. {
  200. using (ServerInstance server = new ServerInstance(_settings))
  201. {
  202. server.Connect();
  203. using (ClientInstance client = new ClientInstance(_settings))
  204. {
  205. client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  206. client.Connect();
  207. using(ClientInstance client2 = new ClientInstance(_settings))
  208. {
  209. client2.Connect();
  210. client2.AddFiles(_existingFiles);
  211. DateTime then = DateTime.Now;
  212. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  213. Assert.IsTrue(_fileListUpdateReceived);
  214. Assert.IsTrue(client.AvailableFiles.Contains(_existingFiles));
  215. }
  216. }
  217. }
  218. }
  219. [Test]
  220. public void WhenSecondClientConnectsToServerWithFiles_SecondClientAddsDifferentFiles_FirstClientFilesShouldReflectServerFilesBeingASuperSetOfBothFileLists()
  221. {
  222. using (ServerInstance server = new ServerInstance(_settings))
  223. {
  224. server.Connect();
  225. using (ClientInstance client = new ClientInstance(_settings))
  226. {
  227. client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  228. client.Connect();
  229. client.AddFiles(new FileDescriptor[] { FileDescriptor.Create(_existingFile1) });
  230. DateTime then = DateTime.Now;
  231. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  232. Assert.IsTrue(_fileListUpdateReceived);
  233. Assert.AreEqual(1, client.AvailableFiles.UniqueFileCount);
  234. Assert.IsTrue(client.AvailableFiles.Contains(FileDescriptor.Create(_existingFile1)));
  235. _fileListUpdateReceived = false;
  236. using (ClientInstance client2 = new ClientInstance(_settings))
  237. {
  238. client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  239. client2.Connect();
  240. client2.AddFiles(new FileDescriptor[]
  241. {
  242. FileDescriptor.Create(_existingFile2),
  243. FileDescriptor.Create(_existingFile3)
  244. }
  245. );
  246. then = DateTime.Now;
  247. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  248. Assert.IsTrue(_fileListUpdateReceived);
  249. Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
  250. Assert.IsTrue(client.AvailableFiles.Contains(_existingFiles));
  251. }
  252. }
  253. }
  254. }
  255. [Test]
  256. public void WhenSecondClientConnectsToServerWithFiles_SecondClientAddsSomeOfTheSameFiles_FirstClientFilesShouldBeASingleInstanceOfAllThree()
  257. {
  258. using(ServerInstance server = new ServerInstance(_settings))
  259. {
  260. server.Connect();
  261. using(ClientInstance client = new ClientInstance(_settings))
  262. {
  263. client.FileListUpdateReceived +=new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  264. client.Connect();
  265. client.AddFiles(_existingFiles);
  266. DateTime then = DateTime.Now;
  267. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  268. Assert.IsTrue(_fileListUpdateReceived);
  269. Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
  270. Assert.AreEqual(3, client.AvailableFiles.FileInstanceCount);
  271. Assert.IsTrue(client.AvailableFiles.Contains(_existingFiles));
  272. _fileListUpdateReceived = false;
  273. using (ClientInstance client2 = new ClientInstance(_settings))
  274. {
  275. client2.Connect();
  276. client2.AddFiles(new FileDescriptor[] {
  277. FileDescriptor.Create(_existingFile1),
  278. FileDescriptor.Create(_existingFile3)}
  279. );
  280. then = DateTime.Now;
  281. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  282. Assert.IsTrue(_fileListUpdateReceived);
  283. Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
  284. Assert.AreEqual(3, client.AvailableFiles.FileInstanceCount);
  285. Assert.IsTrue(client.AvailableFiles.Contains(_existingFiles));
  286. Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile1).Hash));
  287. Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile2)));
  288. Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile3)));
  289. }
  290. }
  291. }
  292. }
  293. [Test]
  294. public void WhenSecondClientConnectsToServerWithFiles_FirstClientRemovesFiles_SecondClientFilesShouldReflectNoServerFiles()
  295. {
  296. using (ServerInstance server = new ServerInstance(_settings))
  297. {
  298. server.Connect();
  299. using (ClientInstance client = new ClientInstance(_settings))
  300. {
  301. client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  302. client.Connect();
  303. client.AddFiles(_existingFiles);
  304. DateTime then = DateTime.Now;
  305. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  306. Assert.IsTrue(_fileListUpdateReceived);
  307. Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
  308. Assert.AreEqual(3, client.AvailableFiles.FileInstanceCount);
  309. _fileListUpdateReceived = false;
  310. client.FileListUpdateReceived -= new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  311. using (ClientInstance client2 = new ClientInstance(_settings, "Client2"))
  312. {
  313. client2.FullFileListReceived +=new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  314. client2.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  315. client2.Connect();
  316. then = DateTime.Now;
  317. while (!_fileListReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  318. Assert.IsTrue(_fileListReceived);
  319. Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);
  320. Assert.AreEqual(3, client2.AvailableFiles.FileInstanceCount);
  321. Assert.IsTrue(client2.AvailableFiles.Contains(_existingFiles));
  322. _fileListUpdateReceived = false;
  323. client.RemoveFiles(_existingFiles);
  324. then = DateTime.Now;
  325. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  326. Assert.IsTrue(_fileListUpdateReceived);
  327. Assert.AreEqual(0, client2.AvailableFiles.UniqueFileCount);
  328. }
  329. }
  330. }
  331. }
  332. //Should Test (though fix is not implemented) for Client receiving remove messages BEFORE file list received - should buffer removes for n seconds
  333. [Test]
  334. public void WhenSecondClientTriesToRemoveFirstClientFiles_ShouldHaveNoEffect()
  335. {
  336. using (ServerInstance server = new ServerInstance(_settings))
  337. {
  338. server.Connect();
  339. using (ClientInstance client = new ClientInstance(_settings, "Test Client 1"))
  340. {
  341. client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  342. client.Connect();
  343. client.AddFiles(_existingFiles);
  344. DateTime then = DateTime.Now;
  345. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  346. Assert.IsTrue(_fileListUpdateReceived);
  347. Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
  348. _fileListUpdateReceived = false;
  349. client.FileListUpdateReceived -= new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  350. using (ClientInstance client2 = new ClientInstance(_settings, "Test Client 2"))
  351. {
  352. client2.FullFileListReceived +=new EventHandler<FileListEventArgs>(client_FullFileListReceived);
  353. client2.FileListUpdateReceived +=new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  354. client2.Connect();
  355. then = DateTime.Now;
  356. while (!_fileListReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  357. Assert.IsTrue(_fileListReceived);
  358. Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);
  359. _fileListReceived = false;
  360. client2.RemoveFiles(_existingFiles);
  361. then = DateTime.Now;
  362. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  363. Assert.IsTrue(_fileListUpdateReceived);
  364. Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);
  365. Assert.IsTrue(client2.AvailableFiles.Contains(_existingFiles));
  366. }
  367. }
  368. }
  369. }
  370. [Test]
  371. public void WhenFirstClientConnectsToServer_AddsFiles_SecondClientAddsSameFiles_FirstClientRemovesOneFile_ClientsShouldHaveOneInstanceOfAllFiles()
  372. {
  373. using(ServerInstance server = new ServerInstance(_settings))
  374. {
  375. server.Connect();
  376. using(ClientInstance client = new ClientInstance(_settings, "Client 1"))
  377. {
  378. client.Connect();
  379. client.FileListUpdateReceived+=new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  380. client.AddFiles(_existingFiles);
  381. DateTime then = DateTime.Now;
  382. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  383. Assert.IsTrue(_fileListUpdateReceived);
  384. client.FileListUpdateReceived -= new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  385. _fileListUpdateReceived = false;
  386. using (ClientInstance client2 = new ClientInstance(_settings, "Client 2"))
  387. {
  388. client2.Connect();
  389. client2.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);
  390. client2.AddFiles(_existingFiles);
  391. then = DateTime.Now;
  392. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  393. Assert.IsTrue(_fileListUpdateReceived);
  394. _fileListUpdateReceived = false;
  395. client.RemoveFiles(
  396. new FileDescriptor[]
  397. {
  398. _existingFiles[1]
  399. }
  400. );
  401. then = DateTime.Now;
  402. while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;
  403. Assert.IsTrue(_fileListUpdateReceived);
  404. Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);
  405. Assert.AreEqual(3, client2.AvailableFiles.FileInstanceCount);
  406. Assert.AreEqual(1, client2.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile1)));
  407. Assert.AreEqual(1, client2.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile2)));
  408. Assert.AreEqual(1, client2.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile3)));
  409. //These should have been set by now, as client2 is sent file updates after client, however if race conditions still exist
  410. //add a second event handler for the file received on the first client and a second boolean to check
  411. Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
  412. Assert.AreEqual(3, client.AvailableFiles.FileInstanceCount);
  413. Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile1)));
  414. Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile2)));
  415. Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile3)));
  416. }
  417. }
  418. }
  419. }
  420. [Test]
  421. public void WhenFilesAddedLocally_ShouldBeAvailableInLocalFiles()
  422. {
  423. using(ServerInstance server = new ServerInstance(_settings))
  424. {
  425. server.Connect();
  426. using (ClientInstance client = new ClientInstance(_settings))
  427. {
  428. client.Connect();
  429. client.AddFiles(_existingFiles);
  430. Assert.AreEqual(3, client.LocalFiles.UniqueFileCount);
  431. Assert.AreEqual(3, client.LocalFiles.FileInstanceCount);
  432. }
  433. }
  434. }
  435. [Test]
  436. public void WhenFilesAddedLocally_AndRemovedLocally_ShouldBeRemovedFromLocalFiles()
  437. {
  438. using (ServerInstance server = new ServerInstance(_settings))
  439. {
  440. server.Connect();
  441. using (ClientInstance client = new ClientInstance(_settings))
  442. {
  443. client.Connect();
  444. client.AddFiles(_existingFiles);
  445. client.RemoveFiles(_existingFiles);
  446. Assert.AreEqual(0, client.LocalFiles.UniqueFileCount);
  447. Assert.AreEqual(0, client.LocalFiles.FileInstanceCount);
  448. }
  449. }
  450. }
  451. [Test]
  452. public void WhenFilesAddedLocally_AndSomeRemovedLocally_OnlyRemovedFilesShouldBeRemovedFromLocalFiles()
  453. {
  454. using (ServerInstance server = new ServerInstance(_settings))
  455. {
  456. server.Connect();
  457. using (ClientInstance client = new ClientInstance(_settings))
  458. {
  459. client.Connect();
  460. client.AddFiles(_existingFiles);
  461. client.RemoveFiles(new FileDescriptor[]{_existingFiles[0], _existingFiles[2]} );
  462. Assert.AreEqual(1, client.LocalFiles.UniqueFileCount);
  463. Assert.AreEqual(1, client.LocalFiles.FileInstanceCount);
  464. Assert.IsTrue(client.LocalFiles.Contains(_existingFiles[1]));
  465. }
  466. }
  467. }
  468. [Test]
  469. public void WhenFilesAddedLocally_AndRemovedRemotely_ShouldNotBeRemovedFromLocalFiles()
  470. {
  471. using(ServerInstance server = new ServerInstance(_settings))
  472. {
  473. server.Connect();
  474. using(ClientInstance client = new ClientInstance(_settings))
  475. {
  476. client.Connect();
  477. client.AddFiles(_existingFiles);
  478. using (ClientInstance client2 = new ClientInstance(_settings))
  479. {
  480. client2.Connect();
  481. client2.RemoveFiles(_existingFiles);
  482. }
  483. Assert.AreEqual(3, client.LocalFiles.UniqueFileCount);
  484. Assert.AreEqual(3, client.LocalFiles.FileInstanceCount);
  485. }
  486. }
  487. }
  488. [Test]
  489. public void WhenFilesAddedLocally_Twice_ShouldOnlyBeReflectedOnceInLocalFiles()
  490. {
  491. using(ServerInstance server = new ServerInstance(_settings))
  492. {
  493. server.Connect();
  494. using (ClientInstance client = new ClientInstance(_settings))
  495. {
  496. client.Connect();
  497. client.AddFiles(_existingFiles);
  498. client.AddFiles(_existingFiles);
  499. Assert.AreEqual(3, client.LocalFiles.UniqueFileCount);
  500. Assert.AreEqual(3, client.LocalFiles.FileInstanceCount);
  501. }
  502. }
  503. }
  504. [Test]
  505. public void WhenFilesAddedLocally_Twice_RemovedOnce_ShouldBeRemovedFromLocalFiles()
  506. {
  507. using (ServerInstance server = new ServerInstance(_settings))
  508. {
  509. server.Connect();
  510. using (ClientInstance client = new ClientInstance(_settings))
  511. {
  512. client.Connect();
  513. client.AddFiles(_existingFiles);
  514. client.AddFiles(_existingFiles);
  515. client.RemoveFiles(_existingFiles);
  516. Assert.AreEqual(0, client.LocalFiles.UniqueFileCount);
  517. Assert.AreEqual(0, client.LocalFiles.FileInstanceCount);
  518. }
  519. }
  520. }
  521. void client_FullFileListReceived(object sender, ObviousCode.Interlace.BitTunnelLibrary.Events.FileListEventArgs e)
  522. {
  523. _fileListReceived = true;
  524. }
  525. void client_FileListUpdated(object sender, FileListModificationEventArgs e)
  526. {
  527. _fileListUpdateReceived = true;
  528. }
  529. }
  530. }