Add NodeEventLoopFactory
This lets us create event loops on separate nodes which can't
communicate with each other. Next step is to add a message proxy
between them, then teach the logger to replay onto multiple nodes.
Change-Id: I06b2836365aea13d696535c52a78ca0c862a7b1e
diff --git a/aos/events/simulated_event_loop_test.cc b/aos/events/simulated_event_loop_test.cc
index 4328d6f..b373aa6 100644
--- a/aos/events/simulated_event_loop_test.cc
+++ b/aos/events/simulated_event_loop_test.cc
@@ -15,11 +15,11 @@
public:
::std::unique_ptr<EventLoop> Make(std::string_view name) override {
MaybeMake();
- return event_loop_factory_->MakeEventLoop(name);
+ return event_loop_factory_->MakeEventLoop(name, my_node());
}
::std::unique_ptr<EventLoop> MakePrimary(std::string_view name) override {
MaybeMake();
- return event_loop_factory_->MakeEventLoop(name);
+ return event_loop_factory_->MakeEventLoop(name, my_node());
}
void Run() override { event_loop_factory_->Run(); }
@@ -38,8 +38,8 @@
void MaybeMake() {
if (!event_loop_factory_) {
if (configuration()->has_nodes()) {
- event_loop_factory_ = std::make_unique<SimulatedEventLoopFactory>(
- configuration(), my_node());
+ event_loop_factory_ =
+ std::make_unique<SimulatedEventLoopFactory>(configuration());
} else {
event_loop_factory_ =
std::make_unique<SimulatedEventLoopFactory>(configuration());
@@ -64,12 +64,13 @@
int counter = 0;
EventScheduler scheduler;
- scheduler.Schedule(::aos::monotonic_clock::now(),
- [&counter]() { counter += 1; });
+ scheduler.Schedule(distributed_clock::epoch() + chrono::seconds(1),
+ [&counter]() { counter += 1; });
scheduler.Run();
EXPECT_EQ(counter, 1);
- auto token = scheduler.Schedule(::aos::monotonic_clock::now(),
- [&counter]() { counter += 1; });
+ auto token =
+ scheduler.Schedule(distributed_clock::epoch() + chrono::seconds(2),
+ [&counter]() { counter += 1; });
scheduler.Deschedule(token);
scheduler.Run();
EXPECT_EQ(counter, 1);
@@ -80,8 +81,9 @@
int counter = 0;
EventScheduler scheduler;
- auto token = scheduler.Schedule(::aos::monotonic_clock::now(),
- [&counter]() { counter += 1; });
+ auto token =
+ scheduler.Schedule(distributed_clock::epoch() + chrono::seconds(1),
+ [&counter]() { counter += 1; });
scheduler.Deschedule(token);
scheduler.Run();
EXPECT_EQ(counter, 0);
@@ -100,8 +102,6 @@
simulated_event_loop_factory.RunFor(chrono::seconds(1));
EXPECT_EQ(::aos::monotonic_clock::epoch() + chrono::seconds(1),
- simulated_event_loop_factory.monotonic_now());
- EXPECT_EQ(::aos::monotonic_clock::epoch() + chrono::seconds(1),
event_loop->monotonic_now());
}
@@ -125,8 +125,6 @@
simulated_event_loop_factory.RunFor(chrono::seconds(1));
EXPECT_EQ(::aos::monotonic_clock::epoch() + chrono::seconds(1),
- simulated_event_loop_factory.monotonic_now());
- EXPECT_EQ(::aos::monotonic_clock::epoch() + chrono::seconds(1),
event_loop->monotonic_now());
EXPECT_EQ(counter, 10);
}