blob: bc47d9f1bc7acba97b008ee78674dc590f8f2c2a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.oodt.cas.filemgr.cli;
//JDK imports
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
//JUnit imports
import junit.framework.TestCase;
//Apache imports
import org.apache.commons.io.FileUtils;
//OODT imports
import org.apache.oodt.cas.cli.CmdLineUtility;
import org.apache.oodt.cas.cli.util.OptionPropertyRegister;
import org.apache.oodt.cas.filemgr.datatransfer.InPlaceDataTransferFactory;
import org.apache.oodt.cas.filemgr.structs.Product;
import org.apache.oodt.cas.filemgr.structs.ProductPage;
import org.apache.oodt.cas.filemgr.structs.ProductType;
import org.apache.oodt.cas.filemgr.structs.Query;
import org.apache.oodt.cas.filemgr.structs.Reference;
import org.apache.oodt.cas.filemgr.structs.TermQueryCriteria;
import org.apache.oodt.cas.filemgr.structs.exceptions.ConnectionException;
import org.apache.oodt.cas.filemgr.structs.query.ComplexQuery;
import org.apache.oodt.cas.filemgr.system.MockXmlRpcFileManagerClient;
import org.apache.oodt.cas.filemgr.system.MockXmlRpcFileManagerClient.MethodCallDetails;
import org.apache.oodt.cas.metadata.Metadata;
//Google imports
import com.google.common.collect.Lists;
/**
* Tests File Manager Clients Command-line interface.
*
* @author bfoster (Brian Foster)
*/
public class TestFileManagerCli extends TestCase {
private CmdLineUtility cmdLineUtility;
private MockXmlRpcFileManagerClient client;
private Properties initialProperties = new Properties(
System.getProperties());
@Override
public void setUp() throws Exception {
super.setUp();
Properties properties = new Properties(System.getProperties());
properties.setProperty("org.apache.oodt.cas.cli.debug", "true");
URL actionsUrl = this.getClass().getResource("/cmd-line-actions.xml");
properties.setProperty("org.apache.oodt.cas.cli.action.spring.config",
"file:" + new File(actionsUrl.getFile()).getAbsolutePath());
URL optionsUrl = this.getClass().getResource("/cmd-line-options.xml");
properties.setProperty("org.apache.oodt.cas.cli.option.spring.config",
"file:" + new File(optionsUrl.getFile()).getAbsolutePath());
System.setProperties(properties);
cmdLineUtility = new CmdLineUtility();
UseMockClientCmdLineActionStore actionStore = new UseMockClientCmdLineActionStore();
client = actionStore.getClient();
cmdLineUtility.setActionStore(actionStore);
}
@Override
public void tearDown() throws Exception {
OptionPropertyRegister.clearRegister();
System.setProperties(initialProperties);
}
public void testAddProductType() throws MalformedURLException,
ConnectionException {
String productTypeName = "TestProductType";
String productTypeDesc = "ProductTypeDesc";
String productTypeRepo = "ProductTypeRepo";
String productTypeVersioner = "ProductTypeVersioner";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --addProductType"
+ " --typeName " + productTypeName + " --typeDesc "
+ productTypeDesc + " --repository " + productTypeRepo
+ " --versionClass " + productTypeVersioner).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("addProductType", methodCallDetails.getMethodName());
assertEquals(1, methodCallDetails.getArgs().size());
ProductType pt = (ProductType) methodCallDetails.getArgs().get(0);
assertEquals(productTypeName, pt.getName());
assertEquals(productTypeDesc, pt.getDescription());
assertEquals(productTypeRepo, pt.getProductRepositoryPath());
assertEquals(productTypeVersioner, pt.getVersioner());
}
public void testDeleteProductById() {
String productId = "TestProductId";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --deleteProductById"
+ " --productId " + productId).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("removeProduct", methodCallDetails.getMethodName());
assertEquals(1, methodCallDetails.getArgs().size());
assertEquals(productId,
((Product) methodCallDetails.getArgs().get(0)).getProductId());
}
public void testDeleteProductByName() {
String productName = "TestProductName";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --deleteProductByName"
+ " --productName " + productName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("removeProduct", methodCallDetails.getMethodName());
assertEquals(1, methodCallDetails.getArgs().size());
assertEquals(productName,
((Product) methodCallDetails.getArgs().get(0)).getProductName());
}
public void testGetCurrentTransfer() {
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getCurrentTransfer")
.split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getCurrentFileTransfer", methodCallDetails.getMethodName());
assertEquals(0, methodCallDetails.getArgs().size());
}
public void testGetCurrentTransfers() {
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getCurrentTransfers")
.split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getCurrentFileTransfers", methodCallDetails.getMethodName());
assertEquals(0, methodCallDetails.getArgs().size());
}
public void testGetFilePercentTransferred() {
URL refUrl = this.getClass().getResource("/ingest/test.txt");
String refPath = new File(refUrl.getFile()).getAbsolutePath();
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getFilePctTransferred"
+ " --origRef " + refPath).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getRefPctTransferred", methodCallDetails.getMethodName());
assertTrue(((Reference) methodCallDetails.getArgs().get(0))
.getOrigReference().endsWith("test.txt"));
}
public void testGetFirstPage() {
String productTypeName = "ProductTypeName";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getFirstPage"
+ " --productTypeName " + productTypeName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getFirstPage", methodCallDetails.getMethodName());
assertEquals(productTypeName, ((ProductType) methodCallDetails.getArgs()
.get(0)).getName());
}
public void testGetLastPage() {
String productTypeName = "ProductTypeName";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getLastPage"
+ " --productTypeName " + productTypeName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getLastPage", methodCallDetails.getMethodName());
assertEquals(productTypeName, ((ProductType) methodCallDetails.getArgs()
.get(0)).getName());
}
public void testGetNextPage() {
String productTypeName = "ProductTypeName";
int curPage = 1;
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getNextPage"
+ " --productTypeName " + productTypeName + " --curPage " + curPage)
.split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getNextPage", methodCallDetails.getMethodName());
assertEquals(productTypeName, ((ProductType) methodCallDetails.getArgs()
.get(0)).getName());
assertEquals(curPage,
((ProductPage) methodCallDetails.getArgs().get(1)).getPageNum());
}
public void testGetPrevPage() {
String productTypeName = "ProductTypeName";
int curPage = 1;
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getPrevPage"
+ " --productTypeName " + productTypeName + " --curPage " + curPage)
.split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getPrevPage", methodCallDetails.getMethodName());
assertEquals(productTypeName, ((ProductType) methodCallDetails.getArgs()
.get(0)).getName());
assertEquals(curPage,
((ProductPage) methodCallDetails.getArgs().get(1)).getPageNum());
}
public void testGetNumProducts() {
String productTypeName = "ProductTypeName";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getNumProducts"
+ " --productTypeName " + productTypeName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getNumProducts", methodCallDetails.getMethodName());
assertEquals(productTypeName, ((ProductType) methodCallDetails.getArgs()
.get(0)).getName());
}
public void testGetProductById() {
String productId = "TestProductId";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getProductById"
+ " --productId " + productId).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getProductById", methodCallDetails.getMethodName());
assertEquals(productId, methodCallDetails.getArgs().get(0));
}
public void testGetProductByName() {
String productName = "TestProductName";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getProductByName"
+ " --productName " + productName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getProductByName", methodCallDetails.getMethodName());
assertEquals(productName, methodCallDetails.getArgs().get(0));
}
public void testGetProductPercnetTransferred() {
String productId = "TestProductId";
String productTypeName = "TestProductType";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getProductPctTransferred"
+ " --productId " + productId + " --productTypeName " + productTypeName)
.split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getProductPctTransferred",
methodCallDetails.getMethodName());
assertEquals(productId,
((Product) methodCallDetails.getArgs().get(0)).getProductId());
}
public void testGetProductTypeByName() {
String productTypeName = "TestProductType";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --getProductTypeByName"
+ " --productTypeName " + productTypeName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getProductTypeByName", methodCallDetails.getMethodName());
assertEquals(productTypeName, methodCallDetails.getArgs().get(0));
}
public void testHasProduct() {
String productName = "TestProductName";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --hasProduct"
+ " --productName " + productName).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("hasProduct", methodCallDetails.getMethodName());
assertEquals(productName, methodCallDetails.getArgs().get(0));
}
public void testIngestProduct() {
URL refUrl = this.getClass().getResource("/ingest/test.txt");
URL metUrl = this.getClass().getResource("/ingest/test.txt.met");
String productName = "TestProductName";
String structure = Product.STRUCTURE_FLAT;
String productTypeName = "TestProductType";
String metadataFile = new File(metUrl.getFile()).getAbsolutePath();
String dataTransferer = InPlaceDataTransferFactory.class
.getCanonicalName();
String ref = new File(refUrl.getFile()).getAbsolutePath();
cmdLineUtility
.run(("--url http://localhost:9000 --operation --ingestProduct"
+ " --productName " + productName + " --productStructure "
+ structure + " --productTypeName " + productTypeName
+ " --metadataFile " + metadataFile + " --refs " + ref
+ " --clientTransfer --dataTransfer " + dataTransferer)
.split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("ingestProduct", methodCallDetails.getMethodName());
assertEquals(productName,
((Product) methodCallDetails.getArgs().get(0)).getProductName());
assertEquals(structure,
((Product) methodCallDetails.getArgs().get(0))
.getProductStructure());
assertEquals(productTypeName,
((Product) methodCallDetails.getArgs().get(0)).getProductType()
.getName());
assertTrue(((Product) methodCallDetails.getArgs().get(0))
.getProductReferences().get(0).getOrigReference().endsWith(ref));
assertEquals("test.txt",
((Metadata) methodCallDetails.getArgs().get(1))
.getMetadata("Filename"));
assertEquals("GenericFile", ((Metadata) methodCallDetails.getArgs()
.get(1)).getMetadata("ProductType"));
assertEquals(true, methodCallDetails.getArgs().get(2));
}
public void testDumpMetadata() throws IOException {
String productId = "TestProductId";
File bogusFile = File.createTempFile("bogus", "bogus");
File tmpFile = new File(bogusFile.getParentFile(), "CliDumpMetadata");
tmpFile.mkdirs();
bogusFile.delete();
cmdLineUtility
.run(("--url http://localhost:9000 --operation --dumpMetadata"
+ " --productId " + productId).split(" "));
OptionPropertyRegister.clearRegister();
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getMetadata", methodCallDetails.getMethodName());
assertEquals(productId,
((Product) methodCallDetails.getArgs().get(0)).getProductId());
cmdLineUtility
.run(("--url http://localhost:9000 --operation --dumpMetadata"
+ " --productId " + productId + " --outputDir " + tmpFile
.getAbsolutePath()).split(" "));
FileUtils.forceDelete(tmpFile);
}
public void testLuceneQuery() {
String query = "ProductId:TestProductId";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --luceneQuery"
+ " --query " + query).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("complexQuery", methodCallDetails.getMethodName());
assertEquals("ProductId", ((TermQueryCriteria) ((Query) methodCallDetails
.getArgs().get(0)).getCriteria().get(0)).getElementName());
assertEquals("TestProductId",
((TermQueryCriteria) ((Query) methodCallDetails.getArgs().get(0))
.getCriteria().get(0)).getValue());
OptionPropertyRegister.clearRegister();
String reducedMetadataKeys = "ProductId ProductType";
String outputFormat = "$ProductId";
String reducedProductTypes = "TestProductType";
String sortBy = "ProductId";
String delimiter = ",";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --luceneQuery"
+ " --query " + query + " --reducedMetadataKeys " + reducedMetadataKeys
+ " --outputFormat " + outputFormat
+ " --reducedProductTypes " + reducedProductTypes
+ " --sortBy " + sortBy
+ " --delimiter " + delimiter).split(" "));
methodCallDetails = client.getLastMethodCallDetails();
assertEquals("complexQuery", methodCallDetails.getMethodName());
ComplexQuery complexQuery = (ComplexQuery) methodCallDetails.getArgs().get(0);
assertEquals("ProductId", ((TermQueryCriteria) complexQuery.getCriteria().get(0)).getElementName());
assertEquals("TestProductId",
((TermQueryCriteria) complexQuery.getCriteria().get(0)).getValue());
assertEquals(Lists.newArrayList(reducedMetadataKeys.split(" ")), complexQuery.getReducedMetadata());
assertEquals(outputFormat, complexQuery.getToStringResultFormat());
assertEquals(Lists.newArrayList(reducedProductTypes.split(" ")), complexQuery.getReducedProductTypeNames());
assertEquals(sortBy, complexQuery.getSortByMetKey());
}
public void testRetrieveFilesById() {
String productId = "TestProductId";
String destination = "/tmp/toDir";
String transferer = "org.apache.oodt.cas.filemgr.datatransfer.InPlaceDataTransferFactory";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --retrieveFilesById"
+ " --productId " + productId + " --destination " + destination
+ " --transferer " + transferer).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getProductReferences", methodCallDetails.getMethodName());
assertEquals(productId, ((Product) methodCallDetails.getArgs().get(0)).getProductId());
}
public void testRetrieveFilesByName() {
String productName = "TestProductName";
String destination = "/tmp/toDir";
String transferer = "org.apache.oodt.cas.filemgr.datatransfer.InPlaceDataTransferFactory";
cmdLineUtility
.run(("--url http://localhost:9000 --operation --retrieveFilesByName"
+ " --productName " + productName + " --destination " + destination
+ " --transferer " + transferer).split(" "));
MethodCallDetails methodCallDetails = client.getLastMethodCallDetails();
assertEquals("getProductReferences", methodCallDetails.getMethodName());
assertEquals(productName, ((Product) methodCallDetails.getArgs().get(0)).getProductName());
}
}