azure-sdk-for-cpp/sdk/storage/test/append_blob_client_test.cpp
JinmingHu 74ce80659b
Documentation for Storage Blob Service, Nullable, signed int, and others (#213)
* use Nullable

* use C++ style cast

* Add documentation

* use signed int instead of unsigned

* disable storage ut

* add timeout in protocol layer

* enable stroage ut

* undelete test case

* Support copy status in properties

* Remove default value for SequenceNumber in CreatePageBlobOptions
2020-06-30 03:03:42 -07:00

86 lines
3.9 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(
Azure::Storage::CreateMemoryStream(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_TRUE(properties.CommittedBlockCount.HasValue());
EXPECT_EQ(properties.CommittedBlockCount.GetValue(), 0);
EXPECT_EQ(properties.ContentLength, 0);
appendBlobClient.AppendBlock(
Azure::Storage::CreateMemoryStream(m_blobContent.data(), m_blobContent.size()));
properties = appendBlobClient.GetProperties();
EXPECT_EQ(properties.CommittedBlockCount.GetValue(), 1);
EXPECT_EQ(properties.ContentLength, static_cast<int64_t>(m_blobContent.size()));
Azure::Storage::Blobs::AppendBlockOptions options;
options.AppendPosition = 1_MB;
EXPECT_THROW(
appendBlobClient.AppendBlock(
Azure::Storage::CreateMemoryStream(m_blobContent.data(), m_blobContent.size()),
options),
std::runtime_error);
options.AppendPosition = properties.ContentLength;
appendBlobClient.AppendBlock(
Azure::Storage::CreateMemoryStream(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(
Azure::Storage::CreateMemoryStream(m_blobContent.data(), m_blobContent.size()),
options),
std::runtime_error);
options.MaxSize = properties.ContentLength + m_blobContent.size();
appendBlobClient.AppendBlock(
Azure::Storage::CreateMemoryStream(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