Skip to content

Commit cc8cca1

Browse files
author
maria-farooq
authored
Merge pull request #2735 from RestComm/restcomm-1485
reproduced and fixed restcomm-1485
2 parents 9eca128 + f10bec2 commit cc8cca1

2 files changed

Lines changed: 42 additions & 0 deletions

File tree

restcomm/restcomm.telephony/src/main/java/org/restcomm/connect/telephony/Conference.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,10 @@ public void execute(Object message) throws Exception {
333333
}
334334
//tell call api client to kick all remote calls
335335
kickoutRemoteParticipants();
336+
// Stop the conference if ALL local participants have been evicted
337+
if (calls.isEmpty()) {
338+
fsm.transition(message, stopping);
339+
}
336340
}
337341
}
338342

restcomm/restcomm.telephony/src/main/test/org/restcomm/connect/telephony/ConferenceTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.restcomm.connect.telephony.api.ConferenceResponse;
4343
import org.restcomm.connect.telephony.api.ConferenceStateChanged;
4444
import org.restcomm.connect.telephony.api.CreateConference;
45+
import org.restcomm.connect.telephony.api.StopConference;
4546
import org.restcomm.connect.telephony.util.ConferenceTestUtil;
4647

4748
import akka.actor.ActorRef;
@@ -303,4 +304,41 @@ public UntypedActor create() throws Exception {
303304
return system.actorOf(props);
304305
}
305306

307+
@Test
308+
public void testStopConferenceWithNoLocalParticipants() throws URISyntaxException {
309+
new JavaTestKit(system) {
310+
{
311+
daoManager = mock(DaoManager.class);
312+
CallDetailRecordsDao callDetailRecordsDao = mock(CallDetailRecordsDao.class);
313+
ConferenceDetailRecordsDao conferenceDetailRecordsDao = mock(ConferenceDetailRecordsDao.class);
314+
when(callDetailRecordsDao.getTotalRunningCallDetailRecordsByConferenceSid(any(Sid.class))).thenReturn(0);
315+
when(daoManager.getCallDetailRecordsDao()).thenReturn(callDetailRecordsDao);
316+
when(daoManager.getConferenceDetailRecordsDao()).thenReturn(conferenceDetailRecordsDao);
317+
318+
319+
final ActorRef tester = getRef();
320+
// Create MockFailingMmsControllerFactory
321+
MediaServerControllerFactory factory = new MockMmsControllerFactory(system, null);
322+
// Create ConferenceCenter
323+
final ActorRef conferenceCenter = conferenceCenter(factory, daoManager);
324+
325+
// get a fresh conference from conferenecneter
326+
final CreateConference create = new CreateConference(CONFERENCE_FRIENDLY_NAME_1, new Sid(CALL_SID));
327+
conferenceCenter.tell(create, tester);
328+
ConferenceCenterResponse conferenceCenterResponse = expectMsgClass(ConferenceCenterResponse.class);
329+
ActorRef conferene = conferenceCenterResponse.get();
330+
331+
// start observing conference
332+
conferene.tell(new Observe(tester), tester);
333+
Observing observingResponse = expectMsgClass(Observing.class);
334+
assertTrue(observingResponse.succeeded());
335+
336+
// stop conference while no local participants is there
337+
conferene.tell(new StopConference(), tester);
338+
ConferenceStateChanged conferenceStateChanged = expectMsgClass(ConferenceStateChanged.class);
339+
assertEquals(ConferenceStateChanged.State.COMPLETED, conferenceStateChanged.state());
340+
341+
}};
342+
}
343+
306344
}

0 commit comments

Comments
 (0)