package uws.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static uws.config.ConfigurableUWSFactory.PATTERN_PARAMETER;
import java.util.regex.Matcher;
import org.junit.Before;
import org.junit.Test;
import uws.UWSException;
import uws.job.parameters.DurationParamController;
import uws.job.parameters.NumericParamController;
import uws.job.parameters.StringParamController;
public class TestConfigurableUWSFactory {
@Before
public void setUp() throws Exception{}
@Test
public void testPatternParameter(){
/* JUST A NAME => OK */
Matcher matcher = PATTERN_PARAMETER.matcher("param1");
assertTrue(matcher.matches());
assertEquals("param1", matcher.group(16));
assertNull(matcher.group(6));
assertNull(matcher.group(7));
assertNull(matcher.group(11));
assertNull(matcher.group(18));
/* EMPTY STRING => OK */
matcher = PATTERN_PARAMETER.matcher("");
assertTrue(matcher.matches());
assertEquals(0, matcher.group(1).length());
assertNull(matcher.group(6));
assertNull(matcher.group(7));
assertNull(matcher.group(11));
assertNull(matcher.group(18));
/* EMPTY STRING + , (SOMETHING OR NOT) => OK */
matcher = PATTERN_PARAMETER.matcher(",");
assertTrue(matcher.matches());
assertEquals(0, matcher.group(1).length());
assertEquals(0, matcher.group(18).length());
matcher = PATTERN_PARAMETER.matcher(",something");
assertTrue(matcher.matches());
assertEquals(0, matcher.group(1).length());
assertEquals("something", matcher.group(18));
assertNull(matcher.group(6));
assertNull(matcher.group(7));
assertNull(matcher.group(11));
/* A FULL DEFINITION WITH JUST NAME => ERROR */
matcher = PATTERN_PARAMETER.matcher("[param1]");
assertFalse(matcher.matches());
/* NUMERIC */
matcher = PATTERN_PARAMETER.matcher("[param1,yes, numeric, 123,45,65]");
assertTrue(matcher.matches());
assertEquals("param1", matcher.group(2));
assertEquals("yes", matcher.group(5));
assertEquals("numeric", matcher.group(7));
assertEquals(" 123", matcher.group(8));
assertEquals("45", matcher.group(9));
assertEquals("65", matcher.group(10));
assertNull(matcher.group(11));
assertNull(matcher.group(16));
assertNull(matcher.group(18));
matcher = PATTERN_PARAMETER.matcher("[param1,yes, numeric, 123]");
assertFalse(matcher.matches());
/* DURATION */
matcher = PATTERN_PARAMETER.matcher("[param1,false,duration,10D,1h,1M]");
assertTrue(matcher.matches());
assertEquals("param1", matcher.group(2));
assertEquals("false", matcher.group(5));
assertEquals("duration", matcher.group(7));
assertEquals("10D", matcher.group(8));
assertEquals("1h", matcher.group(9));
assertEquals("1M", matcher.group(10));
assertNull(matcher.group(11));
assertNull(matcher.group(16));
assertNull(matcher.group(18));
/* STRING */
matcher = PATTERN_PARAMETER.matcher(" [ param1, true, string , \"foo\" , /toto///i ] ");
assertTrue(matcher.matches());
assertEquals(" param1", matcher.group(2));
assertEquals(" true", matcher.group(5));
assertEquals("string", matcher.group(11));
assertEquals("foo", matcher.group(12));
assertEquals("toto//", matcher.group(13));
assertEquals("i", matcher.group(15));
assertNull(matcher.group(7));
assertNull(matcher.group(16));
assertNull(matcher.group(18));
matcher = PATTERN_PARAMETER.matcher(" [ param1, true, STRING, \"foo\" , /toto///I ] ");
assertTrue(matcher.matches());
assertEquals(" param1", matcher.group(2));
assertEquals(" true", matcher.group(5));
assertEquals("STRING", matcher.group(11));
assertEquals("foo", matcher.group(12));
assertEquals("toto//", matcher.group(13));
assertEquals("I", matcher.group(15));
assertNull(matcher.group(7));
assertNull(matcher.group(16));
assertNull(matcher.group(18));
matcher = PATTERN_PARAMETER.matcher(" [ param1, true, STRING, \"foo\" , /f.*/i ] ");
assertTrue(matcher.matches());
assertEquals(" param1", matcher.group(2));
assertEquals(" true", matcher.group(5));
assertEquals("STRING", matcher.group(11));
assertEquals("foo", matcher.group(12));
assertEquals("f.*", matcher.group(13));
assertEquals("i", matcher.group(15));
assertNull(matcher.group(7));
assertNull(matcher.group(16));
assertNull(matcher.group(18));
// MORE PARAMETER
matcher = PATTERN_PARAMETER.matcher("param1, [ param2, true, STRING, \"foo\" , /toto///I ] ");
assertTrue(matcher.matches());
assertEquals("param1", matcher.group(16));
assertNull(matcher.group(6));
assertNull(matcher.group(7));
assertNull(matcher.group(11));
assertEquals(" [ param2, true, STRING, \"foo\" , /toto///I ] ", matcher.group(18));
matcher = PATTERN_PARAMETER.matcher("param1, ");
assertTrue(matcher.matches());
assertEquals("param1", matcher.group(16));
assertNull(matcher.group(6));
assertNull(matcher.group(7));
assertNull(matcher.group(11));
assertEquals(" ", matcher.group(18));
// CUSTOM CONTROLLER
matcher = PATTERN_PARAMETER.matcher("[param1, {aPackage.MyCustomController} ]");
assertTrue(matcher.matches());
assertEquals("param1", matcher.group(2));
assertEquals("{aPackage.MyCustomController}", matcher.group(4));
assertNull(matcher.group(5));
assertNull(matcher.group(6));
assertNull(matcher.group(16));
assertNull(matcher.group(18));
}
@Test
public void testInitParameters(){
// NO PARAMETER
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", "");
assertFalse(factory.jobParams.containsKey("jobs"));
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", " ");
assertFalse(factory.jobParams.containsKey("jobs"));
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", null);
assertFalse(factory.jobParams.containsKey("jobs"));
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
// PARAMETER WITH NO CONTROLLER
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", "param1");
assertNotNull(factory.jobParams.get("jobs"));
assertEquals(1, factory.jobParams.get("jobs").size());
assertTrue(factory.jobParams.get("jobs").containsKey("param1"));
assertNull(factory.jobParams.get("jobs").get("param1"));
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
// PARAMETER WITH A CUSTOM CONTROLLER
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", "[ param1 , {uws.job.parameters.NumericParamController} ]");
assertNotNull(factory.jobParams.get("jobs"));
assertEquals(1, factory.jobParams.get("jobs").size());
assertTrue(factory.jobParams.get("jobs").containsKey("param1"));
assertNotNull(factory.jobParams.get("jobs").get("param1"));
assertEquals(NumericParamController.class, factory.jobParams.get("jobs").get("param1").getClass());
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
// PARAMETER WITH A STRING CONTROLLER
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", "[ param1 , yes, string, \"blabla\" , /b.*/i ], [ param2 , , string, \"blabla\" , /b.*/ ], [ param3 , false , string, \" a\" , /\\s+[a-zA-Z]/ ]");
assertNotNull(factory.jobParams.get("jobs"));
assertEquals(3, factory.jobParams.get("jobs").size());
// test param1
assertTrue(factory.jobParams.get("jobs").containsKey("param1"));
assertNotNull(factory.jobParams.get("jobs").get("param1"));
assertEquals(StringParamController.class, factory.jobParams.get("jobs").get("param1").getClass());
StringParamController controller = (StringParamController)factory.jobParams.get("jobs").get("param1");
assertEquals("blabla", controller.getDefault());
assertEquals("(?i)b.*", controller.getRegExp());
assertTrue(controller.allowModification());
// test param2
assertTrue(factory.jobParams.get("jobs").containsKey("param2"));
assertNotNull(factory.jobParams.get("jobs").get("param2"));
assertEquals(StringParamController.class, factory.jobParams.get("jobs").get("param2").getClass());
controller = (StringParamController)factory.jobParams.get("jobs").get("param2");
assertEquals("blabla", controller.getDefault());
assertEquals("b.*", controller.getRegExp());
assertTrue(controller.allowModification());
// test param3
assertTrue(factory.jobParams.get("jobs").containsKey("param3"));
assertNotNull(factory.jobParams.get("jobs").get("param3"));
assertEquals(StringParamController.class, factory.jobParams.get("jobs").get("param3").getClass());
controller = (StringParamController)factory.jobParams.get("jobs").get("param3");
assertEquals(" a", controller.getDefault());
assertEquals("\\s+[a-zA-Z]", controller.getRegExp());
assertFalse(controller.allowModification());
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
// PARAMETER WITH A NUMERIC CONTROLLER
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", "[ param1 , yes, numeric, 20, 10,30], [ param2 , , numeric, 0, -10, 10 ], [ param3 , false , numeric, , , 100]");
assertNotNull(factory.jobParams.get("jobs"));
assertEquals(3, factory.jobParams.get("jobs").size());
// test param1
assertTrue(factory.jobParams.get("jobs").containsKey("param1"));
assertNotNull(factory.jobParams.get("jobs").get("param1"));
assertEquals(NumericParamController.class, factory.jobParams.get("jobs").get("param1").getClass());
NumericParamController controller = (NumericParamController)factory.jobParams.get("jobs").get("param1");
assertEquals(20.0, controller.getDefault());
assertEquals(10.0, controller.getMinimum());
assertEquals(30.0, controller.getMaximum());
assertTrue(controller.allowModification());
// test param2
assertTrue(factory.jobParams.get("jobs").containsKey("param2"));
assertNotNull(factory.jobParams.get("jobs").get("param2"));
assertEquals(NumericParamController.class, factory.jobParams.get("jobs").get("param2").getClass());
controller = (NumericParamController)factory.jobParams.get("jobs").get("param2");
assertEquals(0.0, controller.getDefault());
assertEquals(-10.0, controller.getMinimum());
assertEquals(10.0, controller.getMaximum());
assertTrue(controller.allowModification());
// test param3
assertTrue(factory.jobParams.get("jobs").containsKey("param3"));
assertNotNull(factory.jobParams.get("jobs").get("param3"));
assertEquals(NumericParamController.class, factory.jobParams.get("jobs").get("param3").getClass());
controller = (NumericParamController)factory.jobParams.get("jobs").get("param3");
assertNull(controller.getDefault());
assertNull(controller.getMinimum());
assertEquals(100.0, controller.getMaximum());
assertFalse(controller.allowModification());
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
// PARAMETER WITH A DURATION CONTROLLER
try{
ConfigurableUWSFactory factory = new ConfigurableUWSFactory();
factory.initParameters("jobs", "[ param1 , yes, duration, 20sec, 1s, 30 seconds], [ param2 , , duration, 10min, 1 m, 1 hours ], [ param3 , false , duration, 1D , , 1 years]");
assertNotNull(factory.jobParams.get("jobs"));
assertEquals(3, factory.jobParams.get("jobs").size());
// test param1
assertTrue(factory.jobParams.get("jobs").containsKey("param1"));
assertNotNull(factory.jobParams.get("jobs").get("param1"));
assertEquals(DurationParamController.class, factory.jobParams.get("jobs").get("param1").getClass());
DurationParamController controller = (DurationParamController)factory.jobParams.get("jobs").get("param1");
assertEquals(20000l, controller.getDefault());
assertEquals(1000l, controller.getMinimum());
assertEquals(30000l, controller.getMaximum());
assertTrue(controller.allowModification());
// test param2
assertTrue(factory.jobParams.get("jobs").containsKey("param2"));
assertNotNull(factory.jobParams.get("jobs").get("param2"));
assertEquals(DurationParamController.class, factory.jobParams.get("jobs").get("param2").getClass());
controller = (DurationParamController)factory.jobParams.get("jobs").get("param2");
assertEquals(600000l, controller.getDefault());
assertEquals(60000l, controller.getMinimum());
assertEquals(3600000l, controller.getMaximum());
assertTrue(controller.allowModification());
// test param3
assertTrue(factory.jobParams.get("jobs").containsKey("param3"));
assertNotNull(factory.jobParams.get("jobs").get("param3"));
assertEquals(DurationParamController.class, factory.jobParams.get("jobs").get("param3").getClass());
controller = (DurationParamController)factory.jobParams.get("jobs").get("param3");
assertEquals(86400000l, controller.getDefault());
assertNull(controller.getMinimum());
assertEquals(31536000000l, controller.getMaximum());
assertFalse(controller.allowModification());
}catch(UWSException ue){
ue.printStackTrace(System.err);
fail("Unexpected error! See the console for a full stack trace.");
}
}
}