azure-sdk-for-cpp/sdk/storage/test/append_blob_client_test.cpp
JinmingHu f74011a2e0
Add Unittest for Blob Service, other fixes and enhancements found during validation (#181)
* Give AccessTier a default value to eliminate warning

* Add blob clients conversion functions

* Fix bug in shared key authentication

* Add GetUri().

* make lease-status and lease-state optional

* Check duplicates in metadata

* add tests for blob service

* AppendBlocb doesn't support AccessTier

* fix bug in "RangeFromXml"

* redefine PageRange in convenience layer

* suppress warnings from gtest

* add API AppendBlockFromUri

* connection string parsing

* Add memorystream

* Rename connection string constants

* Adapt to new bodystream, this will be rewritten when bosystream is changed to unique_ptr

* fix compiler errors

* Change MemoryStream interface

* samples framework

* Add newline at the end of file

* fix compiler error
2020-06-24 01:17:09 -07:00

83 lines
3.8 KiB
C++

// Copyright (c) Microsoft Corporation. All rights reserved.
// SPDX-License-Identifier: MIT
#include "append_blob_client_test.hpp"
namespace Azure { namespace Storage { namespace Test {
std::shared_ptr<Azure::Storage::Blobs::AppendBlobClient> AppendBlobClientTest::m_appendBlobClient;
std::string AppendBlobClientTest::m_blobName;
Azure::Storage::Blobs::CreateAppendBlobOptions AppendBlobClientTest::m_blobUploadOptions;
std::vector<uint8_t> AppendBlobClientTest::m_blobContent;
void AppendBlobClientTest::SetUpTestSuite()
{
BlobContainerClientTest::SetUpTestSuite();
m_blobName = RandomString();
auto appendBlobClient = Azure::Storage::Blobs::AppendBlobClient::CreateFromConnectionString(
StandardStorageConnectionString(), m_containerName, m_blobName);
m_appendBlobClient
= std::make_shared<Azure::Storage::Blobs::AppendBlobClient>(std::move(appendBlobClient));
m_blobContent.resize(100);
RandomBuffer(reinterpret_cast<char*>(&m_blobContent[0]), m_blobContent.size());
m_blobUploadOptions.Metadata = {{"key1", "V1"}, {"KEY2", "Value2"}};
m_blobUploadOptions.Properties.ContentType = "application/x-binary";
m_blobUploadOptions.Properties.ContentLanguage = "en-US";
m_blobUploadOptions.Properties.ContentDisposition = "attachment";
m_blobUploadOptions.Properties.CacheControl = "no-cache";
m_blobUploadOptions.Properties.ContentEncoding = "identify";
m_blobUploadOptions.Properties.ContentMD5 = "";
m_appendBlobClient->Create(m_blobUploadOptions);
m_appendBlobClient->AppendBlock(
new Azure::Storage::MemoryStream(m_blobContent.data(), m_blobContent.size()));
m_blobUploadOptions.Properties.ContentMD5 = m_appendBlobClient->GetProperties().ContentMD5;
}
void AppendBlobClientTest::TearDownTestSuite() { BlobContainerClientTest::TearDownTestSuite(); }
TEST_F(AppendBlobClientTest, CreateAppendDelete)
{
auto appendBlobClient = Azure::Storage::Blobs::AppendBlobClient::CreateFromConnectionString(
StandardStorageConnectionString(), m_containerName, RandomString());
appendBlobClient.Create(m_blobUploadOptions);
auto properties = appendBlobClient.GetProperties();
EXPECT_EQ(properties.CommittedBlockCount, 0);
EXPECT_EQ(properties.ContentLength, 0);
appendBlobClient.AppendBlock(
new Azure::Storage::MemoryStream(m_blobContent.data(), m_blobContent.size()));
properties = appendBlobClient.GetProperties();
EXPECT_EQ(properties.CommittedBlockCount, 1);
EXPECT_EQ(properties.ContentLength, m_blobContent.size());
Azure::Storage::Blobs::AppendBlockOptions options;
options.AppendPosition = 1_MB;
EXPECT_THROW(
appendBlobClient.AppendBlock(
new Azure::Storage::MemoryStream(m_blobContent.data(), m_blobContent.size()), options),
std::runtime_error);
options.AppendPosition = properties.ContentLength;
appendBlobClient.AppendBlock(
new Azure::Storage::MemoryStream(m_blobContent.data(), m_blobContent.size()), options);
properties = appendBlobClient.GetProperties();
options = Azure::Storage::Blobs::AppendBlockOptions();
options.MaxSize = properties.ContentLength + m_blobContent.size() - 1;
EXPECT_THROW(
appendBlobClient.AppendBlock(
new Azure::Storage::MemoryStream(m_blobContent.data(), m_blobContent.size()), options),
std::runtime_error);
options.MaxSize = properties.ContentLength + m_blobContent.size();
appendBlobClient.AppendBlock(
new Azure::Storage::MemoryStream(m_blobContent.data(), m_blobContent.size()), options);
// TODO: AppendBlockFromUri must be authorized with SAS, but we don't have SAS for now.
appendBlobClient.Delete();
EXPECT_THROW(appendBlobClient.Delete(), std::runtime_error);
}
}}} // namespace Azure::Storage::Test