Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve test stability for deleteSubtracks #6994

Merged
merged 1 commit into from
Feb 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/main/java/io/antmedia/AntMediaApplicationAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ public void closeBroadcast(String streamId) {
notifyHook(listenerHookURL, streamId, mainTrackId, HOOK_ACTION_END_LIVE_STREAM, name, category,
null, null, metaData, null);
}

PublishEndedEvent publishEndedEvent = new PublishEndedEvent();
publishEndedEvent.setStreamId(streamId);
publishEndedEvent.setDurationMs(System.currentTimeMillis() - broadcast.getStartTime());
Expand Down
13 changes: 10 additions & 3 deletions src/main/java/io/antmedia/rest/RestServiceBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -398,9 +398,16 @@ private boolean deleteSubtracks(Broadcast broadcast) {

for (Broadcast subtrack : subtracks) {
boolean subtrackDeleted = getDataStore().delete(subtrack.getStreamId());
if (!subtrackDeleted) {
logger.error("Subtrack {} could not be deleted", subtrack.getStreamId());
result = false;
if (!subtrackDeleted ) {

//before returning false, check the track exists because it may be deleted automatically if it's zombi and stopped
Broadcast subtrackBroadcast = getDataStore().get(subtrack.getStreamId());

if (subtrackBroadcast != null)
{
logger.error("Subtrack {} could not be deleted", subtrack.getStreamId());
result = false;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -905,7 +905,7 @@ public void testRemoveEndpointV2()
assertTrue(result.isSuccess());

assertEquals(1, store.get(streamId).getEndPointList().size());

BroadcastUpdate broadcastUpdate = new BroadcastUpdate();
broadcastUpdate.setStatus(AntMediaApplicationAdapter.BROADCAST_STATUS_BROADCASTING);
broadcastUpdate.setUpdateTime(System.currentTimeMillis());
Expand Down Expand Up @@ -1777,7 +1777,7 @@ public void testEnableMp4Muxing() throws Exception
BroadcastUpdate broadcastUpdate = new BroadcastUpdate();
broadcastUpdate.setStatus(AntMediaApplicationAdapter.BROADCAST_STATUS_BROADCASTING);
broadcastUpdate.setUpdateTime(System.currentTimeMillis());

store.updateBroadcastFields(testBroadcast.getStreamId(), broadcastUpdate);

assertTrue(restServiceSpy.enableRecordMuxing(testBroadcast.getStreamId(), true, "mp4", 0).isSuccess());
Expand Down Expand Up @@ -1946,10 +1946,10 @@ public void testSubscriberNone32BitSecret() {
public void testTimeBasedSubscriberOperations() {

DataStore store = new MapDBStore(RandomStringUtils.randomAlphanumeric(6) + ".db", vertx);

AppSettings appSettings = new AppSettings();
appSettings.setWriteSubscriberEventsToDatastore(true);

store.setAppSettings(appSettings);

restServiceReal.setDataStore(store);
Expand All @@ -1976,22 +1976,22 @@ public void testTimeBasedSubscriberOperations() {

assertEquals(2, subscribers.size());
assertEquals(2, subscriberStats.size());

List<ConnectionEvent> connectionEvents = restServiceReal.getConnectionEvents(subscriber.getStreamId(), 0, 10, null);
assertEquals(0, connectionEvents.size());

ConnectionEvent event = new ConnectionEvent();
event.setEventType(ConnectionEvent.CONNECTED_EVENT);
event.setType(Subscriber.PLAY_TYPE);

assertTrue(store.addSubscriberConnectionEvent(subscriber.getStreamId(), subscriber.getSubscriberId(), event));
assertTrue(store.addSubscriberConnectionEvent(subscriber.getStreamId(), subscriber.getSubscriberId(), event));

connectionEvents = restServiceReal.getConnectionEvents(null, 0, 10, null);
assertEquals(0, connectionEvents.size());

connectionEvents = restServiceReal.getConnectionEvents(subscriber.getStreamId(), 0, 10, null);
assertEquals(1, connectionEvents.size());

connectionEvents = restServiceReal.getConnectionEvents(subscriber.getStreamId(), 0, 10, subscriber.getSubscriberId());
assertEquals(1, connectionEvents.size());

Expand Down Expand Up @@ -2616,7 +2616,7 @@ public void testUpdateIPCamera() {
Mockito.doReturn(true).when(streamSourceRest).checkStreamUrl(any());

Mockito.doReturn(true).when(streamSourceRest).checkStopStreaming(any());

BroadcastUpdate broadcastUpdate = new BroadcastUpdate();
broadcastUpdate.setUsername("new_user");
result = streamSourceRest.updateBroadcast(streamSource.getStreamId(), broadcastUpdate);
Expand All @@ -2626,16 +2626,16 @@ public void testUpdateIPCamera() {





broadcastUpdate = new BroadcastUpdate();
broadcastUpdate.setStreamId("test");
broadcastUpdate.setStreamUrl("rtsp://test2");
broadcastUpdate.setName("testIPcamera");
broadcastUpdate.setUsername("");
broadcastUpdate.setPassword("");
broadcastUpdate.setIpAddr("");

result = streamSourceRest.updateBroadcast(broadcastUpdate.getStreamId(), broadcastUpdate);

assertEquals(true, result.isSuccess());
Expand Down Expand Up @@ -2788,7 +2788,7 @@ public void testUpdateCamInfo() {
Mockito.doReturn(false).when(sfm).isStreamRunning(any());

store.save(newCam);

BroadcastUpdate broadcastUpdate = new BroadcastUpdate();
broadcastUpdate.setSubFolder("testFolder");

Expand Down Expand Up @@ -2887,7 +2887,7 @@ public void testAddStreamSourceWithEndPoint() {
assertEquals(1, source.getEndPointList().size());
BroadcastUpdate broadcastUpdate = new BroadcastUpdate();
broadcastUpdate.setEndPointList(source.getEndPointList());

//update first source now. At the moment we have endpoint_1
result = streamSourceRest.updateBroadcast(source.getStreamId(), broadcastUpdate);
assertEquals(1, source.getEndPointList().size());
Expand Down Expand Up @@ -2986,7 +2986,7 @@ public void testAddSubtrackWhenThereIsALimit() throws Exception

Broadcast mainTrack= new Broadcast();
mainTrack.setStreamId(mainTrackId);

datastore.save(mainTrack);

//it should be false because there is no subtrack
Expand Down Expand Up @@ -3770,7 +3770,7 @@ public void testCheckURL() {
assertFalse(restServiceReal.checkStreamUrl("dummy://something"));
}


@Test
public void testDeleteBroadcastWithSubtracks() {
AppSettings settings = new AppSettings();
Expand All @@ -3784,7 +3784,6 @@ public void testDeleteBroadcastWithSubtracks() {
restServiceReal.setAppCtx(context);
when(context.containsBean(any())).thenReturn(false);


DataStore store = Mockito.spy(new InMemoryDataStore("testdb"));
restServiceReal.setDataStore(store);

Expand All @@ -3797,7 +3796,7 @@ public void testDeleteBroadcastWithSubtracks() {
Mockito.when(appAdaptor.stopStreaming(any(), anyBoolean())).thenReturn(new Result(true));

restServiceReal.setApplication(appAdaptor);

Broadcast mainTrack = new Broadcast();
try {
mainTrack.setStreamId("mainTrack");
Expand All @@ -3806,7 +3805,7 @@ public void testDeleteBroadcastWithSubtracks() {
}
mainTrack.setStatus(IAntMediaStreamHandler.BROADCAST_STATUS_BROADCASTING);
mainTrack.setUpdateTime(System.currentTimeMillis());

Broadcast subtrack1 = new Broadcast();
try {
subtrack1.setStreamId("subtrack1");
Expand All @@ -3817,7 +3816,7 @@ public void testDeleteBroadcastWithSubtracks() {
subtrack1.setStatus(IAntMediaStreamHandler.BROADCAST_STATUS_BROADCASTING);
subtrack1.setUpdateTime(System.currentTimeMillis());


Broadcast subtrack2 = new Broadcast();
try {
subtrack2.setStreamId("subtrack2");
Expand All @@ -3827,7 +3826,7 @@ public void testDeleteBroadcastWithSubtracks() {
subtrack2.setMainTrackStreamId(mainTrack.getStreamId());
subtrack2.setStatus(IAntMediaStreamHandler.BROADCAST_STATUS_BROADCASTING);
subtrack2.setUpdateTime(System.currentTimeMillis());

Broadcast subtrack3 = new Broadcast();
try {
subtrack3.setStreamId("subtrack3");
Expand All @@ -3838,12 +3837,12 @@ public void testDeleteBroadcastWithSubtracks() {
subtrack3.setStatus(IAntMediaStreamHandler.BROADCAST_STATUS_FINISHED);
subtrack3.setUpdateTime(System.currentTimeMillis() - 50000);


store.save(mainTrack);
store.save(subtrack1);
store.save(subtrack2);
store.save(subtrack3);

assertNotNull(store.get(mainTrack.getStreamId()));
assertNotNull(store.get(subtrack1.getStreamId()));
assertNotNull(store.get(subtrack2.getStreamId()));
Expand All @@ -3853,28 +3852,42 @@ public void testDeleteBroadcastWithSubtracks() {
assertTrue(result.isSuccess());

verify(appAdaptor).stopStreaming(eq(mainTrack), anyBoolean());

assertNull(store.get(mainTrack.getStreamId()));
assertNull(store.get(subtrack1.getStreamId()));
assertNull(store.get(subtrack2.getStreamId()));
assertNull(store.get(subtrack3.getStreamId()));


store.save(mainTrack);
store.save(subtrack1);
store.save(subtrack2);

Mockito.doReturn(false).when(store).delete(subtrack1.getStreamId());
Mockito.doReturn(Arrays.asList(subtrack1)).when(store).getSubtracks(anyString(), anyInt(), anyInt(), anyString());

result = restServiceReal.deleteBroadcast(mainTrack.getStreamId(), true);
assertFalse(result.isSuccess());

assertNull(store.get(mainTrack.getStreamId()));
assertNotNull(store.get(subtrack1.getStreamId()));

{
store.save(mainTrack);
store.save(subtrack1);

Mockito.doReturn(false).when(store).delete(subtrack1.getStreamId());
Mockito.doReturn(null).when(store).get(subtrack1.getStreamId());

result = restServiceReal.deleteBroadcast(mainTrack.getStreamId(), true);
//it's true because get returns null -> Mockito.doReturn(null).when(store).get(subtrack1.getStreamId());
assertTrue(result.isSuccess());

assertNull(store.get(mainTrack.getStreamId()));

}

}


}
Loading