openvidu-java-client: RecordingPropertiesTest

pull/739/head
pabloFuente 2022-06-15 15:58:10 +02:00
parent 84f23f6beb
commit e5fc3927b5
3 changed files with 165 additions and 4 deletions

View File

@ -540,6 +540,7 @@ public class RecordingProperties {
Boolean ignoreFailedStreamsParam;
try {
String session = (String) params.get("session");
nameParam = (String) params.get("name");
hasAudioParam = (Boolean) params.get("hasAudio");
hasVideoParam = (Boolean) params.get("hasVideo");
@ -631,7 +632,7 @@ public class RecordingProperties {
if (frameRateParam != null) {
if (!FormatChecker.isAcceptableRecordingFrameRate(frameRateParam.intValue())) {
throw new IllegalStateException(
"Wrong 'resolution' parameter. Acceptable values from 100 to 1999 for both width and height");
"Wrong 'frameRate' parameter. Acceptable values are within range [1,120]");
}
frameRateFinal = frameRateParam.intValue();
} else {
@ -640,7 +641,7 @@ public class RecordingProperties {
if (shmSizeParam != null) {
if (!FormatChecker.isAcceptableRecordingShmSize(shmSizeParam)) {
throw new IllegalStateException("Wrong \"shmSize\" parameter. Must be 134217728 (128 MB) minimum");
throw new IllegalStateException("Wrong 'shmSize' parameter. Must be 134217728 (128 MB) minimum");
}
shmSizeFinal = shmSizeParam;
} else {
@ -684,7 +685,11 @@ public class RecordingProperties {
} catch (IllegalArgumentException e) {
// Not a json object
if (params.containsKey("mediaNode")) {
mediaNodeDefault = (String) params.get("mediaNode");
try {
mediaNodeDefault = (String) params.get("mediaNode");
} catch (Exception e2) {
throw new IllegalArgumentException("Wrong 'mediaNode' parameter. Wrong type");
}
}
}
}

View File

@ -23,6 +23,7 @@ import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.gson.reflect.TypeToken;
/**
@ -430,7 +431,12 @@ public class SessionProperties {
}
String mediaNode;
try {
mediaNode = mediaNodeJson.get("id").getAsString();
JsonPrimitive primitive = mediaNodeJson.get("id").getAsJsonPrimitive();
if (!primitive.isString()) {
throw new IllegalArgumentException("Type error in parameter 'mediaNode.id': not a String");
} else {
mediaNode = primitive.getAsString();
}
} catch (ClassCastException e) {
throw new IllegalArgumentException("Type error in parameter 'mediaNode.id': " + e.getMessage());
}

View File

@ -0,0 +1,150 @@
package io.openvidu.java.client.test;
import static org.junit.Assert.assertThrows;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import io.openvidu.java.client.RecordingProperties;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class RecordingPropertiesTest extends TestCase {
public RecordingPropertiesTest(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(RecordingPropertiesTest.class);
}
/**
* { "session":"ses_YnDaGYNcd7", "name": "MyRecording", "hasAudio": true,
* "hasVideo": true, "outputMode": "COMPOSED", "recordingLayout": "CUSTOM",
* "customLayout": "mySimpleLayout", "resolution": "1280x720", "frameRate": 25,
* "shmSize": 536870912, "ignoreFailedStreams": false, "mediaNode": { "id":
* "media_i-0c58bcdd26l11d0sd" } }
*/
public void testRecordingFromJsonSuccess() {
String jsonString = "{'session':'MY_CUSTOM_STRING','name':'MY_CUSTOM_STRING','hasAudio':false,'hasVideo':true,'outputMode':'COMPOSED','recordingLayout':'CUSTOM','customLayout':'MY_CUSTOM_STRING','resolution':'1000x1000','frameRate':33,'shmSize':333333333,'mediaNode':{'id':'MY_CUSTOM_STRING'}}";
Map<String, ?> map = mapFromJsonString(jsonString);
RecordingProperties.Builder builder = RecordingProperties.fromJson(map, null);
RecordingProperties props = builder.build();
JsonObject finalJson = props.toJson();
JsonObject originalJson = new Gson().fromJson(jsonString, JsonObject.class);
originalJson = adaptProps(originalJson);
assertEquals(originalJson, finalJson);
jsonString = "{'session':'MY_CUSTOM_STRING','name':'MY_CUSTOM_STRING','hasAudio':false,'hasVideo':true,'outputMode':'INDIVIDUAL','ignoreFailedStreams':true}";
map = mapFromJsonString(jsonString);
builder = RecordingProperties.fromJson(map, null);
props = builder.build();
finalJson = props.toJson();
originalJson = new Gson().fromJson(jsonString, JsonObject.class);
originalJson = adaptProps(originalJson);
assertEquals(originalJson, finalJson);
}
public void testFromJsonError() {
Map<String, ?> map = mapFromJsonString("{'session':false}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'session':123}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'name':true}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'name':0}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'name':{'object':true}}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'name':[]}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'hasAudio':'str'}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'hasVideo':123}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'hasVideo':123}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'outputMode':false}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'recordingLayout':123}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'customLayout':{}}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'resolution':false}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'frameRate':'str'}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'shmSize':'str'}");
assertException(map, "Type error in some parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'hasAudio':false,'hasVideo':false}");
assertException(map, "Cannot start a recording with both \"hasAudio\" and \"hasVideo\" set to false",
IllegalStateException.class);
map = mapFromJsonString("{'resolution':'99x1000'}");
assertException(map, "Wrong 'resolution' parameter", IllegalStateException.class);
map = mapFromJsonString("{'frameRate':121}");
assertException(map, "Wrong 'frameRate' parameter", IllegalStateException.class);
map = mapFromJsonString("{'shmSize':134217727}");
assertException(map, "Wrong 'shmSize' parameter", IllegalStateException.class);
map = mapFromJsonString("{'mediaNode':true}");
assertException(map, "Wrong 'mediaNode' parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'mediaNode':{}}");
assertException(map, "Wrong 'mediaNode' parameter", IllegalArgumentException.class);
map = mapFromJsonString("{'mediaNode':{'id':false}}");
assertException(map, "Wrong 'mediaNode' parameter", IllegalArgumentException.class);
}
private JsonObject adaptProps(JsonObject json) {
json.remove("session");
if (json.has("mediaNode")) {
json.addProperty("mediaNode", json.get("mediaNode").getAsJsonObject().get("id").getAsString());
}
return json;
}
private Map<String, ?> mapFromJsonString(String json) {
return new Gson().fromJson(json, Map.class);
}
private <T extends Exception> void assertException(Map<String, ?> params, String containsError,
Class<T> exceptionClass) {
if (exceptionClass != null) {
T exception = assertThrows(exceptionClass, () -> RecordingProperties.fromJson(params, null));
assertTrue(exception.getMessage().contains(containsError));
} else {
Exception exception = assertThrows(RuntimeException.class,
() -> RecordingProperties.fromJson(params, null));
assertTrue(exception.getMessage().contains(containsError));
}
}
}