blob: 3fd44cb879c7cc94676ab846650e2d081ad06bd6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License") + you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.openmeetings.mediaserver.remote;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.apache.openmeetings.IApplication;
import org.apache.openmeetings.db.dao.record.RecordingDao;
import org.apache.openmeetings.db.dao.room.RoomDao;
import org.apache.openmeetings.db.dao.user.UserDao;
import org.apache.openmeetings.db.entity.basic.Client;
import org.apache.openmeetings.db.entity.record.Recording;
import org.apache.openmeetings.db.entity.room.Room;
import org.apache.openmeetings.db.entity.user.User;
import org.apache.openmeetings.db.manager.IClientManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.kurento.client.MediaPipeline;
import org.kurento.client.Transaction;
import org.mockito.Mock;
import com.github.openjson.JSONObject;
class TestRoomFlowMocked extends BaseMockedTest {
private static final Long USER_ID = 1L;
private static final Long ROOM_ID = 5L;
@Mock
private UserDao userDao;
@Mock
private RoomDao roomDao;
@Mock
private RecordingDao recDao;
@Mock
private IClientManager cm;
@Mock
private IApplication app;
@BeforeEach
public void setup() {
lenient().doReturn(mock(MediaPipeline.class)).when(client).createMediaPipeline(any(Transaction.class));
User u = new User();
u.setId(USER_ID);
u.setFirstname("firstname");
u.setLastname("lastname");
lenient().doReturn(u).when(userDao).get(USER_ID);
doReturn(true).when(handler).isConnected();
lenient().when(recDao.update(any(Recording.class))).thenAnswer((invocation) -> {
Object[] args = invocation.getArguments();
Recording r = (Recording) args[0];
r.setId(1L);
return r;
});
}
@Test
void testNoClient() {
runWrapped(() -> {
handler.onMessage(null, getBaseMsg().put("id", "aa"));
verify(streamProcessor, times(0)).onMessage(any(), any(), any());
});
}
private Client getClient() {
return new Client("sessionId", 0, userDao.get(USER_ID), "");
}
@Test
void testNoRoom() {
runWrapped(() -> {
handler.onMessage(getClient(), getBaseMsg().put("id", "aa"));
verify(streamProcessor, times(0)).onMessage(any(), any(), any());
});
}
@Test
void testRecordingAllowed() {
runWrapped(() -> {
Client c = getClient();
assertFalse(streamProcessor.recordingAllowed(c));
c.setRoom(new Room());
assertFalse(streamProcessor.recordingAllowed(c));
c.getRoom().setId(ROOM_ID);
c.getRoom().setAllowRecording(true);
assertFalse(streamProcessor.recordingAllowed(c));
c.allow(Room.Right.MODERATOR);
doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
assertTrue(streamProcessor.recordingAllowed(c));
});
}
private Client getClientWithRoom() {
Client c = getClient();
c.setRoom(new Room());
c.getRoom().setId(ROOM_ID);
return c;
}
@Test
void testWannaRecord1() throws Exception {
JSONObject msg = getBaseMsg().put("id", "wannaRecord");
handler.onMessage(getClientWithRoom(), msg);
verify(streamProcessor, times(1)).onMessage(any(), any(), any());
}
private Client getClientFull() {
Client c = getClientWithRoom();
c.getRoom().setAllowRecording(true);
c.allow(Room.Right.MODERATOR);
return c;
}
@Test
void testWannaRecord2() throws Exception {
runWrapped(() -> {
JSONObject msg = getBaseMsg().put("id", "wannaRecord");
Client c = getClientFull();
c.getRoom().setType(Room.Type.INTERVIEW);
doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
handler.onMessage(c, msg);
verify(streamProcessor, times(1)).onMessage(any(), any(), any());
});
}
@Test
void testRecordRecord() throws Exception {
runWrapped(() -> {
JSONObject msg = getBaseMsg()
.put("id", "wannaRecord")
.put("shareType", "shareType")
.put("fps", "fps")
;
Client c = getClientFull();
doReturn(c.getRoom()).when(roomDao).get(ROOM_ID);
handler.onMessage(c, msg);
assertTrue(streamProcessor.isSharing(ROOM_ID));
handler.onMessage(c, msg);
});
}
}