public void WhenFileModificationMessages_ModeRemoved_AreSentByClient_TheyShouldBeFullyReceivedByServer()
        {
            _serverMessage = null;

            FileDescriptor[] descriptors = null;

            string originId = "Not Set";

            using (ServerInstance server = new ServerInstance(_settings))
            {
                server.MessageReceived += new EventHandler<ObviousCode.Interlace.BitTunnelLibrary.Events.MessageEventArgs>(server_MessageReceived);

                server.Connect();

                while (!server.IsConnected) ;

                using (ClientInstance client = new ClientInstance(_settings))
                {
                    client.Connect();

                    originId = client.ConnectionDetails.InstanceId;

                    descriptors = new List<FileDescriptor>()
                    {
                        FileDescriptor.Create(_existingFile1, true),
                        FileDescriptor.Create(_existingFile2, true),
                        FileDescriptor.Create(_existingFile3, true)
                    }.ToArray();

                    _serverModificationMessage = null;

                    client.RemoveFiles(descriptors);

                    DateTime then = DateTime.Now;

                    while (_serverModificationMessage == null && (DateTime.Now - then).TotalSeconds < 1) ;

                    Assert.IsNotNull(_serverModificationMessage);

                    Assert.AreEqual(descriptors[0].FileFullName, _serverModificationMessage.Modifications[0].FileFullName);
                    Assert.AreEqual(descriptors[1].FileFullName, _serverModificationMessage.Modifications[1].FileFullName);
                    Assert.AreEqual(descriptors[2].FileFullName, _serverModificationMessage.Modifications[2].FileFullName);

                    //Assert.AreEqual(descriptors[0].FileId, _serverModificationMessage.Modifications[0].FileId);
                    //Assert.AreEqual(descriptors[1].FileId, _serverModificationMessage.Modifications[1].FileId);
                    //Assert.AreEqual(descriptors[2].FileId, _serverModificationMessage.Modifications[2].FileId);

                    Assert.AreEqual(originId, _serverModificationMessage.Modifications[0].OriginId);
                    Assert.AreEqual(originId, _serverModificationMessage.Modifications[1].OriginId);
                    Assert.AreEqual(originId, _serverModificationMessage.Modifications[2].OriginId);

                    Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[0].Mode);
                    Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[1].Mode);
                    Assert.AreEqual(FileModificationMode.Remove, _serverModificationMessage.Modifications[2].Mode);
                }
            }
        }
Ejemplo n.º 2
0
        public void WhenFilesAddedLocally_AndRemovedLocally_ShouldBeRemovedFromLocalFiles()
        {
            using (ServerInstance server = new ServerInstance(_settings))
            {
                server.Connect();

                using (ClientInstance client = new ClientInstance(_settings))
                {
                    client.Connect();

                    client.AddFiles(_existingFiles);
                    client.RemoveFiles(_existingFiles);

                    Assert.AreEqual(0, client.LocalFiles.UniqueFileCount);
                    Assert.AreEqual(0, client.LocalFiles.FileInstanceCount);
                }
            }
        }
Ejemplo n.º 3
0
        public void WhenFirstClientConnectsToServer_AddsFiles_SecondClientAddsSameFiles_FirstClientRemovesOneFile_ClientsShouldHaveOneInstanceOfAllFiles()
        {
            using(ServerInstance server = new ServerInstance(_settings))
            {
                server.Connect();

                using(ClientInstance client = new ClientInstance(_settings, "Client 1"))
                {
                    client.Connect();

                    client.FileListUpdateReceived+=new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);

                    client.AddFiles(_existingFiles);

                    DateTime then = DateTime.Now;

                    while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;

                    Assert.IsTrue(_fileListUpdateReceived);

                    client.FileListUpdateReceived -= new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);

                    _fileListUpdateReceived = false;

                    using (ClientInstance client2 = new ClientInstance(_settings, "Client 2"))
                    {
                        client2.Connect();

                        client2.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);

                        client2.AddFiles(_existingFiles);

                        then = DateTime.Now;

                        while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;

                        Assert.IsTrue(_fileListUpdateReceived);

                        _fileListUpdateReceived = false;

                        client.RemoveFiles(
                            new FileDescriptor[]
                            {
                                _existingFiles[1]
                            }
                            );

                        then = DateTime.Now;

                        while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;

                        Assert.IsTrue(_fileListUpdateReceived);

                        Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);
                        Assert.AreEqual(3, client2.AvailableFiles.FileInstanceCount);
                        Assert.AreEqual(1, client2.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile1)));
                        Assert.AreEqual(1, client2.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile2)));
                        Assert.AreEqual(1, client2.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile3)));

                        //These should have been set by now, as client2 is sent file updates after client, however if race conditions still exist
                        //add a second event handler for the file received on the first client and a second boolean to check
                        Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);
                        Assert.AreEqual(3, client.AvailableFiles.FileInstanceCount);
                        Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile1)));
                        Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile2)));
                        Assert.AreEqual(1, client.AvailableFiles.CountOf(FileDescriptor.Create(_existingFile3)));
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public void WhenSecondClientTriesToRemoveFirstClientFiles_ShouldHaveNoEffect()
        {
            using (ServerInstance server = new ServerInstance(_settings))
            {
                server.Connect();

                using (ClientInstance client = new ClientInstance(_settings, "Test Client 1"))
                {
                    client.FileListUpdateReceived += new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);

                    client.Connect();

                    client.AddFiles(_existingFiles);

                    DateTime then = DateTime.Now;

                    while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;

                    Assert.IsTrue(_fileListUpdateReceived);
                    Assert.AreEqual(3, client.AvailableFiles.UniqueFileCount);

                    _fileListUpdateReceived = false;

                    client.FileListUpdateReceived -= new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);

                    using (ClientInstance client2 = new ClientInstance(_settings, "Test Client 2"))
                    {
                        client2.FullFileListReceived +=new EventHandler<FileListEventArgs>(client_FullFileListReceived);
                        client2.FileListUpdateReceived +=new EventHandler<FileListModificationEventArgs>(client_FileListUpdated);

                        client2.Connect();

                        then = DateTime.Now;

                        while (!_fileListReceived && (DateTime.Now - then).TotalSeconds < 1) ;

                        Assert.IsTrue(_fileListReceived);
                        Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);

                        _fileListReceived = false;

                        client2.RemoveFiles(_existingFiles);

                        then = DateTime.Now;

                        while (!_fileListUpdateReceived && (DateTime.Now - then).TotalSeconds < 1) ;

                        Assert.IsTrue(_fileListUpdateReceived);
                        Assert.AreEqual(3, client2.AvailableFiles.UniqueFileCount);
                        Assert.IsTrue(client2.AvailableFiles.Contains(_existingFiles));
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public void WhenFilesAddedLocally_AndSomeRemovedLocally_OnlyRemovedFilesShouldBeRemovedFromLocalFiles()
        {
            using (ServerInstance server = new ServerInstance(_settings))
            {
                server.Connect();

                using (ClientInstance client = new ClientInstance(_settings))
                {
                    client.Connect();

                    client.AddFiles(_existingFiles);
                    client.RemoveFiles(new FileDescriptor[]{_existingFiles[0], _existingFiles[2]} );

                    Assert.AreEqual(1, client.LocalFiles.UniqueFileCount);
                    Assert.AreEqual(1, client.LocalFiles.FileInstanceCount);
                    Assert.IsTrue(client.LocalFiles.Contains(_existingFiles[1]));
                }
            }
        }