Nursery: Initial integration
StimulusProducer: syncAwaitAllSettlements should pump caller io_context
This commit is contained in:
@@ -139,7 +139,9 @@ TEST_F(NonViralTaskNurseryTest, SetOnSettledHookRejectsAfterFillSlot)
|
||||
lease.getCallerLambda());
|
||||
});
|
||||
|
||||
EXPECT_THROW(lease.setOnSettledHook([]() {}), std::runtime_error);
|
||||
EXPECT_THROW(
|
||||
lease.setOnSettledHook([](std::exception_ptr &) {}),
|
||||
std::runtime_error);
|
||||
lease.commit();
|
||||
}
|
||||
|
||||
@@ -322,6 +324,26 @@ TEST_F(NonViralTaskNurseryTest, LaunchSugar)
|
||||
EXPECT_TRUE(nursery.allSettled());
|
||||
}
|
||||
|
||||
TEST_F(NonViralTaskNurseryTest, LaunchWithOnSettledHook)
|
||||
{
|
||||
std::atomic<bool> hookRan{false};
|
||||
|
||||
nursery.launch(
|
||||
[](sscl::co::NonViralTaskNursery::Slot::Lease &lease)
|
||||
{
|
||||
return immediateCompleteCReq(
|
||||
lease.getExceptionStorage(),
|
||||
lease.getCallerLambda());
|
||||
},
|
||||
[&hookRan](std::exception_ptr &)
|
||||
{
|
||||
hookRan.store(true, std::memory_order_release);
|
||||
});
|
||||
|
||||
EXPECT_TRUE(hookRan.load(std::memory_order_acquire));
|
||||
EXPECT_TRUE(nursery.allSettled());
|
||||
}
|
||||
|
||||
TEST_F(NonViralTaskNurseryTest, HandleStability)
|
||||
{
|
||||
auto handle = nursery.launch(
|
||||
@@ -520,7 +542,7 @@ TEST_F(NonViralTaskNurseryTest, OnSettledHookRunsAtRetirement)
|
||||
|
||||
auto lease = nursery.getNewSlotLease();
|
||||
lease.setOnSettledHook(
|
||||
[&hookRan]()
|
||||
[&hookRan](std::exception_ptr &)
|
||||
{
|
||||
hookRan.store(true, std::memory_order_release);
|
||||
});
|
||||
@@ -536,13 +558,14 @@ TEST_F(NonViralTaskNurseryTest, OnSettledHookRunsAtRetirement)
|
||||
EXPECT_TRUE(hookRan.load(std::memory_order_acquire));
|
||||
}
|
||||
|
||||
TEST_F(NonViralTaskNurseryTest, OnSettledHookExceptionStillRetiresSlot)
|
||||
TEST_F(NonViralTaskNurseryTest, OnSettledHookSeesRetiredSlot)
|
||||
{
|
||||
auto lease = nursery.getNewSlotLease();
|
||||
lease.setOnSettledHook(
|
||||
[]()
|
||||
[this](std::exception_ptr &)
|
||||
{
|
||||
throw std::runtime_error("onSettled hook failure");
|
||||
EXPECT_TRUE(nursery.allSettled());
|
||||
EXPECT_EQ(nursery.unsettledCount(), 0U);
|
||||
});
|
||||
lease.fillSlot(
|
||||
[&lease]()
|
||||
@@ -552,9 +575,6 @@ TEST_F(NonViralTaskNurseryTest, OnSettledHookExceptionStillRetiresSlot)
|
||||
lease.getCallerLambda());
|
||||
});
|
||||
lease.commit();
|
||||
|
||||
EXPECT_TRUE(nursery.allSettled());
|
||||
EXPECT_EQ(nursery.unsettledCount(), 0U);
|
||||
}
|
||||
|
||||
TEST_F(NonViralTaskNurseryTest, DuplicateRetireThrows)
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
}
|
||||
|
||||
void awaken(bool forceAwaken = false) override {
|
||||
(void)forceAwaken;
|
||||
awakened = true;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user