package thredds.server.ncss;
import com.eclipsesource.restfuse.Destination;
import com.eclipsesource.restfuse.HttpJUnitRunner;
import com.eclipsesource.restfuse.Method;
import com.eclipsesource.restfuse.Response;
import com.eclipsesource.restfuse.annotation.Context;
import com.eclipsesource.restfuse.annotation.HttpTest;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.filter.Filters;
import org.jdom2.input.SAXBuilder;
import org.jdom2.xpath.XPathExpression;
import org.jdom2.xpath.XPathFactory;
import org.junit.Rule;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import thredds.TestWithLocalServer;
import ucar.nc2.NetcdfFile;
import ucar.nc2.dataset.NetcdfDataset;
import ucar.unidata.util.test.category.NeedsCdmUnitTest;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.util.List;
import static com.eclipsesource.restfuse.Assert.assertOk;
import static org.junit.Assert.*;
/*
These tests fail on jenkins, but work locally
*/
@RunWith(HttpJUnitRunner.class)
@Category(NeedsCdmUnitTest.class)
public class NcssIntegrationTest {
@Rule
public Destination destination = new Destination(TestWithLocalServer.server);
@Context
private Response response; // will be injected after every request
@HttpTest(method = Method.GET, path = "ncss/gribCollection/GFS_CONUS_80km/GFS_CONUS_80km_20120227_0000.grib1/GC?var=Temperature_isobaric&latitude=40&longitude=-102&vertCoord=225")
public void checkGoodRequest() throws JDOMException, IOException {
assertOk(response);
String xml = response.getBody(String.class);
System.out.printf("xml=%s%n", xml);
Reader in = new StringReader(xml);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(in);
XPathExpression<Element> xpath = XPathFactory.instance().compile("/grid/point/data[@name='Temperature_isobaric']", Filters.element());
List<Element> elements = xpath.evaluate(doc);
assertEquals(1, elements.size());
}
@HttpTest(method = Method.GET, path = "ncss/gribCollection/GFS_CONUS_80km/GFS_CONUS_80km_20120227_0000.grib1/GC?var=Temperature_isobaric")
public void getSomeBinaryDataRequest() throws IOException {
assertOk(response);
assertTrue(response.hasBody());
NetcdfFile nf = NetcdfFile.openInMemory("test_data.ncs", response.getBody(byte[].class));
ucar.nc2.dt.grid.GridDataset gdsDataset = new ucar.nc2.dt.grid.GridDataset(new NetcdfDataset(nf));
assertNotNull(gdsDataset.findGridByName("Temperature_isobaric"));
}
}