|
111 | 111 | spawn_monitor_alias/1, |
112 | 112 | demonitor_aliasmonitor/1, |
113 | 113 | down_aliasmonitor/1, |
| 114 | + monitor_time_offset_alias/1, |
114 | 115 | monitor_tag/1, |
115 | 116 | no_pid_wrap/1, |
116 | 117 | processes_iter/1]). |
@@ -215,6 +216,7 @@ groups() -> |
215 | 216 | {alias, [], |
216 | 217 | [alias_bif, monitor_alias, spawn_monitor_alias, |
217 | 218 | demonitor_aliasmonitor, down_aliasmonitor, |
| 219 | + monitor_time_offset_alias, |
218 | 220 | dist_frag_alias, dist_frag_unaliased]}]. |
219 | 221 |
|
220 | 222 | init_per_suite(Config) -> |
@@ -5715,6 +5717,84 @@ down_aliasmonitor(Config) when is_list(Config) -> |
5715 | 5717 | peer:stop(Peer), |
5716 | 5718 | ok. |
5717 | 5719 |
|
| 5720 | +monitor_time_offset_alias(Config) when is_list(Config) -> |
| 5721 | + monitor_time_offset_alias_test(explicit_unalias), |
| 5722 | + monitor_time_offset_alias_test(demonitor), |
| 5723 | + monitor_time_offset_alias_test(reply_demonitor). |
| 5724 | + |
| 5725 | +monitor_time_offset_alias_test(Deactivate) -> |
| 5726 | + Me = self(), |
| 5727 | + {ok, Peer, Node} = ?CT_PEER(#{args => ["+C", "single_time_warp"]}), |
| 5728 | + TrySelfAlias = fun (Alias) -> |
| 5729 | + Ref = make_ref(), |
| 5730 | + Alias ! Ref, |
| 5731 | + receive Ref -> active |
| 5732 | + after 0 -> inactive |
| 5733 | + end |
| 5734 | + end, |
| 5735 | + Tester = spawn_link(Node, |
| 5736 | + fun () -> |
| 5737 | + MonAlias = monitor(time_offset, clock_service, |
| 5738 | + [{alias, Deactivate}]), |
| 5739 | + Me ! {self(), mon_alias, MonAlias}, |
| 5740 | + receive |
| 5741 | + {Me, finalize_time_offset} -> |
| 5742 | + ok |
| 5743 | + end, |
| 5744 | + preliminary = erlang:system_flag(time_offset, finalize), |
| 5745 | + receive |
| 5746 | + {'CHANGE', MonAlias, time_offset, clock_service, _} -> |
| 5747 | + ok |
| 5748 | + after |
| 5749 | + 1000 -> |
| 5750 | + exit(missing_time_offset_change_message) |
| 5751 | + end, |
| 5752 | + Me ! {self(), finalized_time_offset}, |
| 5753 | + receive |
| 5754 | + {Me, alias_message} -> |
| 5755 | + Me ! {self(), alias_message} |
| 5756 | + end, |
| 5757 | + case Deactivate of |
| 5758 | + explicit_unalias -> |
| 5759 | + active = TrySelfAlias(MonAlias), |
| 5760 | + unalias(MonAlias); |
| 5761 | + demonitor -> |
| 5762 | + active = TrySelfAlias(MonAlias), |
| 5763 | + demonitor(MonAlias); |
| 5764 | + reply_demonitor -> |
| 5765 | + ok |
| 5766 | + end, |
| 5767 | + inactive = TrySelfAlias(MonAlias), |
| 5768 | + receive |
| 5769 | + {Me, pid_message} -> |
| 5770 | + Me ! {self(), pid_message} |
| 5771 | + end |
| 5772 | + end), |
| 5773 | + Alias = receive |
| 5774 | + {Tester, mon_alias, MonAlias} -> |
| 5775 | + MonAlias |
| 5776 | + end, |
| 5777 | + Tester ! {self(), finalize_time_offset}, |
| 5778 | + receive |
| 5779 | + {Tester, finalized_time_offset} -> |
| 5780 | + ok |
| 5781 | + end, |
| 5782 | + Alias ! {self(), alias_message}, |
| 5783 | + Tester ! {self(), pid_message}, |
| 5784 | + receive |
| 5785 | + {Tester, alias_message} -> |
| 5786 | + ok; |
| 5787 | + {Tester, pid_message} -> |
| 5788 | + ct:fail(alias_did_not_work) |
| 5789 | + end, |
| 5790 | + receive |
| 5791 | + {Tester, pid_message} -> |
| 5792 | + ok |
| 5793 | + end, |
| 5794 | + unlink(Tester), |
| 5795 | + peer:stop(Peer), |
| 5796 | + ok. |
| 5797 | + |
5718 | 5798 | monitor_tag(Config) when is_list(Config) -> |
5719 | 5799 | %% Exit signals with immediate exit reasons are sent |
5720 | 5800 | %% in a different manner than compound exit reasons, and |
|
0 commit comments