X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Fwangle%2Ftest%2FFutureTest.cpp;h=1ecca30ceda73e040316fd5ff62b27b2f8e7dad9;hb=809da17c47ed3a16a086b6cbface7499e9886b35;hp=8d1f95d3ce203fbda13641c188875f42ce4f656a;hpb=4c010707c5aeeae6300a2931dc02c0a14e2e141a;p=folly.git diff --git a/folly/wangle/test/FutureTest.cpp b/folly/wangle/test/FutureTest.cpp index 8d1f95d3..1ecca30c 100644 --- a/folly/wangle/test/FutureTest.cpp +++ b/folly/wangle/test/FutureTest.cpp @@ -28,6 +28,9 @@ #include #include +#include + +using namespace folly; using namespace folly::wangle; using std::pair; using std::string; @@ -908,3 +911,42 @@ TEST(Future, detachRace) { f.reset(); t1.join(); } + +class TestData : public RequestData { + public: + explicit TestData(int data) : data_(data) {} + virtual ~TestData() {} + int data_; +}; + +TEST(Future, context) { + + // Start a new context + RequestContext::create(); + + EXPECT_EQ(nullptr, RequestContext::get()->getContextData("test")); + + // Set some test data + RequestContext::get()->setContextData( + "test", + std::unique_ptr(new TestData(10))); + + // Start a future + Promise p; + auto future = p.getFuture().then([&]{ + // Check that the context followed the future + EXPECT_TRUE(RequestContext::get() != nullptr); + auto a = dynamic_cast( + RequestContext::get()->getContextData("test")); + auto data = a->data_; + EXPECT_EQ(10, data); + }); + + // Clear the context + RequestContext::setContext(nullptr); + + EXPECT_EQ(nullptr, RequestContext::get()->getContextData("test")); + + // Fulfil the promise + p.setValue(); +}