public void WhenFileOwnedByTwoClients_ClientTwoRefusesRequest_FileShouldBeAvailableFromClientOne() { //Test intended to show that order of client connection not contributing factor in download rather that testing which client file was retrieved from bool fileListUpdateReceived = false; bool requestedFileAvailable = false; bool fileRequestResponseReceived = false; string expectedHash = _existingFiles[1].Hash; bool allowRequest = true; _fileRequestReceivedCallback = new Action<FileRequestEventArgs>(delegate(FileRequestEventArgs e) { if (e.File.Hash == expectedHash) { e.Allow = allowRequest; allowRequest = !allowRequest; } }); _fileListUpdateCallback = new Action(delegate() { fileListUpdateReceived = true; }); _fileRequestResponseCallback = new Action<FileRequestResponseEventArgs>(delegate(FileRequestResponseEventArgs e) { if (e.File.Hash == expectedHash) { if (!requestedFileAvailable) { requestedFileAvailable = e.Response == FileRequestMode.Available; } fileRequestResponseReceived = true; } }); using (ServerInstance server = new ServerInstance(_settings)) { server.Connect(); using (ClientInstance client1 = new ClientInstance(_settings, "Client 1")) { client1.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); client1.FileRequestReceived += new EventHandler<FileRequestEventArgs>(event_FileRequestReceived); client1.Connect(); client1.AddFiles(_existingFiles); DateTime then = DateTime.Now; while (!fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fileListUpdateReceived); fileListUpdateReceived = false; using (ClientInstance client2 = new ClientInstance(_settings, "Client 2")) { client2.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); client2.FileRequestReceived += new EventHandler<FileRequestEventArgs>(event_FileRequestReceived); client2.Connect(); client2.AddFiles(_existingFiles); then = DateTime.Now; while (!fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fileListUpdateReceived); fileListUpdateReceived = false; using (ClientInstance client3 = new ClientInstance(_settings, "Client 3")) { client3.FileRequestResponseReceived += new EventHandler<FileRequestResponseEventArgs>(client_FileRequestResponseReceived); client3.Connect(); client3.RequestFile(_existingFiles[1]); then = DateTime.Now; while (!fileRequestResponseReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fileRequestResponseReceived); Assert.IsTrue(requestedFileAvailable); } } } } }
public void WhenFileIsRequestedFromClientThatContainsFile_FileShouldBeServedInstantlyWithoutCallingServer() { bool fileListUpdateReceived = false; bool fileRequestReceived = false; FileInfo requestedFile = null; string expectedHash = _existingFiles[2].Hash; _fileRequestReceivedCallback = new Action<FileRequestEventArgs>(delegate(FileRequestEventArgs e) { fileRequestReceived = true; }); _fileTransferCompletedCallback = new Action<FileTransferCompletedEventArgs>(delegate (FileTransferCompletedEventArgs e) { if (expectedHash == e.Hash) { requestedFile = new FileInfo(e.Location); } } ); _fileListUpdateCallback = new Action(delegate() { fileListUpdateReceived = true; } ); using (ServerInstance server = new ServerInstance(_settings)) { server.FileRequested += new EventHandler<FileRequestEventArgs>(event_FileRequestReceived); server.Connect(); using (ClientInstance client = new ClientInstance(_settings)) { client.FileTransferCompleted +=new EventHandler<FileTransferCompletedEventArgs>(client_FileTransferCompleted); client.FileListUpdateReceived +=new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); client.Connect(); client.AddFiles(_existingFiles); DateTime then = DateTime.Now; while (!fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fileListUpdateReceived); client.RequestFile(_existingFiles[2]); then = DateTime.Now; while (requestedFile == null && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsNotNull(requestedFile); Assert.IsFalse(fileRequestReceived); Assert.AreEqual(_existingFiles[2].FileFullName, requestedFile.FullName); FilesIsEqualToRequestedFile(_existingFiles[2], requestedFile); } } }
public void WhenFileIsRequested_FileProgressTransferEventsShouldFire() { int progressCalls = 0; bool fullFileListReceived = false; bool fileListUpdateReceived = false; bool fileTransferCompleted = false; string expectedHash = _existingFiles[2].Hash; int backup = _settings.FileChunkSize; _settings.FileChunkSize = 1024; _transferProgressCallback = new Action(delegate() { progressCalls++; } ); _fullFileListReceivedCallback = new Action(delegate() { fullFileListReceived = true; }); _fileListUpdateCallback = new Action(delegate() { fileListUpdateReceived = true; }); _fileTransferCompletedCallback = new Action<FileTransferCompletedEventArgs>(delegate(FileTransferCompletedEventArgs e) { if (e.Hash == expectedHash) { fileTransferCompleted = true; } }); using (ServerInstance server = new ServerInstance(_settings)) { server.Connect(); using (ClientInstance owningClient = new ClientInstance(_settings, "Owning")) { owningClient.FileListUpdateReceived +=new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); owningClient.Connect(); owningClient.AddFiles(_existingFiles); DateTime then = DateTime.Now; while (!fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 60) ; Assert.IsTrue(fileListUpdateReceived); using (ClientInstance requestingClient = new ClientInstance(_settings, "Requesting")) { progressCalls = 0; fullFileListReceived = false; requestingClient.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived); requestingClient.FileTransferProgressed += new EventHandler<FileTransferEventArgs>(client_FileTransferProgressed); requestingClient.FileTransferCompleted +=new EventHandler<FileTransferCompletedEventArgs>(client_FileTransferCompleted); requestingClient.Connect(); then = DateTime.Now; while (!fullFileListReceived && (DateTime.Now - then).TotalSeconds < 60) ; Assert.IsTrue(fullFileListReceived); then = DateTime.Now; requestingClient.RequestFile(_existingFiles[2]); while (!fileTransferCompleted && (DateTime.Now - then).TotalMinutes < 10) ; Assert.IsTrue(fileTransferCompleted); Assert.AreEqual(Math.Ceiling((double)FILESIZE / _settings.FileChunkSize), progressCalls); } } } _settings.FileChunkSize = backup; }
public void WhenFileIsRequestedFromClient_ServerBlocksRequest_FailResponseIsReceived() { bool fileListUpdateReceived = false; bool fileRequestResponseReceived = false; bool fileRequestFailed = false; string expectedHash = _existingFiles[0].Hash; _fileListUpdateCallback = new Action(delegate() { fileListUpdateReceived = true; }); _fileRequestReceivedCallback = new Action<FileRequestEventArgs>(delegate(FileRequestEventArgs e) { if (e.File.Hash == expectedHash) { e.Allow = false; } }); _fileRequestResponseCallback = new Action<FileRequestResponseEventArgs>(delegate(FileRequestResponseEventArgs e) { if (e.File.Hash == expectedHash) { if (e.Response == FileRequestMode.NotAvailable) { fileRequestFailed = true; fileRequestResponseReceived = true; } } }); using (ServerInstance server = new ServerInstance(_settings)) { server.Connect(); server.FileRequested += new EventHandler<FileRequestEventArgs>(event_FileRequestReceived); using (ClientInstance client = new ClientInstance(_settings)) { fileListUpdateReceived = false; client.Connect(); client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); client.AddFiles(_existingFiles); DateTime then = DateTime.Now; while (!fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fileListUpdateReceived); using (ClientInstance client2 = new ClientInstance(_settings, "Client2")) { client2.FileRequestResponseReceived +=new EventHandler<FileRequestResponseEventArgs>(client_FileRequestResponseReceived); client2.Connect(); client2.RequestFile(_existingFiles[0]); then = DateTime.Now; while (!fileRequestFailed && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fileRequestResponseReceived); Assert.IsTrue(fileRequestFailed); } } } }
public void WhenFileIsRequestedFromClient_FileExists_RequestingClientConnectsSecond_FileShouldBeServedInFull() { bool fileListUpdateReceived = false; bool fullFileListReceived = false; bool requestedFileReceived = false; FileInfo requestedFile = null; _fullFileListReceivedCallback = new Action(delegate() { fullFileListReceived = true; }); _fileListUpdateCallback = new Action(delegate() { fileListUpdateReceived = true; }); _fileTransferCompletedCallback = new Action<FileTransferCompletedEventArgs>(delegate(FileTransferCompletedEventArgs args) { requestedFile = new FileInfo(args.Location); requestedFileReceived = true; }); using (ServerInstance server = new ServerInstance(_settings)) { server.Connect(); using (ClientInstance clientOwning = new ClientInstance(_settings, "Owning Client")) { clientOwning.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); clientOwning.Connect(); clientOwning.AddFiles(_existingFiles); using (ClientInstance clientRequesting = new ClientInstance(_settings, "Requesting Client")) { clientRequesting.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived); clientRequesting.FileTransferCompleted += new EventHandler<FileTransferCompletedEventArgs>(client_FileTransferCompleted); clientRequesting.Connect(); DateTime then = DateTime.Now; while (!fullFileListReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fullFileListReceived); clientRequesting.RequestFile(_existingFiles[1]); then = DateTime.Now; while (!requestedFileReceived && (DateTime.Now - then).TotalMinutes < 10) ; Assert.IsTrue(fileListUpdateReceived); Assert.IsTrue(requestedFileReceived); Assert.IsNotNull(requestedFile); Assert.IsTrue(FilesIsEqualToRequestedFile(_existingFiles[1], requestedFile)); } } } }
public void WhenFileIsRequestedFromClient_FileExists_FileInitiatedEventShouldFire() { bool fileListUpdateReceived = false; bool fullFileListReceived = false; bool fileTransferInitiatedEventReceived = false; _fileListUpdateCallback = new Action(delegate() { fileListUpdateReceived = true; }); _fullFileListReceivedCallback = new Action(delegate() { fullFileListReceived = true; }); _fileTransferInitiatedCallback = new Action(delegate() { fileTransferInitiatedEventReceived = true; }); using (ServerInstance server = new ServerInstance(_settings)) { server.Connect(); using (ClientInstance clientOwning = new ClientInstance(_settings, "Owning Client")) { clientOwning.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdateReceived); clientOwning.Connect(); clientOwning.AddFiles(_existingFiles); using (ClientInstance clientRequesting = new ClientInstance(_settings, "Requesting Client")) { clientRequesting.FullFileListReceived += new EventHandler<FileListEventArgs>(client_FullFileListReceived); clientRequesting.FileTransferInitiated += new EventHandler<FileTransferEventArgs>(client_FileTransferInitiated); clientRequesting.Connect(); DateTime then = DateTime.Now; while (!fullFileListReceived && (DateTime.Now - then).TotalSeconds < 1) ; Assert.IsTrue(fullFileListReceived); clientRequesting.RequestFile(_existingFiles[1]); then = DateTime.Now; while (!fileTransferInitiatedEventReceived && (DateTime.Now - then).TotalSeconds < 60) ; Assert.IsTrue(fileTransferInitiatedEventReceived); } } } }