Chunked uploader takes a file and splits the upload into chunks. Resuming a failed upload is possible.
Inheritance: SimpleFileUploader
        public void NormalUploadReplacesRemoteStreamIfRemoteStreamExists() {
            this.mockedDocument.Setup(doc => doc.ContentStreamId).Returns("StreamId");
            this.mockedDocument.Setup(doc => doc.DeleteContentStream(It.IsAny<bool>())).Callback(() => {
                if (this.remoteStream != null) {
                    this.remoteStream.Dispose();
                }

                this.remoteStream = new MemoryStream();
            }).Returns(this.mockedDocument.Object);

            this.remoteStream.WriteByte(1);

            using (IFileUploader uploader = new ChunkedUploader(this.chunkSize)) {
                uploader.UploadFile(this.mockedDocument.Object, this.localFileStream, this.transmission, this.hashAlg);
            }

            this.mockedDocument.Verify(doc => doc.DeleteContentStream(It.IsAny<bool>()), Times.Once());
            this.AssertThatLocalAndRemoteContentAreEqualToHash();
            Assert.AreEqual(1, this.lastChunk);
        }
 public void ContructorWorksWithoutInput() {
     using (var uploader = new ChunkedUploader()) {
         Assert.That(uploader.ChunkSize, Is.GreaterThan(0));
     }
 }
 public void IOExceptionOnUploadTest() {
     this.mockedDocument.Setup(doc => doc.AppendContentStream(It.IsAny<IContentStream>(), It.IsAny<bool>(), It.Is<bool>(b => b == true)))
         .Throws(new IOException());
     using (IFileUploader uploader = new ChunkedUploader(this.chunkSize)) {
         var e = Assert.Throws<UploadFailedException>(() => uploader.UploadFile(this.mockedDocument.Object, this.localFileStream, this.transmission, this.hashAlg));
         Assert.IsInstanceOf(typeof(UploadFailedException), e);
         Assert.IsInstanceOf(typeof(IOException), e.InnerException);
         Assert.AreEqual(this.mockedDocument.Object, ((UploadFailedException)e).LastSuccessfulDocument);
     }
 }
        public void ResumeUploadWithUtils() {
            double successfulUploadPart = 0.2;
            int successfulUploaded = (int)(this.fileLength * successfulUploadPart);
            double minPercent = 100 * successfulUploadPart;
            this.InitRemoteChunkWithSize(successfulUploaded);
            this.transmission.AddLengthConstraint(Is.GreaterThanOrEqualTo(successfulUploaded));
            this.transmission.AddPercentConstraint(Is.GreaterThanOrEqualTo(minPercent));
            this.transmission.AddPositionConstraint(Is.GreaterThanOrEqualTo(successfulUploaded));

            using (IFileUploader uploader = new ChunkedUploader(this.chunkSize)) {
                ContentTaskUtils.PrepareResume(successfulUploaded, this.localFileStream, this.hashAlg);
                uploader.UploadFile(this.mockedDocument.Object, this.localFileStream, this.transmission, this.hashAlg);
            }

            this.AssertThatLocalAndRemoteContentAreEqualToHash();
            Assert.AreEqual(1, this.lastChunk);
        }
        public void ResumeUpload() {
            double successfulUploadPart = 0.5;
            int successfulUploaded = (int)(this.fileLength * successfulUploadPart);
            double minPercent = 100 * successfulUploadPart;
            this.transmission.AddLengthConstraint(Is.Null.Or.GreaterThanOrEqualTo(successfulUploaded));
            this.transmission.AddPercentConstraint(Is.Null.Or.GreaterThanOrEqualTo(minPercent));
            this.transmission.AddPositionConstraint(Is.Null.Or.GreaterThanOrEqualTo(successfulUploaded));

            // Copy half of data before start uploading
            this.InitRemoteChunkWithSize(successfulUploaded);
            this.hashAlg.TransformBlock(this.localContent, 0, successfulUploaded, this.localContent, 0);
            this.localFileStream.Seek(successfulUploaded, SeekOrigin.Begin);

            using (IFileUploader uploader = new ChunkedUploader(this.chunkSize)) {
                uploader.UploadFile(this.mockedDocument.Object, this.localFileStream, this.transmission, this.hashAlg);
            }

            this.AssertThatLocalAndRemoteContentAreEqualToHash();
            Assert.AreEqual(1, this.lastChunk);
        }
        public void NormalUpload() {
            using (IFileUploader uploader = new ChunkedUploader(this.chunkSize)) {
                uploader.UploadFile(this.mockedDocument.Object, this.localFileStream, this.transmission, this.hashAlg);
            }

            this.AssertThatLocalAndRemoteContentAreEqualToHash();
            Assert.AreEqual(1, this.lastChunk);
        }
 public void ContructorWorksWithValidInput() {
     using (var uploader = new ChunkedUploader(this.chunkSize)) {
         Assert.That(uploader.ChunkSize, Is.EqualTo(this.chunkSize));
     }
 }