Commit 07f5249e authored by neverlord's avatar neverlord

improved sync_send test

parent 3043c8f8
...@@ -3,38 +3,40 @@ ...@@ -3,38 +3,40 @@
using namespace cppa; using namespace cppa;
/* /******************************************************************************\
* test case: *
test case: * *
* A B C *
A B C * | | | *
| | | * | --(sync_send)--> | | *
| --(sync_send)--> | | * | | --(forward)----> | *
| | --(forward)----> | * | X |---\ *
| X |---\ * | | | *
| | | * | |<--/ *
| |<--/ * | <-------------(reply)-------------- | *
| <-------------(reply)-------------- | * X X *
\******************************************************************************/
*/
struct A : event_based_actor { struct A : event_based_actor {
actor_ptr m_parent;
A(const actor_ptr& parent) : m_parent(parent) { }
void init() { void init() {
auto report_failure = [=] {
send(m_parent, atom("failure"));
quit();
};
become ( become (
on(atom("go"), arg_match) >> [=](const actor_ptr& next) { on(atom("go"), arg_match) >> [=](const actor_ptr& next) {
handle_response(sync_send(next, atom("gogo"))) ( handle_response(sync_send(next, atom("gogo"))) (
on(atom("gogogo")) >> [=] { on(atom("gogogo")) >> [=] {
cout << "A received gogogo" << endl; send(m_parent, atom("success"));
quit(); quit();
}, },
after(std::chrono::seconds(1)) >> [=] { others() >> report_failure,
quit(exit_reason::user_defined); after(std::chrono::seconds(1)) >> report_failure
}
); );
}, },
others() >> [=] { others() >> report_failure
cerr << "UNEXPECTED: " << to_string(last_dequeued()) << endl;
}
); );
} }
}; };
...@@ -44,8 +46,7 @@ struct B : event_based_actor { ...@@ -44,8 +46,7 @@ struct B : event_based_actor {
B(const actor_ptr& buddy) : m_buddy(buddy) { } B(const actor_ptr& buddy) : m_buddy(buddy) { }
void init() { void init() {
become ( become (
others() >> [=]() { others() >> [=] {
cout << "B forward_to C" << endl;
forward_to(m_buddy); forward_to(m_buddy);
quit(); quit();
} }
...@@ -57,7 +58,6 @@ struct C : event_based_actor { ...@@ -57,7 +58,6 @@ struct C : event_based_actor {
void init() { void init() {
become ( become (
on(atom("gogo")) >> [=] { on(atom("gogo")) >> [=] {
cout << "C received gogo (reply)" << endl;
reply(atom("gogogo")); reply(atom("gogogo"));
quit(); quit();
} }
...@@ -66,7 +66,14 @@ cout << "C received gogo (reply)" << endl; ...@@ -66,7 +66,14 @@ cout << "C received gogo (reply)" << endl;
}; };
int main() { int main() {
send(spawn<A>(), atom("go"), spawn<B>(spawn<C>())); CPPA_TEST(test__sync_send);
send(spawn<A>(self), atom("go"), spawn<B>(spawn<C>()));
receive (
on(atom("success")) >> [&] { },
on(atom("failure")) >> [&] {
CPPA_ERROR("A didn't receive a sync response");
}
);
await_all_others_done(); await_all_others_done();
return 0; return CPPA_TEST_RESULT;
} }
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