File transmission storage.
Inheritance: IFileTransmissionStorage
 public void GetObjectListReturnsZeroSizeListFromEmptyStorage() {
     var storage = new FileTransmissionStorage(this.engine);
     Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));
 }
 public void ConstructorTakesDbEngine() {
     var underTest = new FileTransmissionStorage(this.engine);
     Assert.That(underTest.ChunkSize, Is.GreaterThan(0));
 }
 public void ConstructorTakesDbEngineAndChunkSize([Values(1, 1024, 12345)]long chunkSize) {
     var underTest = new FileTransmissionStorage(this.engine, chunkSize);
     Assert.That(underTest.ChunkSize, Is.EqualTo(chunkSize));
 }
        public void GetObjectListOnPersistedStorage() {
            var conf = new DBreezeConfiguration {
                DBreezeDataFolderName = this.persistentDBreezePath,
                Storage = DBreezeConfiguration.eStorage.DISK
            };

            using (var engine = new DBreezeEngine(conf)) {
                var storage = new FileTransmissionStorage(engine);
                for (int i = 1; i <= 10; ++i) {
                    this.remoteFile.Setup(m => m.Id).Returns("RemoteObjectId" + i.ToString());
                    var obj = new FileTransmissionObject(TransmissionType.UPLOAD_NEW_FILE, this.localFile.Object, this.remoteFile.Object);
                    Assert.DoesNotThrow(() => storage.SaveObject(obj));
                    Assert.That(storage.GetObjectList().Count, Is.EqualTo(i));
                    Assert.That(storage.GetObjectList().First(foo => foo.LocalPath == this.localFile.Object.FullName && foo.RemoteObjectId == "RemoteObjectId" + i.ToString()), Is.Not.Null);
                }
            }

            using (var engine = new DBreezeEngine(conf)) {
                var storage = new FileTransmissionStorage(engine);
                for (int i = 1; i <= 10; ++i) {
                    Assert.That(storage.GetObjectList().First(foo => foo.LocalPath == this.localFile.Object.FullName && foo.RemoteObjectId == "RemoteObjectId" + i.ToString()), Is.Not.Null);
                }

                Assert.That(storage.GetObjectList().Count, Is.EqualTo(10));
            }
        }
 public void GetObjectByLocalPath() {
     var storage = new FileTransmissionStorage(this.engine);
     this.remoteFile.Setup(m => m.Id).Returns("RemoteObjectId");
     var obj = new FileTransmissionObject(TransmissionType.UPLOAD_NEW_FILE, this.localFile.Object, this.remoteFile.Object);
     Assert.DoesNotThrow(() => storage.SaveObject(obj));
     Assert.That(storage.GetObjectByLocalPath(this.localFile.Object.FullName).RemoteObjectId, Is.EqualTo("RemoteObjectId"));
     Assert.That(storage.GetObjectByLocalPath(this.localFile.Object.FullName + ".temp"), Is.Null);
 }
        public void ClearObjectList() {
            var storage = new FileTransmissionStorage(this.engine);

            for (int i = 1; i <= 10; ++i) {
                this.remoteFile.Setup(m => m.Id).Returns("RemoteObjectId" + i.ToString());
                var obj = new FileTransmissionObject(TransmissionType.UPLOAD_NEW_FILE, this.localFile.Object, this.remoteFile.Object);
                Assert.DoesNotThrow(() => storage.SaveObject(obj));
                Assert.That(storage.GetObjectList().Count, Is.EqualTo(i));
                Assert.That(storage.GetObjectList().First(foo => foo.LocalPath == this.localFile.Object.FullName && foo.RemoteObjectId == "RemoteObjectId" + i.ToString()), Is.Not.Null);
            }

            storage.ClearObjectList();

            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));
        }
        public void RemoveObjectOnMultipleTimesForSameRemoteObjectId() {
            var storage = new FileTransmissionStorage(this.engine);

            this.remoteFile.Setup(m => m.Id).Returns("RemoteObjectId");
            var obj = new FileTransmissionObject(TransmissionType.UPLOAD_NEW_FILE, this.localFile.Object, this.remoteFile.Object);
            Assert.DoesNotThrow(() => storage.SaveObject(obj));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(1));

            for (int i = 1; i <= 10; ++i) {
                Assert.DoesNotThrow(() => storage.RemoveObjectByRemoteObjectId("RemoteObjectId"));
                Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));
            }
        }
        public void RemoveObjectOnMultipleTimes() {
            var storage = new FileTransmissionStorage(this.engine);

            for (int i = 1; i <= 10; ++i) {
                this.remoteFile.Setup(m => m.Id).Returns("RemoteObjectId" + i.ToString());
                var obj = new FileTransmissionObject(TransmissionType.UPLOAD_NEW_FILE, this.localFile.Object, this.remoteFile.Object);
                Assert.DoesNotThrow(() => storage.SaveObject(obj));
                Assert.That(storage.GetObjectList().Count, Is.EqualTo(i));
                Assert.That(storage.GetObjectList().First(foo => foo.LocalPath == this.localFile.Object.FullName && foo.RemoteObjectId == "RemoteObjectId" + i.ToString()), Is.Not.Null);
            }

            for (int i = 1; i <= 10; ++i) {
                Assert.DoesNotThrow(() => storage.RemoveObjectByRemoteObjectId("RemoteObjectId" + i.ToString()));
                Assert.That(storage.GetObjectList().Count, Is.EqualTo(10 - i));
                Assert.Throws<InvalidOperationException>(() => storage.GetObjectList().First(foo => foo.LocalPath == this.localFile.Object.FullName && foo.RemoteObjectId == "RemoteObjectId" + i.ToString()));
            }
        }
        public void RemoveObjectThrowsExceptionIfRemoteObjectIdIsInvalid() {
            var storage = new FileTransmissionStorage(this.engine);

            Assert.Throws<ArgumentNullException>(() => storage.RemoveObjectByRemoteObjectId(null));
            Assert.Throws<ArgumentException>(() => storage.RemoveObjectByRemoteObjectId(string.Empty));
            Assert.DoesNotThrow(() => storage.RemoveObjectByRemoteObjectId("RemoteObjectId"));
        }
        public void SaveObjectThrowsExceptionIfObjectIsInvalid() {
            var storage = new FileTransmissionStorage(this.engine);
            var obj = new Mock<IFileTransmissionObject>();

            // argument cannot be null
            Assert.Throws<ArgumentNullException>(() => storage.SaveObject(null));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));

            // IFileTransmissionObject.LocalPath cannot be null
            Assert.Throws<ArgumentNullException>(() => storage.SaveObject(obj.Object));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));

            // IFileTransmissionObject.LocalPath cannot be empty string
            obj.Setup(m => m.LocalPath).Returns(string.Empty);
            Assert.Throws<ArgumentException>(() => storage.SaveObject(obj.Object));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));

            // IFileTransmissionObject.RemoteObjectId cannot be null
            obj.Setup(m => m.LocalPath).Returns("/LocalPath");
            Assert.Throws<ArgumentNullException>(() => storage.SaveObject(obj.Object));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));

            // IFileTransmissionObject.RemoteObjectId cannot be empty string
            obj.Setup(m => m.RemoteObjectId).Returns(string.Empty);
            Assert.Throws<ArgumentException>(() => storage.SaveObject(obj.Object));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));

            // argument should be FileTransmissionObject 
            obj.Setup(m => m.RemoteObjectId).Returns("RemoteObjectId");
            Assert.Throws<ArgumentException>(() => storage.SaveObject(obj.Object));
            Assert.That(storage.GetObjectList().Count, Is.EqualTo(0));
        }