package thredds.server.ncss.validation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import org.junit.BeforeClass;
import org.junit.Test;
import thredds.server.ncss.params.NcssParamsBean;
public class NcssRequestParamsBeanTest {
private static Validator validator;
private static Properties resolver = new Properties();
@BeforeClass
public static void setUp() {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
Class c = resolver.getClass();
InputStream is = c.getResourceAsStream ("/ValidationMessages.properties");
if (is != null) {
try {
resolver.load(is);
resolver.list(System.out);
is.close();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
@Test
public void testNcssRequestParamsBeanVarsAll() {
NcssParamsBean params = new NcssParamsBean();
List<String> varsAll = new ArrayList<String>();
varsAll.add("all");
params.setVar(varsAll);
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertTrue(constraintViolations.isEmpty());
}
@Test
public void testNcssRequestParamsBeanValidTimeRange() {
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setLongitude(-105.0);
params.setVar(Arrays.asList("var1", "var2"));
//params.setPoint(true);
params.setTime_start("2012-03-27T00:00:00Z");
//params.setTime_start("2012-0-27T08:00:00+0200");
params.setTime_end("2012-03-28");
params.setAccept("text/csv");
//params.setTime_duration("PT18H");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertTrue(constraintViolations.isEmpty());
}
@Test
public void testNcssRequestParamsBeanTimeRangeIncomplete() {
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setLongitude(-105.0);
params.setVar(Arrays.asList("var1", "var2"));
//params.setPoint(true);
params.setAccept("text/csv");
params.setTime_start("present");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(1, constraintViolations.size());
assertEquals(resolver.get("thredds.server.ncSubset.validation.time.range"), constraintViolations.iterator().next().getMessage());
}
@Test
public void testNcssRequestParamsBeanTimePresent() {
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setLongitude(-105.0);
params.setVar(Arrays.asList("var1", "var2"));
//params.setPoint(true);
params.setAccept("text/csv");
params.setTime("present");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertTrue(constraintViolations.isEmpty());
}
@Test
public void testNcssRequestParamsBeanTimeInvalidFormat() {
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setLongitude(-105.0);
params.setVar(Arrays.asList("var1", "var2"));
//params.setPoint(true);
params.setAccept("text/csv");
params.setTime("2012x0327");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(1, constraintViolations.size());
Object expect = resolver.get("thredds.server.ncSubset.validation.param.time");
assertEquals(expect, constraintViolations.iterator().next().getMessage());
}
@Test
public void testNcssRequestParamsBeanInvalidTimeDuration() {
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setLongitude(-105.0);
params.setVar(Arrays.asList("var1", "var2"));
//params.setPoint(true);
params.setAccept("text/csv");
params.setTime_start("2012-03-27T00:00:00Z");
params.setTime_duration("fff");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(1, constraintViolations.size());
assertEquals(resolver.get("thredds.server.ncSubset.validation.param.time_duration"), constraintViolations.iterator().next().getMessage());
}
@Test
public void testNcssRequestParamsBeanInvalidTimeWindow() {
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setLongitude(-105.0);
params.setVar(Arrays.asList("var1", "var2"));
//params.setPoint(true);
params.setAccept("text/csv");
params.setTime("2012-03-27T00:00:00Z");
params.setTime_window("fff");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(1, constraintViolations.size());
assertEquals(resolver.get("thredds.server.ncSubset.validation.param.time_window"), constraintViolations.iterator().next().getMessage());
}
@Test
public void testNcssMissingLatLon(){
NcssParamsBean params = new NcssParamsBean();
params.setLongitude(-105.0);
params.setVar( Arrays.asList("var1", "var2") );
params.setAccept("text/csv");
params.setTime("2012-03-27T00:00:00Z");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(1 , constraintViolations.size());
assertEquals(resolver.get("thredds.server.ncSubset.validation.lat_or_lon_missing"), constraintViolations.iterator().next().getMessage());
}
@Test
public void testNcssInvalidSubsetTypeMissingLon(){
NcssParamsBean params = new NcssParamsBean();
params.setLatitude(42.04);
params.setVar( Arrays.asList("var1", "var2") );
params.setAccept("text/csv");
params.setTime("2012-03-27T00:00:00Z");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(1 , constraintViolations.size());
assertEquals(resolver.get("thredds.server.ncSubset.validation.lat_or_lon_missing"), constraintViolations.iterator().next().getMessage());
}
@Test
public void testNcssBBSubsetType(){
NcssParamsBean params = new NcssParamsBean();
params.setNorth(43.0);
params.setSouth(38.0);
params.setWest(-107.0);
params.setEast(-102.0);
params.setVar( Arrays.asList("var1", "var2") );
params.setAccept("text/csv");
params.setTime("2012-03-27T00:00:00Z");
Set<ConstraintViolation<NcssParamsBean>> constraintViolations = validator.validate(params);
assertEquals(0 , constraintViolations.size());
//assertEquals("Wrong subset type", constraintViolations.iterator().next().getMessage());
}
}