Commit a18f2c01 authored by Mirek Klimos's avatar Mirek Klimos Committed by Facebook Github Bot 0

Replace RequestContext::create with RequestContextScopeGuard in tests

Summary: RequestContextScopeGuard should be preferred to RequestContext::create because it makes sure that RequestContext is cleared afterwards - need to create more examples of this in the codebase, migrating unit tests should be safe

Reviewed By: interwq

Differential Revision: D3489969

fbshipit-source-id: 202fec93116db3d435c108fafecad26a4ed9b603
parent 12c01784
...@@ -1267,79 +1267,86 @@ TEST(FiberManager, RequestContext) { ...@@ -1267,79 +1267,86 @@ TEST(FiberManager, RequestContext) {
folly::fibers::Baton baton3; folly::fibers::Baton baton3;
folly::fibers::Baton baton4; folly::fibers::Baton baton4;
folly::RequestContext::create(); {
auto rcontext1 = folly::RequestContext::get(); folly::RequestContextScopeGuard rctx;
fm.addTask([&]() { auto rcontext1 = folly::RequestContext::get();
EXPECT_EQ(rcontext1, folly::RequestContext::get()); fm.addTask([&]() {
baton1.wait([&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); }); EXPECT_EQ(rcontext1, folly::RequestContext::get());
EXPECT_EQ(rcontext1, folly::RequestContext::get()); baton1.wait(
runInMainContext( [&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); });
[&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); }); EXPECT_EQ(rcontext1, folly::RequestContext::get());
checkRun1 = true; runInMainContext(
}); [&]() { EXPECT_EQ(rcontext1, folly::RequestContext::get()); });
checkRun1 = true;
folly::RequestContext::create(); });
auto rcontext2 = folly::RequestContext::get(); }
fm.addTaskRemote([&]() { {
EXPECT_EQ(rcontext2, folly::RequestContext::get()); folly::RequestContextScopeGuard rctx;
baton2.wait(); auto rcontext2 = folly::RequestContext::get();
EXPECT_EQ(rcontext2, folly::RequestContext::get()); fm.addTaskRemote([&]() {
checkRun2 = true; EXPECT_EQ(rcontext2, folly::RequestContext::get());
}); baton2.wait();
EXPECT_EQ(rcontext2, folly::RequestContext::get());
folly::RequestContext::create(); checkRun2 = true;
auto rcontext3 = folly::RequestContext::get(); });
fm.addTaskFinally( }
[&]() { {
EXPECT_EQ(rcontext3, folly::RequestContext::get()); folly::RequestContextScopeGuard rctx;
baton3.wait(); auto rcontext3 = folly::RequestContext::get();
EXPECT_EQ(rcontext3, folly::RequestContext::get()); fm.addTaskFinally(
[&]() {
return folly::Unit(); EXPECT_EQ(rcontext3, folly::RequestContext::get());
}, baton3.wait();
[&](Try<folly::Unit>&& /* t */) { EXPECT_EQ(rcontext3, folly::RequestContext::get());
EXPECT_EQ(rcontext3, folly::RequestContext::get());
checkRun3 = true; return folly::Unit();
}); },
[&](Try<folly::Unit>&& /* t */) {
folly::RequestContext::setContext(nullptr); EXPECT_EQ(rcontext3, folly::RequestContext::get());
fm.addTask([&]() { checkRun3 = true;
folly::RequestContext::create(); });
auto rcontext4 = folly::RequestContext::get(); }
baton4.wait(); {
EXPECT_EQ(rcontext4, folly::RequestContext::get()); folly::RequestContext::setContext(nullptr);
checkRun4 = true; fm.addTask([&]() {
}); folly::RequestContextScopeGuard rctx;
auto rcontext4 = folly::RequestContext::get();
folly::RequestContext::create(); baton4.wait();
auto rcontext = folly::RequestContext::get(); EXPECT_EQ(rcontext4, folly::RequestContext::get());
checkRun4 = true;
});
}
{
folly::RequestContextScopeGuard rctx;
auto rcontext = folly::RequestContext::get();
fm.loopUntilNoReady(); fm.loopUntilNoReady();
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
baton1.post(); baton1.post();
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
fm.loopUntilNoReady(); fm.loopUntilNoReady();
EXPECT_TRUE(checkRun1); EXPECT_TRUE(checkRun1);
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
baton2.post(); baton2.post();
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
fm.loopUntilNoReady(); fm.loopUntilNoReady();
EXPECT_TRUE(checkRun2); EXPECT_TRUE(checkRun2);
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
baton3.post(); baton3.post();
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
fm.loopUntilNoReady(); fm.loopUntilNoReady();
EXPECT_TRUE(checkRun3); EXPECT_TRUE(checkRun3);
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
baton4.post(); baton4.post();
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
fm.loopUntilNoReady(); fm.loopUntilNoReady();
EXPECT_TRUE(checkRun4); EXPECT_TRUE(checkRun4);
EXPECT_EQ(rcontext, folly::RequestContext::get()); EXPECT_EQ(rcontext, folly::RequestContext::get());
}
} }
TEST(FiberManager, resizePeriodically) { TEST(FiberManager, resizePeriodically) {
......
...@@ -30,7 +30,7 @@ class TestData : public RequestData { ...@@ -30,7 +30,7 @@ class TestData : public RequestData {
TEST(Context, basic) { TEST(Context, basic) {
// Start a new context // Start a new context
RequestContext::create(); folly::RequestContextScopeGuard rctx;
EXPECT_EQ(nullptr, RequestContext::get()->getContextData("test")); EXPECT_EQ(nullptr, RequestContext::get()->getContextData("test"));
......
...@@ -822,30 +822,32 @@ TEST(Future, RequestContext) { ...@@ -822,30 +822,32 @@ TEST(Future, RequestContext) {
bool value; bool value;
}; };
NewThreadExecutor e; Promise<int> p1, p2;
RequestContext::create(); {
RequestContext::get()->setContextData("key", NewThreadExecutor e;
folly::make_unique<MyRequestData>(true)); folly::RequestContextScopeGuard rctx;
auto checker = [](int lineno) { RequestContext::get()->setContextData(
return [lineno](Try<int>&& /* t */) { "key", folly::make_unique<MyRequestData>(true));
auto d = static_cast<MyRequestData*>( auto checker = [](int lineno) {
RequestContext::get()->getContextData("key")); return [lineno](Try<int>&& /* t */) {
EXPECT_TRUE(d && d->value) << "on line " << lineno; auto d = static_cast<MyRequestData*>(
RequestContext::get()->getContextData("key"));
EXPECT_TRUE(d && d->value) << "on line " << lineno;
};
}; };
};
makeFuture(1).via(&e).then(checker(__LINE__)); makeFuture(1).via(&e).then(checker(__LINE__));
e.setHandlesPriorities(); e.setHandlesPriorities();
makeFuture(2).via(&e).then(checker(__LINE__)); makeFuture(2).via(&e).then(checker(__LINE__));
Promise<int> p1, p2; p1.getFuture().then(checker(__LINE__));
p1.getFuture().then(checker(__LINE__));
e.setThrowsOnAdd();
p2.getFuture().via(&e).then(checker(__LINE__));
RequestContext::create(); e.setThrowsOnAdd();
p2.getFuture().via(&e).then(checker(__LINE__));
}
// Assert that no RequestContext is set
EXPECT_FALSE(RequestContext::saveContext());
p1.setValue(3); p1.setValue(3);
p2.setValue(4); p2.setValue(4);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment