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(); } } }
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]); } }
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]); } }
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(); } }
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(); } }
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]); } }
// 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(); } } }
// 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(); } } }
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(); } } }