/* * This file is a part of EpnTAPClient. * This program aims to provide EPN-TAP support for software clients, like CASSIS spectrum analyzer. * See draft specifications: https://voparis-confluence.obspm.fr/pages/viewpage.action?pageId=559861 * Copyright (C) 2016 Institut de Recherche en Astrophysique et Planétologie. * * This program is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public License as published * by the Free Software Foundation, either version 3 of the License, or (at your option) any later * version. This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. You should have received a copy of * the GNU General Public License along with this program. If not, see * . */ package eu.omp.irap.vespa.epntapclient; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.logging.Logger; import org.junit.Test; import eu.omp.irap.vespa.epntapclient.epntap.service.Service; import eu.omp.irap.vespa.epntapclient.epntap.service.ServiceCtrl; import eu.omp.irap.vespa.epntapclient.granule.Granule; import eu.omp.irap.vespa.epntapclient.voresource.VOResourceException; import eu.omp.irap.vespa.epntapclient.voresource.model.Resource; import eu.omp.irap.vespa.epntapclient.votable.model.VOTABLE; import eu.omp.irap.vespa.votable.votable.VOTableException; import eu.omp.irap.vespa.votable.votabledata.VOTableData; /** * @author N. Jourdane */ @SuppressWarnings("static-method") public class EpnTapConnectionTest { /** The AMDA access URL, for testing purposes. */ private static final String AMDA_ACCESS_URL = "http://cdpp-epntap.cesr.fr/__system__/tap/run/tap"; /** The AMDA ivoid, for testing purposes. */ private static final String AMDA_IVOID = "ivo://cdpp/amda"; /** The AMDA short name (to compare with the returned value), for testing purposes. */ private static final String AMDA_SHORT_NAME = "AMDA"; /** A subject associated with the AMDA service, for testing purposes. */ private static final String AMDA_SUBJECT = "Space plasmas"; /** The API ivoid, for testing purposes. */ private static final String APIS_IVOID = "ivo://vopdc.obspm/lesia/apis/epn"; /** The APIS short name (to compare with the returned value), for testing purposes. */ private static final String APIS_SHORT_NAME = "APIS"; /** The logger for the class Main. */ private static final Logger LOGGER = Logger.getLogger(EpnTapConnectionTest.class.getName()); /** The URL access of a service implementing the EpnCorev2, for testing purposes. */ private static final String SERVICE_EPNCOREV2_ACCESS_URL = "http://voparis-tap-planeto.obspm.fr/__system__/tap/run/tap"; /** A query to send to a service implementing the EpnCorev2, for testing purposes */ private static final String SERVICE_EPNCOREV2_QUERY = "SELECT * FROM planets.epn_core"; /** The table name of a service implementing the EpnCorev2, for testing purposes. */ private static final String SERVICE_EPNCOREV2_TABLE_NAME = "planets.epn_core"; // *** VOResources *** /** * Unit test for the class {@link EpnTapConnection#getEPNCoreTableName(String)}. * * @throws VOTableException Can not get the VOTable corresponding to the service. */ @Test public void getEPNCoreTableNameTest() throws VOTableException { LOGGER.info("getEPNCoreTableNameTest"); EpnTapConnection facade = new EpnTapConnection(); String epnCoreTableName = facade.getEPNCoreTableName(AMDA_IVOID); assertEquals("amdadb.epn_core", epnCoreTableName); } /** * Unit test for the class {@link EpnTapConnection#getEPNServices()}. * * @throws VOTableException Can not get the VOTable corresponding to the service. */ @Test public void getEPNServicesTest() throws VOTableException { LOGGER.info("getEPNServicesTest"); EpnTapConnection facade = new EpnTapConnection(); VOTABLE voTable = facade.getEPNServices(); VOTableData data = ServiceCtrl.getVoTableData(voTable); List services = ServiceCtrl.getServices(data); boolean foundAMDAIvoid = false; for (Service service : services) { if (AMDA_IVOID.equals(service.getIvoid())) { foundAMDAIvoid = true; assertEquals(AMDA_SHORT_NAME, service.getShortName()); } } assertTrue("AMDA service is not found.", foundAMDAIvoid); int nbServices = data.getNbRows(); assertTrue(nbServices + " ∉ [13;20].", nbServices >= 13 && nbServices <= 20); assertTrue("Column name short_name not found.", data.isContainingColumnName("short_name")); assertTrue("AMDA ivoid not found.", data.isColumnContainingValue("ivoid", AMDA_IVOID)); Map amda = data.getRowMapByValue("ivoid", AMDA_IVOID); assertEquals(AMDA_ACCESS_URL, amda.get("access_url")); assertEquals(AMDA_SHORT_NAME, amda.get("short_name")); } /** * Unit test for the class {@link EpnTapConnection#getEPNServices(List)}. * * @throws VOTableException Can not get the VOTable corresponding to the service. */ @Test public void getEPNServicesWithAttributesTest() throws VOTableException { LOGGER.info("getEPNServicesWithAttributesTest"); EpnTapConnection facade = new EpnTapConnection(); final List attributes = new ArrayList<>(); attributes.add("access_url"); attributes.add("short_name"); VOTABLE voTable = facade.getEPNServices(attributes); VOTableData data = ServiceCtrl.getVoTableData(voTable); assertEquals(2, data.getNbColumns()); assertTrue("Column name access_url not found.", data.isContainingColumnName("access_url")); assertTrue("Column name short_name not found.", data.isContainingColumnName("short_name")); assertTrue("AMDA short_name not found.", data.isColumnContainingValue("short_name", AMDA_SHORT_NAME)); assertTrue("AMDA access_url not found.", data.isColumnContainingValue("access_url", AMDA_ACCESS_URL)); Map amda = data.getRowMapByValue("short_name", AMDA_SHORT_NAME); assertEquals(AMDA_ACCESS_URL, amda.get("access_url")); assertEquals(AMDA_SHORT_NAME, amda.get("short_name")); } // *** Services *** /** * Unit test for the class {@link EpnTapConnection#getEPNServices(List, List)}. * * @throws VOTableException Can not get the VOTable corresponding to the service. * @throws VOResourceException Can not get the VOresource. */ @Test public void getEPNServicesWithKeywordsAndAttributesTest() throws VOTableException, VOResourceException { LOGGER.info("getEPNServicesWithKeywordsAndAttributesTest"); EpnTapConnection facade = new EpnTapConnection(); final List keywords = new ArrayList<>(); keywords.add(AMDA_SUBJECT); final List attributes = new ArrayList<>(); attributes.add("access_url"); attributes.add("short_name"); VOTABLE voTable = facade.getEPNServices(keywords, attributes); VOTableData data = ServiceCtrl.getVoTableData(voTable); assertEquals(3, data.getNbColumns()); assertEquals(1, data.getNbRows()); assertTrue("Column name access_url not found.", data.isContainingColumnName("access_url")); assertTrue("Column name short_name not found.", data.isContainingColumnName("short_name")); assertTrue("AMDA short_name not found.", data.isColumnContainingValue("short_name", AMDA_SHORT_NAME)); assertTrue("AMDA access_url not found.", data.isColumnContainingValue("access_url", AMDA_ACCESS_URL)); assertEquals(AMDA_SHORT_NAME, data.getCell(0, "short_name")); assertEquals(AMDA_ACCESS_URL, data.getCell(0, "access_url")); } /** * Unit test for the class {@link EpnTapConnection#getEPNService(String)}. * * @throws VOTableException Can not get the VOTable corresponding to the service. */ @Test public void getEPNServiceTest() throws VOTableException { LOGGER.info("getEPNServiceTest"); EpnTapConnection facade = new EpnTapConnection(); VOTABLE voTable = facade.getEPNService(AMDA_IVOID); VOTableData data = ServiceCtrl.getVoTableData(voTable); assertEquals(1, data.getNbRows()); assertTrue("Column name ivoid not found.", data.isContainingColumnName("ivoid")); assertTrue("Column name short_name not found.", data.isContainingColumnName("access_url")); assertTrue("Column name short_name not found.", data.isContainingColumnName("short_name")); assertEquals(AMDA_IVOID, data.getCell(0, "ivoid")); assertEquals(AMDA_ACCESS_URL, data.getCell(0, "access_url")); assertEquals(AMDA_SHORT_NAME, data.getCell(0, "short_name")); } /** * Unit test for the class {@link EpnTapConnection#getEPNService(String, List)}. * * @throws VOTableException Can not get the VOTable corresponding to the service. */ @Test public void getEPNServiceWithAttributesTest() throws VOTableException { LOGGER.info("getEPNServiceWithAttributesTest"); EpnTapConnection facade = new EpnTapConnection(); final List attributes = new ArrayList<>(); attributes.add("access_url"); attributes.add("short_name"); VOTABLE voTable = facade.getEPNService(AMDA_IVOID, attributes); VOTableData data = ServiceCtrl.getVoTableData(voTable); assertEquals(1, data.getNbRows()); assertEquals(2, data.getNbColumns()); assertTrue("Column name short_name not found.", data.isContainingColumnName("access_url")); assertTrue("Column name short_name not found.", data.isContainingColumnName("short_name")); assertEquals(AMDA_ACCESS_URL, data.getCell(0, "access_url")); assertEquals(AMDA_SHORT_NAME, data.getCell(0, "short_name")); } /** * Unit test for the class {@link EpnTapConnection#getEPNVOResources()}. * * @throws VOResourceException Can not get the VOresource. */ @Test public void getEPNVOResourcesTest() throws VOResourceException { LOGGER.info("getEPNVOResourcesTest"); EpnTapConnection facade = new EpnTapConnection(); List resources = facade.getEPNVOResources(); int nbResources = resources.size(); assertTrue(nbResources + " ∉ [13;20]", nbResources >= 13 && nbResources <= 20); Resource amda = null; Resource apis = null; for (Resource resource : resources) { if (AMDA_IVOID.equals(resource.getIdentifier())) { amda = resource; } if (APIS_IVOID.equals(resource.getIdentifier())) { apis = resource; } } assertNotNull("AMDA resource should be present.", amda); assertNotNull("APIS resource should be present.", apis); assertEquals(AMDA_SHORT_NAME, amda.getShortName()); assertEquals(APIS_SHORT_NAME, apis.getShortName()); } /** * Unit test for the class {@link EpnTapConnection#getEPNVOResources(List)}. * * @throws VOResourceException Can not get the VOresource. */ @Test public void getEPNVOResourcesWithKeywordsTest() throws VOResourceException { LOGGER.info("getEPNVOResourcesWithKeywordsTest"); EpnTapConnection facade = new EpnTapConnection(); final List keywords = new ArrayList<>(); keywords.add(AMDA_SUBJECT); List resources = facade.getEPNVOResources(keywords); assertEquals(resources.size(), 1); Resource amda = null; for (Resource resource : resources) { if (AMDA_IVOID.equals(resource.getIdentifier())) { amda = resource; } } assertNotNull("AMDA resource should be present.", amda); } // *** Getters *** /** * Unit test for the class {@link EpnTapConnection#getTAPURL(String)}. * * @throws VOTableException Can not get the VOTable corresponding to the service. */ @Test public void getTAPURLTest() throws VOTableException { LOGGER.info("getTAPURLTest"); EpnTapConnection facade = new EpnTapConnection(); String tapURL = facade.getTAPURL("ivo://cdpp/amda"); assertEquals("http://cdpp-epntap.cesr.fr/__system__/tap/run/tap", tapURL); } /** * Unit test for the class {@link EpnTapConnection#getEPNVOresource(String)}. * * @throws VOResourceException Can not get the VOresource. */ @Test public void getVOResourceTest() throws VOResourceException { LOGGER.info("getVOResourceTest"); EpnTapConnection facade = new EpnTapConnection(); Resource resource = facade.getEPNVOresource(AMDA_IVOID); assertEquals("AMDA", resource.getShortName()); assertEquals("CDPP AMDA DataBase", resource.getTitle()); assertEquals("Centre de Données de la Physique des Plasmas", resource.getCuration().getCreator().get(0).getName().getValue()); } // *** Queries *** /** * Unit test for the class {@link EpnTapConnection#sendADQLQuery(String, String)}. * * @throws VOTableException Can not get the VOTable resulting the query. */ @Test public void sendADQLQueryTest() throws VOTableException { LOGGER.info("sendADQLQueryTest"); EpnTapConnection facade = new EpnTapConnection(); List granules = facade.sendADQLQuery(SERVICE_EPNCOREV2_ACCESS_URL, SERVICE_EPNCOREV2_QUERY); assertNotNull("Granules list not returned.", granules); assertEquals(8, granules.size()); Granule mars = null; for (Granule granule : granules) { if ("Mars".equals(granule.getGranuleUid())) { mars = granule; } } assertNotNull("granule 'Mars' is not found.", mars); assertEquals("4", mars.getObsId()); assertEquals(new Integer(5), mars.getProcessingLevel()); } /** * Unit test for the class {@link EpnTapConnection#sendQuery(String, String, Query)}. * * @throws VOTableException Can not get the VOTable resulting the query. */ @Test public void sendADQLQueryWithSchemaNameTest() throws VOTableException { LOGGER.info("sendADQLQueryWithSchemaNameTest"); EpnTapConnection facade = new EpnTapConnection(); List granules = facade.sendQuery(SERVICE_EPNCOREV2_ACCESS_URL, SERVICE_EPNCOREV2_TABLE_NAME, Query.GET_SCENE_FROM_TARGET_AND_TIME_INTERVAL); assertNotNull("Granules list not returned.", granules); assertEquals(8, granules.size()); Granule mars = null; for (Granule granule : granules) { if ("Mars".equals(granule.getGranuleUid())) { mars = granule; } } assertNotNull("granule 'Mars' is not found.", mars); assertEquals("4", mars.getObsId()); assertEquals(new Integer(5), mars.getProcessingLevel()); } }