Exemple #1
0
        public void put_blob()
        {
            var containerName = Guid.NewGuid().ToString();
            var blobKey       = Guid.NewGuid().ToString();

            using (var client = new RavenAzureClient(GenerateAzureSettings(containerName)))
            {
                try
                {
                    client.DeleteContainer();
                    client.PutContainer();

                    client.PutBlob(blobKey, new MemoryStream(Encoding.UTF8.GetBytes("123")), new Dictionary <string, string>
                    {
                        { "property1", "value1" },
                        { "property2", "value2" }
                    });
                    var blob = client.GetBlob(blobKey);
                    Assert.NotNull(blob);

                    using (var reader = new StreamReader(blob.Data))
                        Assert.Equal("123", reader.ReadToEnd());

                    var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                    var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));

                    Assert.Equal("value1", blob.Metadata[property1]);
                    Assert.Equal("value2", blob.Metadata[property2]);
                }
                finally
                {
                    client.DeleteContainer();
                }
            }
        }
Exemple #2
0
        public void PutBlob()
        {
            var containerName = "testContainer";
            var blobKey       = "testKey";

            using (var client = new RavenAzureClient("devstoreaccount1", "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="))
            {
                client.PutContainer(containerName);
                client.PutBlob(containerName, blobKey, new MemoryStream(Encoding.UTF8.GetBytes("123")), new Dictionary <string, string>
                {
                    { "property1", "value1" },
                    { "property2", "value2" }
                });
                var blob = client.GetBlob(containerName, blobKey);
                Assert.NotNull(blob);

                using (var reader = new StreamReader(blob.Data))
                    Assert.Equal("123", reader.ReadToEnd());

                var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));

                Assert.Equal("value1", blob.Metadata[property1]);
                Assert.Equal("value2", blob.Metadata[property2]);
            }
        }
Exemple #3
0
        public async Task PutBlobIntoFolder()
        {
            var containerName = "testContainer";
            var blobKey       = "folder1/folder2/testKey";

            using (var client = new RavenAzureClient(AzureAccountName, AzureAccountKey, containerName, isTest: true))
            {
                await client.PutContainer();

                await client.PutBlob(blobKey, new MemoryStream(Encoding.UTF8.GetBytes("123")), new Dictionary <string, string>
                {
                    { "property1", "value1" },
                    { "property2", "value2" }
                });

                var blob = await client.GetBlob(blobKey);

                Assert.NotNull(blob);

                using (var reader = new StreamReader(blob.Data))
                    Assert.Equal("123", reader.ReadToEnd());

                var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));

                Assert.Equal("value1", blob.Metadata[property1]);
                Assert.Equal("value2", blob.Metadata[property2]);
            }
        }
Exemple #4
0
        public void CanRemoveBlobsInBatch()
        {
            var containerName = Guid.NewGuid().ToString();
            var blobKey       = Guid.NewGuid().ToString();

            using var client = new RavenAzureClient(GetAzureSettings(containerName));
            var blobs = new List <string>();

            try
            {
                client.DeleteContainer();
                client.PutContainer();

                for (int i = 0; i < 10; i++)
                {
                    var key    = $"{blobKey}/northwind_{i}.ravendump";
                    var tmpArr = new byte[3];
                    new Random().NextBytes(tmpArr);
                    client.PutBlob(key, new MemoryStream(tmpArr), new Dictionary <string, string> {
                        { $"property_{i}", $"value_{i}" }
                    });

                    var blob = client.GetBlob(key);
                    Assert.NotNull(blob);

                    blobs.Add(key);
                }

                client.DeleteMultipleBlobs(blobs);
            }
            finally
            {
                client.DeleteContainer();
            }
        }
Exemple #5
0
        public void RemoveNonExistingBlobsInBatchShouldThrow()
        {
            var containerName = Guid.NewGuid().ToString();
            var blobKey       = Guid.NewGuid().ToString();

            using var client = new RavenAzureClient(GenerateAzureSettings(containerName));
            var blobs = new List <string>();

            try
            {
                client.DeleteContainer();
                client.PutContainer();

                // put blob
                var k      = $"{blobKey}/northwind_322.ravendump";
                var tmpArr = new byte[3];
                new Random().NextBytes(tmpArr);
                client.PutBlob(k, new MemoryStream(tmpArr), new Dictionary <string, string>
                {
                    { "Nice", "NotNice" }
                });

                var blob = client.GetBlob(k);
                Assert.NotNull(blob);
                blobs.Add(k);

                for (int i = 0; i < 10; i++)
                {
                    blobs.Add($"{blobKey}/northwind_{i}.ravendump");
                }

                try
                {
                    client.DeleteMultipleBlobs(blobs);
                }
                catch (Exception e)
                {
                    Assert.Equal(typeof(InvalidOperationException), e.GetType());
                    Assert.True(e.Message.StartsWith($"Failed to delete {blobs.Count - 1} blobs from container: {containerName}. Successfully deleted 1 blob. Reason: The specified blob does not exist."));
                }
            }
            finally
            {
                client.DeleteContainer();
            }
        }
Exemple #6
0
        public async Task put_blob_100MB()
        {
            var containerName = "testContainer";
            var blobKey       = "testKey";

            using (var client = new RavenAzureClient(AzureAccountName, AzureAccountKey, containerName, isTest: true))
            {
                await client.PutContainer();

                var sb = new StringBuilder();
                for (var i = 0; i < 100 * 1024 * 1024; i++)
                {
                    sb.Append("a");
                }

                await client.PutBlob(blobKey, new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())),
                                     new Dictionary <string, string>
                {
                    { "property1", "value1" },
                    { "property2", "value2" },
                    { "property3", "value3" }
                });

                var blob = await client.GetBlob(blobKey);

                Assert.NotNull(blob);

                using (var reader = new StreamReader(blob.Data))
                    Assert.Equal(sb.ToString(), reader.ReadToEnd());

                var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));
                var property3 = blob.Metadata.Keys.Single(x => x.Contains("property3"));

                Assert.Equal("value1", blob.Metadata[property1]);
                Assert.Equal("value2", blob.Metadata[property2]);
                Assert.Equal("value3", blob.Metadata[property3]);
            }
        }
Exemple #7
0
        // ReSharper disable once InconsistentNaming
        private async Task PutBlob(int sizeInMB, bool testBlobKeyAsFolder, UploadType uploadType)
        {
            var containerName = Guid.NewGuid().ToString();
            var blobKey       = testBlobKeyAsFolder == false?
                                Guid.NewGuid().ToString() :
                                    $"{Guid.NewGuid()}/folder/testKey";

            var uploadProgress = new UploadProgress();

            using (var client = new RavenAzureClient(AzureAccountName, AzureAccountKey, containerName, uploadProgress, isTest: true))
            {
                try
                {
                    await client.DeleteContainer();

                    await client.PutContainer();

                    var sb = new StringBuilder();
                    for (var i = 0; i < sizeInMB * 1024 * 1024; i++)
                    {
                        sb.Append("a");
                    }

                    var value1 = Guid.NewGuid().ToString();
                    var value2 = Guid.NewGuid().ToString();
                    var value3 = Guid.NewGuid().ToString();

                    long streamLength;
                    using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())))
                    {
                        streamLength = memoryStream.Length;
                        await client.PutBlob(blobKey, memoryStream,
                                             new Dictionary <string, string>
                        {
                            { "property1", value1 },
                            { "property2", value2 },
                            { "property3", value3 }
                        });
                    }

                    var blob = await client.GetBlob(blobKey);

                    Assert.NotNull(blob);

                    using (var reader = new StreamReader(blob.Data))
                        Assert.Equal(sb.ToString(), reader.ReadToEnd());

                    var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                    var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));
                    var property3 = blob.Metadata.Keys.Single(x => x.Contains("property3"));

                    Assert.Equal(value1, blob.Metadata[property1]);
                    Assert.Equal(value2, blob.Metadata[property2]);
                    Assert.Equal(value3, blob.Metadata[property3]);

                    Assert.Equal(UploadState.Done, uploadProgress.UploadState);
                    Assert.Equal(uploadType, uploadProgress.UploadType);
                    Assert.Equal(streamLength, uploadProgress.TotalInBytes);
                    Assert.Equal(streamLength, uploadProgress.UploadedInBytes);
                }
                finally
                {
                    await client.DeleteContainer();
                }
            }
        }
Exemple #8
0
        // ReSharper disable once InconsistentNaming
        private async Task PutBlob(int sizeInMB, bool testBlobKeyAsFolder, UploadType uploadType)
        {
            var containerName = Guid.NewGuid().ToString();
            var blobKey       = testBlobKeyAsFolder == false?
                                Guid.NewGuid().ToString() :
                                    $"{Guid.NewGuid()}/folder/testKey";

            var progress = new Progress();

            using (var client = new RavenAzureClient(AzureAccountName, AzureAccountKey, containerName, progress, isTest: true))
            {
                try
                {
                    await client.DeleteContainer();

                    await client.PutContainer();

                    var path     = NewDataPath(forceCreateDir: true);
                    var filePath = Path.Combine(path, Guid.NewGuid().ToString());

                    var sizeMb   = new Size(sizeInMB, SizeUnit.Megabytes);
                    var size64Kb = new Size(64, SizeUnit.Kilobytes);

                    var buffer = Enumerable.Range(0, (int)size64Kb.GetValue(SizeUnit.Bytes))
                                 .Select(x => (byte)'a')
                                 .ToArray();

                    using (var file = File.Open(filePath, FileMode.CreateNew))
                    {
                        for (var i = 0; i < sizeMb.GetValue(SizeUnit.Bytes) / buffer.Length; i++)
                        {
                            file.Write(buffer, 0, buffer.Length);
                        }
                    }

                    var value1 = Guid.NewGuid().ToString();
                    var value2 = Guid.NewGuid().ToString();
                    var value3 = Guid.NewGuid().ToString();

                    long streamLength;
                    using (var file = File.Open(filePath, FileMode.Open))
                    {
                        streamLength = file.Length;
                        await client.PutBlob(blobKey, file,
                                             new Dictionary <string, string>
                        {
                            { "property1", value1 },
                            { "property2", value2 },
                            { "property3", value3 }
                        });
                    }

                    var blob = await client.GetBlob(blobKey);

                    Assert.NotNull(blob);

                    using (var reader = new StreamReader(blob.Data))
                    {
                        var readBuffer = new char[buffer.Length];

                        long read, totalRead = 0;
                        while ((read = await reader.ReadAsync(readBuffer, 0, readBuffer.Length)) > 0)
                        {
                            for (var i = 0; i < read; i++)
                            {
                                Assert.Equal(buffer[i], (byte)readBuffer[i]);
                            }

                            totalRead += read;
                        }

                        Assert.Equal(streamLength, totalRead);
                    }

                    var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                    var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));
                    var property3 = blob.Metadata.Keys.Single(x => x.Contains("property3"));

                    Assert.Equal(value1, blob.Metadata[property1]);
                    Assert.Equal(value2, blob.Metadata[property2]);
                    Assert.Equal(value3, blob.Metadata[property3]);

                    Assert.Equal(UploadState.Done, progress.UploadProgress.UploadState);
                    Assert.Equal(uploadType, progress.UploadProgress.UploadType);
                    Assert.Equal(streamLength, progress.UploadProgress.TotalInBytes);
                    Assert.Equal(streamLength, progress.UploadProgress.UploadedInBytes);
                }
                finally
                {
                    await client.DeleteContainer();
                }
            }
        }
Exemple #9
0
        private static void PutBlobs(int blobsCount, bool useSasToken)
        {
            var containerName  = Guid.NewGuid().ToString();
            var blobNamesToPut = new List <string>();

            for (var i = 0; i < blobsCount; i++)
            {
                blobNamesToPut.Add($"azure/{Guid.NewGuid()}/{i}");
            }

            var sasToken = useSasToken ? GetSasTokenAndCreateTheContainer(containerName) : null;

            using (var client = new RavenAzureClient(GetAzureSettings(containerName, sasToken)))
            {
                try
                {
                    if (useSasToken == false)
                    {
                        client.DeleteContainer();
                        client.PutContainer();
                    }

                    for (var i = 0; i < blobsCount; i++)
                    {
                        client.PutBlob(blobNamesToPut[i], new MemoryStream(Encoding.UTF8.GetBytes("123")),
                                       new Dictionary <string, string> {
                            { "property1", "value1" }, { "property2", "value2" }
                        });
                    }

                    for (var i = 0; i < blobsCount; i++)
                    {
                        var blob = client.GetBlob(blobNamesToPut[i]);
                        Assert.NotNull(blob);

                        using (var reader = new StreamReader(blob.Data))
                            Assert.Equal("123", reader.ReadToEnd());

                        var property1 = blob.Metadata.Keys.Single(x => x.Contains("property1"));
                        var property2 = blob.Metadata.Keys.Single(x => x.Contains("property2"));

                        Assert.Equal("value1", blob.Metadata[property1]);
                        Assert.Equal("value2", blob.Metadata[property2]);
                    }

                    var listBlobs = client.ListBlobs("azure", null, listFolders: false);
                    var blobNames = listBlobs.List.Select(b => b.Name).ToList();
                    Assert.Equal(blobsCount, blobNames.Count);

                    // delete all blobs
                    client.DeleteMultipleBlobs(blobNames);

                    listBlobs = client.ListBlobs("azure", null, listFolders: false);
                    blobNames = listBlobs.List.Select(b => b.Name).ToList();
                    Assert.Equal(0, blobNames.Count);

                    for (var i = 0; i < blobsCount; i++)
                    {
                        var blob = client.GetBlob(blobNamesToPut[i]);
                        Assert.Null(blob);
                    }
                }
                finally
                {
                    client.DeleteContainer();
                }
            }
        }