package thredds.servlet; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; import thredds.catalog.InvCatalogFactory; import thredds.catalog.InvCatalogImpl; import thredds.catalog.InvDataset; import thredds.catalog.InvDatasetImpl; import thredds.server.viewer.dataservice.ViewerServiceImpl; import java.net.URI; import java.net.URISyntaxException; import java.util.List; import static org.junit.Assert.*; /** * _more_ * * @author edavis * @since 4.1 */ public class StaticViewerTest { @Test public void checkViewerPropertyWithUrlReplacement() throws URISyntaxException { String host = "http://test.thredds.servlet.StaticViewerTest"; String contextPath = "/thredds"; String servletPath = "/catalog"; String catPathNoExtension = "/checkViewerPropertyWithUrlReplacement"; String docBaseUriString = host + contextPath + servletPath + catPathNoExtension + ".xml"; URI docBaseUri = new URI( docBaseUriString ); String catalogAsString = setupCatDsWithViewerProperty( "viewer1", "{url}.info,DS info" ); InvDataset ds1 = constructCatalogAndAssertAsExpected( docBaseUri, catalogAsString ); MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod( "GET" ); request.setContextPath( contextPath ); request.setServletPath( servletPath ); request.setPathInfo( catPathNoExtension + ".html" ); request.setParameter( "dataset", "ds1" ); ViewerLinkProvider sv = ViewerServiceImpl.getStaticView(); List<ViewerLinkProvider.ViewerLink> viewerLinks = sv.getViewerLinks( (InvDatasetImpl) ds1, request ); assertNotNull( viewerLinks); assertEquals( 1, viewerLinks.size()); ViewerLinkProvider.ViewerLink vl = viewerLinks.get( 0 ); assertNotNull( vl); assertEquals( "DS info", vl.getTitle()); assertEquals( host + contextPath + "/dodsC" + "/test/ds1.nc.info", vl.getUrl()); } @Test public void checkViewerPropertyWithOpendapReplacement() throws URISyntaxException { String host = "http://test.thredds.servlet.StaticViewerTest"; String contextPath = "/thredds"; String servletPath = "/catalog"; String catPathNoExtension = "/checkViewerPropertyWithOpendapReplacement"; String docBaseUriString = host + contextPath + servletPath + catPathNoExtension + ".xml"; URI docBaseUri = new URI( docBaseUriString ); String catalogAsString = setupCatDsWithViewerProperty( "viewer1", "{OPENDAP}.info,ODAP DS info" ); InvDataset ds1 = constructCatalogAndAssertAsExpected( docBaseUri, catalogAsString ); MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod( "GET" ); request.setContextPath( contextPath ); request.setServletPath( servletPath ); request.setPathInfo( catPathNoExtension + ".html" ); request.setParameter( "dataset", "ds1" ); ViewerLinkProvider sv = ViewerServiceImpl.getStaticView(); List<ViewerLinkProvider.ViewerLink> viewerLinks = sv.getViewerLinks( (InvDatasetImpl) ds1, request ); assertNotNull( viewerLinks); assertEquals( 1, viewerLinks.size()); ViewerLinkProvider.ViewerLink vl = viewerLinks.get( 0 ); assertNotNull( vl); assertEquals( "ODAP DS info", vl.getTitle()); assertEquals( host + contextPath + "/dodsC" + "/test/ds1.nc.info", vl.getUrl()); } @Test public void checkViewerPropertyWithRemoteWmsReplacement() throws URISyntaxException { String host = "http://test.thredds.servlet.StaticViewerTest"; String contextPath = "/thredds"; String servletPath = "/catalog"; String catPathNoExtension = "/checkViewerPropertyWithOpendapReplacement"; String docBaseUriString = host + contextPath + servletPath + catPathNoExtension + ".xml"; URI docBaseUri = new URI( docBaseUriString ); String catalogAsString = setupCatDsWithViewerProperty( "viewer1", "{REMOTEWMS}.info,RemoteWms DS info" ); InvDataset ds1 = constructCatalogAndAssertAsExpected( docBaseUri, catalogAsString ); MockHttpServletRequest request = new MockHttpServletRequest(); request.setMethod( "GET" ); request.setContextPath( contextPath ); request.setServletPath( servletPath ); request.setPathInfo( catPathNoExtension + ".html" ); request.setParameter( "dataset", "ds1" ); ViewerLinkProvider sv = ViewerServiceImpl.getStaticView(); List<ViewerLinkProvider.ViewerLink> viewerLinks = sv.getViewerLinks( (InvDatasetImpl) ds1, request ); assertNotNull( viewerLinks); assertEquals( 1, viewerLinks.size()); ViewerLinkProvider.ViewerLink vl = viewerLinks.get( 0 ); assertNotNull( vl); assertEquals( "RemoteWms DS info", vl.getTitle()); assertEquals( "http://server/thredds/wms/test/ds1.nc.info", vl.getUrl()); } private InvDataset constructCatalogAndAssertAsExpected( URI docBaseUri, String catalogAsString ) { InvCatalogFactory fac = InvCatalogFactory.getDefaultFactory( true ); InvCatalogImpl catalog = fac.readXML( catalogAsString, docBaseUri ); StringBuilder log = new StringBuilder(); boolean isValid = catalog.check( log ); assertTrue( "Invalid catalog:\n" + log.toString(), isValid ); List<InvDataset> datasets = catalog.getDatasets(); assertNotNull( datasets); assertEquals( 1, datasets.size()); InvDataset ds1 = datasets.get( 0 ); assertNotNull( ds1); assertEquals( "ds 1", ds1.getName()); return ds1; } private static String setupCatDsWithViewerProperty( String viewerName, String viewerValue) { StringBuilder sb = new StringBuilder() .append( "<?xml version='1.0' encoding='UTF-8'?>\n" ) .append( "<catalog xmlns='http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0'\n" ) .append( " xmlns:xlink='http://www.w3.org/1999/xlink'\n" ) .append( " name='Catalog 1'\n" ) .append( " version='1.0.3'>\n" ) .append( " <service name='all' serviceType='Compound' base=''>\n" ) .append( " <service name='odap' serviceType='OPENDAP' base='/thredds/dodsC/' />\n" ) .append( " <service name='wcs' serviceType='WCS' base='/thredds/wcs/' />\n" ) .append( " <service name='wms' serviceType='WMS' base='/thredds/wms/' />\n" ) .append( " <service name='remoteWMS' serviceType='REMOTEWMS' base='http://server/thredds/wms/' />\n" ) .append( " </service>\n" ) .append( " <dataset name='ds 1' ID='ds1' urlPath='test/ds1.nc'>\n" ) .append( " <metadata inherited='true'>\n" ) .append( " <serviceName>all</serviceName>\n" ) .append( " </metadata>\n" ) .append( " <property name='" ).append( viewerName ) .append( "' value='" ).append( viewerValue ).append( "' />\n" ) .append( " </dataset>\n" ) .append( "</catalog>" ); //return CatalogXmlUtils.wrapThreddsXmlInCatalogWithCompoundService( sb.toString(), "Catalog 1", "1.0.3", null ); return sb.toString(); } }