Skip to content

Commit

Permalink
Merge pull request #161 from yeunga/cadc-9964
Browse files Browse the repository at this point in the history
Cadc 9964 Add CadcNraoResolver for storage inventory
  • Loading branch information
pdowler committed Sep 15, 2021
2 parents 36b7b02 + 838ed47 commit a7a2768
Show file tree
Hide file tree
Showing 7 changed files with 290 additions and 20 deletions.
2 changes: 1 addition & 1 deletion caom2-artifact-resolvers/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ sourceCompatibility = 1.8

group = 'org.opencadc'

version = '1.2.4'
version = '1.2.5'

description = 'OpenCADC CAOM artifact resolvers library'
def git_url = 'https://github.com/opencadc/caom2'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
******************* CANADIAN ASTRONOMY DATA CENTRE *******************
************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
*
* (c) 2018. (c) 2018.
* (c) 2021. (c) 2021.
* Government of Canada Gouvernement du Canada
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
Expand Down Expand Up @@ -84,19 +84,21 @@
*/
public class CadcGeminiResolver implements StorageResolver, Traceable {
public static final String SCHEME = "gemini";
protected static final String GEM_ARCHIVE = "GEM";
protected static final String GEMINI_ARCHIVE = "GEMINI";
private static final Logger log = Logger.getLogger(CadcGeminiResolver.class);

@Override
public URL toURL(URI uri) {
ResolverUtil.validate(uri, SCHEME);

try {
AdResolver adResolver = new AdResolver();
return adResolver.toURL(URI.create(AdResolver.SCHEME + ":" + uri.getSchemeSpecificPart()));
} catch (Throwable t) {
String message = "Failed to convert to data URL";
throw new RuntimeException(message, t);

StorageResolver resolver = new CadcResolver(SCHEME);
if (uri.getSchemeSpecificPart().startsWith(GEM_ARCHIVE + "/")) {
resolver = new AdResolver();
uri = URI.create(AdResolver.SCHEME + ":" + uri.getSchemeSpecificPart());
}

return resolver.toURL(uri);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/*
************************************************************************
******************* CANADIAN ASTRONOMY DATA CENTRE *******************
************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
*
* (c) 2021. (c) 2021.
* Government of Canada Gouvernement du Canada
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
* All rights reserved Tous droits réservés
*
* NRC disclaims any warranties, Le CNRC dénie toute garantie
* expressed, implied, or énoncée, implicite ou légale,
* statutory, of any kind with de quelque nature que ce
* respect to the software, soit, concernant le logiciel,
* including without limitation y compris sans restriction
* any warranty of merchantability toute garantie de valeur
* or fitness for a particular marchande ou de pertinence
* purpose. NRC shall not be pour un usage particulier.
* liable in any event for any Le CNRC ne pourra en aucun cas
* damages, whether direct or être tenu responsable de tout
* indirect, special or general, dommage, direct ou indirect,
* consequential or incidental, particulier ou général,
* arising from the use of the accessoire ou fortuit, résultant
* software. Neither the name de l'utilisation du logiciel. Ni
* of the National Research le nom du Conseil National de
* Council of Canada nor the Recherches du Canada ni les noms
* names of its contributors may de ses participants ne peuvent
* be used to endorse or promote être utilisés pour approuver ou
* products derived from this promouvoir les produits dérivés
* software without specific prior de ce logiciel sans autorisation
* written permission. préalable et particulière
* par écrit.
*
* This file is part of the Ce fichier fait partie du projet
* OpenCADC project. OpenCADC.
*
* OpenCADC is free software: OpenCADC est un logiciel libre ;
* you can redistribute it and/or vous pouvez le redistribuer ou le
* modify it under the terms of modifier suivant les termes de
* the GNU Affero General Public la “GNU Affero General Public
* License as published by the License” telle que publiée
* Free Software Foundation, par la Free Software Foundation
* either version 3 of the : soit la version 3 de cette
* License, or (at your option) licence, soit (à votre gré)
* any later version. toute version ultérieure.
*
* OpenCADC is distributed in the OpenCADC est distribué
* hope that it will be useful, dans l’espoir qu’il vous
* but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE
* without even the implied GARANTIE : sans même la garantie
* warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ
* or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF
* PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence
* General Public License for Générale Publique GNU Affero
* more details. pour plus de détails.
*
* You should have received Vous devriez avoir reçu une
* a copy of the GNU Affero copie de la Licence Générale
* General Public License along Publique GNU Affero avec
* with OpenCADC. If not, see OpenCADC ; si ce n’est
* <http://www.gnu.org/licenses/>. pas le cas, consultez :
* <http://www.gnu.org/licenses/>.
*
*
************************************************************************
*/


package ca.nrc.cadc.caom2.artifact.resolvers;

import ca.nrc.cadc.caom2.artifact.resolvers.util.ResolverUtil;
import ca.nrc.cadc.net.StorageResolver;
import ca.nrc.cadc.net.Traceable;
import java.net.URI;
import java.net.URL;
import org.apache.log4j.Logger;

/**
* StorageResolver implementation for the VLASS archive.
* This class can convert a VLASS URI into a URL. The conversion is delegated to the AdResolver.
*
* @author yeunga
*/
public class CadcNraoResolver implements StorageResolver, Traceable {
public static final String SCHEME = "nrao";
protected static final String VLASS_ARCHIVE = "VLASS";
private static final Logger log = Logger.getLogger(CadcNraoResolver.class);

@Override
public URL toURL(URI uri) {
ResolverUtil.validate(uri, SCHEME);

StorageResolver cadcResolver = new CadcResolver(SCHEME);
return cadcResolver.toURL(uri);
}

@Override
public String getScheme() {
return SCHEME;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,9 @@ public class CadcGeminiResolverTest {
Log4jInit.setLevel("ca.nrc.cadc", Level.INFO);
}

private static final String FILE_URI = "gemini:GEM/bar.fits";
private static final String INVALID_SCHEME_URI1 = "ad://cadc.nrc.ca!vospace/FOO/bar";
private static final String AD_FILE_URI = "gemini:GEM/bar.fits";
private static final String CADC_FILE_URI = "gemini:GEMINI/bar.fits";
private static final String INVALID_SCHEME_URI = "ad://cadc.nrc.ca!vault/FOO/bar";

CadcGeminiResolver cadcGeminiResolver = new CadcGeminiResolver();

Expand All @@ -110,10 +111,13 @@ public void testTraceable() {
@Test
public void testToURL() {
try {
URI uri = new URI(FILE_URI);
URL url = cadcGeminiResolver.toURL(uri);
Assert.assertNotNull(url);
log.info("testFile: " + uri + " -> " + url);
// gemini:GEM
URI uri = new URI(AD_FILE_URI);
verifyURL(uri, "/data/pub");

// gemini:GEMINI
uri = new URI(CADC_FILE_URI);
verifyURL(uri, "/raven/files");
} catch (Exception unexpected) {
log.error("unexpected exception", unexpected);
Assert.fail("unexpected exception: " + unexpected);
Expand All @@ -123,7 +127,7 @@ public void testToURL() {
@Test
public void testInvalidSchemeURI() {
try {
URI uri = new URI(INVALID_SCHEME_URI1);
URI uri = new URI(INVALID_SCHEME_URI);
URL url = cadcGeminiResolver.toURL(uri);
Assert.fail("expected IllegalArgumentException, got " + url);
} catch (IllegalArgumentException expected) {
Expand All @@ -134,4 +138,11 @@ public void testInvalidSchemeURI() {
Assert.fail("unexpected exception: " + unexpected);
}
}

private void verifyURL(URI uri, String path) {
URL url = cadcGeminiResolver.toURL(uri);
Assert.assertNotNull(url);
log.info("testFile: " + uri + " -> " + url);
Assert.assertTrue("incorrect URL: " + url, url.toString().contains(path));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
/*
************************************************************************
******************* CANADIAN ASTRONOMY DATA CENTRE *******************
************** CENTRE CANADIEN DE DONNÉES ASTRONOMIQUES **************
*
* (c) 2017. (c) 2017.
* Government of Canada Gouvernement du Canada
* National Research Council Conseil national de recherches
* Ottawa, Canada, K1A 0R6 Ottawa, Canada, K1A 0R6
* All rights reserved Tous droits réservés
*
* NRC disclaims any warranties, Le CNRC dénie toute garantie
* expressed, implied, or énoncée, implicite ou légale,
* statutory, of any kind with de quelque nature que ce
* respect to the software, soit, concernant le logiciel,
* including without limitation y compris sans restriction
* any warranty of merchantability toute garantie de valeur
* or fitness for a particular marchande ou de pertinence
* purpose. NRC shall not be pour un usage particulier.
* liable in any event for any Le CNRC ne pourra en aucun cas
* damages, whether direct or être tenu responsable de tout
* indirect, special or general, dommage, direct ou indirect,
* consequential or incidental, particulier ou général,
* arising from the use of the accessoire ou fortuit, résultant
* software. Neither the name de l'utilisation du logiciel. Ni
* of the National Research le nom du Conseil National de
* Council of Canada nor the Recherches du Canada ni les noms
* names of its contributors may de ses participants ne peuvent
* be used to endorse or promote être utilisés pour approuver ou
* products derived from this promouvoir les produits dérivés
* software without specific prior de ce logiciel sans autorisation
* written permission. préalable et particulière
* par écrit.
*
* This file is part of the Ce fichier fait partie du projet
* OpenCADC project. OpenCADC.
*
* OpenCADC is free software: OpenCADC est un logiciel libre ;
* you can redistribute it and/or vous pouvez le redistribuer ou le
* modify it under the terms of modifier suivant les termes de
* the GNU Affero General Public la “GNU Affero General Public
* License as published by the License” telle que publiée
* Free Software Foundation, par la Free Software Foundation
* either version 3 of the : soit la version 3 de cette
* License, or (at your option) licence, soit (à votre gré)
* any later version. toute version ultérieure.
*
* OpenCADC is distributed in the OpenCADC est distribué
* hope that it will be useful, dans l’espoir qu’il vous
* but WITHOUT ANY WARRANTY; sera utile, mais SANS AUCUNE
* without even the implied GARANTIE : sans même la garantie
* warranty of MERCHANTABILITY implicite de COMMERCIALISABILITÉ
* or FITNESS FOR A PARTICULAR ni d’ADÉQUATION À UN OBJECTIF
* PURPOSE. See the GNU Affero PARTICULIER. Consultez la Licence
* General Public License for Générale Publique GNU Affero
* more details. pour plus de détails.
*
* You should have received Vous devriez avoir reçu une
* a copy of the GNU Affero copie de la Licence Générale
* General Public License along Publique GNU Affero avec
* with OpenCADC. If not, see OpenCADC ; si ce n’est
* <http://www.gnu.org/licenses/>. pas le cas, consultez :
* <http://www.gnu.org/licenses/>.
*
*
************************************************************************
*/

package ca.nrc.cadc.caom2.artifact.resolvers;

import ca.nrc.cadc.net.Traceable;
import ca.nrc.cadc.util.Log4jInit;
import java.net.URI;
import java.net.URL;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;

/**
*
* @author yeunga
*/
public class CadcNraoResolverTest {
private static final Logger log = Logger.getLogger(CadcNraoResolverTest.class);

static {
Log4jInit.setLevel("ca.nrc.cadc", Level.INFO);
}

// TODO: create a URI that uses AdResolver
private static final String NRAO_FILE_URI = "nrao:VLASS/bar.fits";
private static final String INVALID_URI1 = "wrongscheme://cadc.nrc.ca!vault/FOO/bar";
private static final String INVALID_URI2 = "ad:WRONGARCHIVE/FOO/bar";

CadcNraoResolver cadcNraoResolver = new CadcNraoResolver();

public CadcNraoResolverTest() {

}

@Test
public void testGetScheme() {
Assert.assertTrue(CadcNraoResolver.SCHEME.equals(cadcNraoResolver.getScheme()));
}

@Test
public void testTraceable() {
Assert.assertTrue(cadcNraoResolver instanceof Traceable);
}

@Test
public void testToURL() {
try {
URI uri = new URI(NRAO_FILE_URI);
URL url = cadcNraoResolver.toURL(uri);
Assert.assertNotNull(url);
log.info("testFile: " + uri + " -> " + url);
Assert.assertTrue("Invalid URL: " + url, url.toString().contains("/raven/files/"));
} catch (Exception unexpected) {
log.error("unexpected exception", unexpected);
Assert.fail("unexpected exception: " + unexpected);
}
}

@Test
public void testInvalidSchemeURI() {
try {
URI uri = new URI(INVALID_URI1);
URL url = cadcNraoResolver.toURL(uri);
Assert.fail("expected IllegalArgumentException, got " + url);
} catch (IllegalArgumentException expected) {
Assert.assertTrue(expected.getMessage().contains("Invalid URI"));
log.debug("expected exception: " + expected);
} catch (Exception unexpected) {
log.error("unexpected exception", unexpected);
Assert.fail("unexpected exception: " + unexpected);
}
}

@Test
public void testInvalidArchiveURI() {
try {
URI uri = new URI(INVALID_URI2);
URL url = cadcNraoResolver.toURL(uri);
Assert.fail("expected IllegalArgumentException, got " + url);
} catch (IllegalArgumentException expected) {
Assert.assertTrue(expected.getMessage().contains("Invalid URI"));
log.debug("expected exception: " + expected);
} catch (Exception unexpected) {
log.error("unexpected exception", unexpected);
Assert.fail("unexpected exception: " + unexpected);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ public class VOSpaceResolverTest {
Log4jInit.setLevel("ca.nrc.cadc", Level.INFO);
}

private static final String FILE_URI = "vos://cadc.nrc.ca!vospace/FOO/bar";
private static final String INVALID_SCHEME_URI1 = "ad://cadc.nrc.ca!vospace/FOO/bar";
private static final String FILE_URI = "vos://cadc.nrc.ca!vault/FOO/bar";
private static final String INVALID_SCHEME_URI1 = "ad://cadc.nrc.ca!vault/FOO/bar";
private static final String INVALID_NO_AUTHORITY_URI1 = "vos:/FOO";

VOSpaceResolver vosResolver = new VOSpaceResolver();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public IngestTest() { }
@Test
public void testIngest() throws Exception
{
URI[] uris = new URI[] { new URI("ad", "BLAST/BLASTvulpecula2005-06-12_250_reduced_2006-10-03", null) };
URI[] uris = new URI[] { new URI("ad", "BLAST/BLASTvulpecula2005-06-12_250_reduced_2006-10-03.fits", null) };
String userConfig = null;
Map<String,String> config = Util.loadConfig(userConfig);

Expand All @@ -138,7 +138,7 @@ public void testIngest() throws Exception
@Test
public void testIngestArtifactTypes22() throws Exception
{
URI uri = URI.create("ad:BLAST/BLASTvulpecula2005-06-12_250_reduced_2006-10-03");
URI uri = URI.create("ad:BLAST/BLASTvulpecula2005-06-12_250_reduced_2006-10-03.fits");
URI[] uris = new URI[] { uri };
String userConfig = null;
Map<String,String> config = Util.loadConfig(userConfig);
Expand Down

0 comments on commit a7a2768

Please sign in to comment.