EXPECT_TRUE(nullptr != RequestContext::get());
}
-TEST(RequestContext, nonDefaultContextsAreThreadLocal) {
- RequestContext* ctx1 = nullptr;
- RequestContext* ctx2 = nullptr;
-
- std::vector<std::thread> ts;
- for (size_t i = 0; i < 2; ++i) {
- auto*& ctx = (i == 0 ? ctx1 : ctx2);
- ts.emplace_back([&ctx]() {
- RequestContext::create();
- ctx = RequestContext::get();
- });
- }
- for (auto& t : ts) {
- t.join();
- }
-
- EXPECT_NE(nullptr, ctx1);
- EXPECT_NE(nullptr, ctx2);
- EXPECT_NE(ctx1, ctx2);
-}
-
-TEST(RequestContext, customRequestContextProvider) {
- auto customContext = std::make_shared<RequestContext>();
- auto customProvider = [&customContext]() -> std::shared_ptr<RequestContext>& {
- return customContext;
- };
-
- auto* const originalContext = RequestContext::get();
- EXPECT_NE(nullptr, originalContext);
-
- // Install new RequestContext provider
- auto originalProvider =
- RequestContext::setRequestContextProvider(std::move(customProvider));
-
- auto* const newContext = RequestContext::get();
- EXPECT_EQ(customContext.get(), newContext);
- EXPECT_NE(originalContext, newContext);
-
- // Restore original RequestContext provider
- RequestContext::setRequestContextProvider(std::move(originalProvider));
- EXPECT_EQ(originalContext, RequestContext::get());
-}
-
TEST(RequestContext, setIfAbsentTest) {
EXPECT_TRUE(RequestContext::get() != nullptr);