SignalingMessageReceiverLocalParticipantTest.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /*
  2. * Nextcloud Talk application
  3. *
  4. * @author Daniel Calviño Sánchez
  5. * Copyright (C) 2023 Daniel Calviño Sánchez <danxuliu@gmail.com>
  6. *
  7. * This program is free software: you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation, either version 3 of the License, or
  10. * at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. package com.nextcloud.talk.signaling;
  21. import org.junit.Assert;
  22. import org.junit.Before;
  23. import org.junit.Test;
  24. import org.mockito.InOrder;
  25. import java.util.HashMap;
  26. import java.util.Map;
  27. import static org.mockito.Mockito.doAnswer;
  28. import static org.mockito.Mockito.inOrder;
  29. import static org.mockito.Mockito.mock;
  30. import static org.mockito.Mockito.only;
  31. import static org.mockito.Mockito.verify;
  32. import static org.mockito.Mockito.verifyNoInteractions;
  33. public class SignalingMessageReceiverLocalParticipantTest {
  34. private SignalingMessageReceiver signalingMessageReceiver;
  35. @Before
  36. public void setUp() {
  37. // SignalingMessageReceiver is abstract to prevent direct instantiation without calling the appropriate
  38. // protected methods.
  39. signalingMessageReceiver = new SignalingMessageReceiver() {
  40. };
  41. }
  42. @Test
  43. public void testAddLocalParticipantMessageListenerWithNullListener() {
  44. Assert.assertThrows(IllegalArgumentException.class, () -> {
  45. signalingMessageReceiver.addListener((SignalingMessageReceiver.LocalParticipantMessageListener) null);
  46. });
  47. }
  48. @Test
  49. public void testExternalSignalingLocalParticipantMessageSwitchTo() {
  50. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener =
  51. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  52. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener);
  53. Map<String, Object> eventMap = new HashMap<>();
  54. eventMap.put("type", "switchto");
  55. eventMap.put("target", "room");
  56. Map<String, Object> switchToMap = new HashMap<>();
  57. switchToMap.put("roomid", "theToken");
  58. eventMap.put("switchto", switchToMap);
  59. signalingMessageReceiver.processEvent(eventMap);
  60. verify(mockedLocalParticipantMessageListener, only()).onSwitchTo("theToken");
  61. }
  62. @Test
  63. public void testExternalSignalingLocalParticipantMessageAfterRemovingListener() {
  64. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener =
  65. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  66. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener);
  67. signalingMessageReceiver.removeListener(mockedLocalParticipantMessageListener);
  68. Map<String, Object> eventMap = new HashMap<>();
  69. eventMap.put("type", "switchto");
  70. eventMap.put("target", "room");
  71. HashMap<String, Object> switchToMap = new HashMap<>();
  72. switchToMap.put("roomid", "theToken");
  73. eventMap.put("switchto", switchToMap);
  74. signalingMessageReceiver.processEvent(eventMap);
  75. verifyNoInteractions(mockedLocalParticipantMessageListener);
  76. }
  77. @Test
  78. public void testExternalSignalingLocalParticipantMessageAfterRemovingSingleListenerOfSeveral() {
  79. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener1 =
  80. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  81. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener2 =
  82. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  83. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener3 =
  84. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  85. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener1);
  86. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener2);
  87. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener3);
  88. signalingMessageReceiver.removeListener(mockedLocalParticipantMessageListener2);
  89. Map<String, Object> eventMap = new HashMap<>();
  90. eventMap.put("type", "switchto");
  91. eventMap.put("target", "room");
  92. HashMap<String, Object> switchToMap = new HashMap<>();
  93. switchToMap.put("roomid", "theToken");
  94. eventMap.put("switchto", switchToMap);
  95. signalingMessageReceiver.processEvent(eventMap);
  96. verify(mockedLocalParticipantMessageListener1, only()).onSwitchTo("theToken");
  97. verify(mockedLocalParticipantMessageListener3, only()).onSwitchTo("theToken");
  98. verifyNoInteractions(mockedLocalParticipantMessageListener2);
  99. }
  100. @Test
  101. public void testExternalSignalingLocalParticipantMessageAfterAddingListenerAgain() {
  102. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener =
  103. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  104. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener);
  105. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener);
  106. Map<String, Object> eventMap = new HashMap<>();
  107. eventMap.put("type", "switchto");
  108. eventMap.put("target", "room");
  109. HashMap<String, Object> switchToMap = new HashMap<>();
  110. switchToMap.put("roomid", "theToken");
  111. eventMap.put("switchto", switchToMap);
  112. signalingMessageReceiver.processEvent(eventMap);
  113. verify(mockedLocalParticipantMessageListener, only()).onSwitchTo("theToken");
  114. }
  115. @Test
  116. public void testAddLocalParticipantMessageListenerWhenHandlingExternalSignalingLocalParticipantMessage() {
  117. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener1 =
  118. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  119. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener2 =
  120. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  121. doAnswer((invocation) -> {
  122. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener2);
  123. return null;
  124. }).when(mockedLocalParticipantMessageListener1).onSwitchTo("theToken");
  125. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener1);
  126. Map<String, Object> eventMap = new HashMap<>();
  127. eventMap.put("type", "switchto");
  128. eventMap.put("target", "room");
  129. HashMap<String, Object> switchToMap = new HashMap<>();
  130. switchToMap.put("roomid", "theToken");
  131. eventMap.put("switchto", switchToMap);
  132. signalingMessageReceiver.processEvent(eventMap);
  133. verify(mockedLocalParticipantMessageListener1, only()).onSwitchTo("theToken");
  134. verifyNoInteractions(mockedLocalParticipantMessageListener2);
  135. }
  136. @Test
  137. public void testRemoveLocalParticipantMessageListenerWhenHandlingExternalSignalingLocalParticipantMessage() {
  138. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener1 =
  139. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  140. SignalingMessageReceiver.LocalParticipantMessageListener mockedLocalParticipantMessageListener2 =
  141. mock(SignalingMessageReceiver.LocalParticipantMessageListener.class);
  142. doAnswer((invocation) -> {
  143. signalingMessageReceiver.removeListener(mockedLocalParticipantMessageListener2);
  144. return null;
  145. }).when(mockedLocalParticipantMessageListener1).onSwitchTo("theToken");
  146. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener1);
  147. signalingMessageReceiver.addListener(mockedLocalParticipantMessageListener2);
  148. Map<String, Object> eventMap = new HashMap<>();
  149. eventMap.put("type", "switchto");
  150. eventMap.put("target", "room");
  151. HashMap<String, Object> switchToMap = new HashMap<>();
  152. switchToMap.put("roomid", "theToken");
  153. eventMap.put("switchto", switchToMap);
  154. signalingMessageReceiver.processEvent(eventMap);
  155. InOrder inOrder = inOrder(mockedLocalParticipantMessageListener1, mockedLocalParticipantMessageListener2);
  156. inOrder.verify(mockedLocalParticipantMessageListener1).onSwitchTo("theToken");
  157. inOrder.verify(mockedLocalParticipantMessageListener2).onSwitchTo("theToken");
  158. }
  159. }