+ xbt_assert(send_done, "Sender killed somehow. It shouldn't");
+}
+
+static void test_link_off()
+{
+ XBT_INFO("%s: Launch an actor that waits on a recv, turn communicating link off", __func__);
+ bool sender_got_exception = false;
+ bool receiver_got_exception = false;
+
+ simgrid::s4u::ActorPtr receiver = simgrid::s4u::Actor::create("receiver", all_hosts[1], [&receiver_got_exception]() {
+ assert_exit(false, 1);
+ try {
+ simgrid::s4u::Mailbox::by_name("mb")->get();
+ } catch (simgrid::NetworkFailureException const&) {
+ receiver_got_exception = true;
+ }
+ });
+
+ simgrid::s4u::ActorPtr sender = simgrid::s4u::Actor::create("sender", all_hosts[2], [&sender_got_exception]() {
+ assert_exit(false, 1);
+ try {
+ int data = 42;
+ simgrid::s4u::Mailbox::by_name("mb")->put(&data, 100000);
+ } catch (simgrid::NetworkFailureException const&) {
+ sender_got_exception = true;
+ }
+ });
+
+ simgrid::s4u::this_actor::sleep_for(1);
+ simgrid::s4u::Link::by_name("link1")->turn_off();
+ simgrid::s4u::Link::by_name("link1")->turn_on();
+ xbt_assert(receiver_got_exception, "Receiver should have caught a NetworkFailureException");
+ xbt_assert(sender_got_exception, "Sender should have caught a NetworkFailureException");