public void WillCopyMetadataFromSourceWherePresent()
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, SourceBlobName);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();
            sourceBlob.Metadata["thing"] = "something";
            sourceBlob.Properties.ContentType = "whatever";
            sourceBlob.SetMetadata();
            sourceBlob.SetProperties();

            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, DestinationBlobName);
            destinationBlob.StartCopyFromBlob(sourceBlob);
            destinationBlob.FetchAttributes();

            new
            {
                Metadata = new Dictionary<string, string>
                {
                    {"thing", "something"}
                },
                Properties = new
                {
                    ContentType = "whatever",
                    Length = (long) 12
                }
            }.ToExpectedObject().ShouldMatch(destinationBlob);
        }
        public void CopyStateIsSuccessAfterCopy()
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, SourceBlobName);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();

            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, DestinationBlobName);
            destinationBlob.StartCopyFromBlob(sourceBlob);
        }
        public void CanCopyBlob()
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, SourceBlobName);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();

            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, DestinationBlobName);
            destinationBlob.StartCopyFromBlob(sourceBlob);

            Assert.Equal("File content", File.ReadAllText(destinationBlob.Uri.LocalPath));
        }
        public void CanOverwriteBlob(string source, string destination)
        {
            var sourceBuffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, source);
            sourceBlob.UploadFromByteArrayAsync(sourceBuffer, 0, sourceBuffer.Length).Wait();

            var originalContentBuffer = Encoding.UTF8.GetBytes("Original content");
            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, destination);
            destinationBlob.UploadFromByteArrayAsync(originalContentBuffer, 0, originalContentBuffer.Length).Wait();
            destinationBlob.StartCopyFromBlob(sourceBlob.Uri);

            Assert.Equal("File content", File.ReadAllText(destinationBlob.Uri.LocalPath));
        }
        public void WillNotCopyMetadataWhereItDoesNotExist()
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, SourceBlobName);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();

            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, DestinationBlobName);
            destinationBlob.StartCopyFromBlob(sourceBlob);

            Assert.False(File.Exists(Path.Combine(BasePath, ".meta", DestinationBlobName)));
        }
        public void CopyStateIsFailedIfBlobLocked(string source, string destination)
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, source);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();

            using (new FileStream(sourceBlob.Uri.LocalPath, FileMode.Append, FileAccess.Write, FileShare.None))
            {
                var destinationBlob = new StandaloneAzureBlockBlob(BasePath, destination);
                destinationBlob.StartCopyFromBlob(sourceBlob.Uri);

                new
                {
                    Status = CopyStatus.Failed,
                    StatusDescription = new NotNullComparison()
                }.ToExpectedObject().ShouldMatch(destinationBlob.CopyState);
            }
        }
        public void WillRemoveExistingMetadataWhereSourceDoesNotHaveMetadata(string source, string destination)
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, source);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();

            var originalContentBuffer = Encoding.UTF8.GetBytes("Original content");
            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, destination);
            destinationBlob.UploadFromByteArrayAsync(originalContentBuffer, 0, originalContentBuffer.Length).Wait();
            destinationBlob.Metadata["thing"] = "other thing";
            destinationBlob.SetMetadata();
            destinationBlob.StartCopyFromBlob(sourceBlob.Uri);

            Assert.False(File.Exists(Path.Combine(BasePath, ".meta", destination)));
        }
        public void CopyStateIsSuccessAfterCopy(string source, string destination)
        {
            var buffer = Encoding.UTF8.GetBytes("File content");
            var sourceBlob = new StandaloneAzureBlockBlob(BasePath, source);
            sourceBlob.UploadFromByteArrayAsync(buffer, 0, buffer.Length).Wait();

            var destinationBlob = new StandaloneAzureBlockBlob(BasePath, destination);
            destinationBlob.StartCopyFromBlob(sourceBlob.Uri);

            Assert.Equal(CopyStatus.Success, destinationBlob.CopyState.Status);
        }