Fix context for unique (#1796)

* fix for Context to support unique ptr
This commit is contained in:
Victor Vazquez 2021-03-06 00:09:04 +00:00 committed by GitHub
parent 11a533a6fd
commit 401dbfe448
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 6 deletions

View File

@ -38,6 +38,7 @@
### Bug Fixes
- Make sure to rewind the body stream at the start of each request retry attempt, including the first.
- Fix `Azure::Context` to support unique_ptr.
## 1.0.0-beta.6 (2021-02-09)

View File

@ -126,7 +126,12 @@ namespace Azure { namespace Core {
*
* @param p Smart pointer to #Azure::Core::ValueBase.
*/
ContextValue(std::unique_ptr<ValueBase>&& p) noexcept
template <
class DerivedFromValueBase,
typename std::
enable_if<std::is_convertible<DerivedFromValueBase*, ValueBase*>::value, int>::type
= 0>
ContextValue(std::unique_ptr<DerivedFromValueBase>&& p)
: m_contextValueType(ContextValueType::UniquePtr), m_p(std::move(p))
{
}

View File

@ -253,3 +253,19 @@ TEST(Context, MatchingKeys)
value = valueT3.Get<int>();
EXPECT_TRUE(value == 456);
}
struct SomeStructForContext : ValueBase
{
bool someField = false;
};
TEST(Context, UniquePtr)
{
auto contextP
= GetApplicationContext().WithValue("bool", std::make_unique<SomeStructForContext>());
auto& contextValueRef = contextP["bool"].Get<std::unique_ptr<ValueBase>>();
SomeStructForContext* pointerToStruct{static_cast<SomeStructForContext*>(contextValueRef.get())};
EXPECT_FALSE(pointerToStruct->someField);
pointerToStruct->someField = true;
EXPECT_TRUE(pointerToStruct->someField);
}

View File

@ -57,10 +57,10 @@ namespace Azure { namespace Perf { namespace Test {
void Run(Azure::Core::Context const& ctx) override
{
Azure::Core::Http::Request request(Azure::Core::Http::HttpMethod::Get, m_url);
auto response = Details::HttpClient->Send(ctx, request);
auto response = Details::HttpClient->Send(request, ctx);
// Read the body from network
auto bodyStream = response->GetBodyStream();
response->SetBody(Azure::IO::BodyStream::ReadToEnd(ctx, *bodyStream));
response->SetBody(Azure::IO::BodyStream::ReadToEnd(*bodyStream, ctx));
}
/**

View File

@ -38,9 +38,6 @@ using namespace Azure::Security::KeyVault::Keys;
int main()
{
Azure::Core::Logging::SetLogListener(
[](auto, std::string const& message) { std::cout << message << std::endl; });
auto tenantId = std::getenv("AZURE_KEYVAULT_TENANT_ID");
auto clientId = std::getenv("AZURE_KEYVAULT_CLIENT_ID");
auto clientSecret = std::getenv("AZURE_KEYVAULT_CLIENT_SECRET");