blob: 5bdaaf4f94f7db33e42157c122b8c05b9652d855 [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.catalog.system.impl;
//JDK imports
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import junit.framework.TestCase;
//OODT imports
import org.apache.commons.io.FileUtils;
import org.apache.oodt.cas.catalog.exception.CatalogServiceException;
import org.apache.oodt.cas.catalog.mapping.InMemoryIngestMapperFactory;
import org.apache.oodt.cas.catalog.metadata.TransactionalMetadata;
import org.apache.oodt.cas.catalog.page.Page;
import org.apache.oodt.cas.catalog.page.PageInfo;
import org.apache.oodt.cas.catalog.page.QueryPager;
import org.apache.oodt.cas.catalog.page.TransactionReceipt;
import org.apache.oodt.cas.catalog.query.QueryExpression;
import org.apache.oodt.cas.catalog.query.parser.ParseException;
import org.apache.oodt.cas.catalog.query.parser.QueryParser;
import org.apache.oodt.cas.catalog.query.parser.TokenMgrError;
import org.apache.oodt.cas.catalog.repository.MemoryBasedCatalogRepositoryFactory;
import org.apache.oodt.cas.catalog.struct.impl.index.DataSourceIndexFactory;
import org.apache.oodt.cas.catalog.struct.impl.index.InMemoryIndexFactory;
import org.apache.oodt.cas.catalog.struct.impl.transaction.UuidTransactionIdFactory;
import org.apache.oodt.cas.catalog.system.CatalogFactory;
import org.apache.oodt.cas.metadata.Metadata;
/**
*
* @author bfoster
* @version $Revision$
*
*/
public class TestCatalogServiceLocal extends TestCase {
private CatalogServiceLocal cs;
private File testDir;
public void setUp() {
try {
File tempFile = File.createTempFile("foo", "bar");
tempFile.deleteOnExit();
testDir = new File(tempFile.getParentFile(), "cas-catalog");
CatalogServiceLocalFactory factory = new CatalogServiceLocalFactory();
factory
.setCatalogRepositoryFactory(new MemoryBasedCatalogRepositoryFactory());
factory.setIngestMapperFactory(this
.getOracleIngestMapperFactory(testDir.getAbsolutePath() + "/mapper"));
factory.setOneCatalogFailsAllFail(true);
factory.setSimplifyQueries(true);
factory.setPluginStorageDir("/dev/null");
factory.setRestrictIngestPermissions(false);
factory.setRestrictQueryPermissions(false);
factory.setTransactionIdFactory(UuidTransactionIdFactory.class
.getCanonicalName());
cs = factory.createCatalogService();
CatalogFactory catalogFactory = new CatalogFactory();
catalogFactory.setCatalogId("TestCatalog1");
catalogFactory.setDictionaryFactories(null);
catalogFactory
.setIndexFactory(getInMemoryDSFactory(testDir.getAbsolutePath() + "/index/1/"));
catalogFactory.setRestrictIngestPermissions(false);
catalogFactory.setRestrictQueryPermissions(false);
cs.addCatalog(catalogFactory.createCatalog());
catalogFactory.setCatalogId("TestCatalog2");
catalogFactory
.setIndexFactory(getInMemoryDSFactory(testDir.getAbsolutePath() + "/index/2/"));
cs.addCatalog(catalogFactory.createCatalog());
}catch (Exception e) {
e.printStackTrace();
TestCase.fail(e.getMessage());
}
}
public void tearDown() {
try {
FileUtils.forceDelete(this.testDir);
} catch (IOException e) {
e.printStackTrace();
TestCase.fail(e.getMessage());
}
}
public void testDataSourceCatalogIngestQueryAndDelete()
throws CatalogServiceException, ParseException, TokenMgrError {
// test ingest
Metadata m = new Metadata();
m.addMetadata("testkey1", "testval1");
TransactionReceipt tr = cs.ingest(m);
Vector<TransactionReceipt> receipts = new Vector<TransactionReceipt>();
receipts.add(tr);
List<TransactionalMetadata> metadatas = cs.getMetadata(receipts);
assertEquals(metadatas.size(), 1);
Metadata ingestedMetadata = metadatas.get(0).getMetadata();
assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
// test ingest update
m.replaceMetadata(
CatalogServiceLocal.CATALOG_SERVICE_TRANSACTION_ID_MET_KEY, tr.getTransactionId().toString());
m.replaceMetadata(CatalogServiceLocal.ENABLE_UPDATE_MET_KEY, "true");
tr = cs.ingest(m);
receipts = new Vector<TransactionReceipt>();
receipts.add(tr);
metadatas = cs.getMetadata(receipts);
assertEquals(metadatas.size(), 1);
ingestedMetadata = metadatas.get(0).getMetadata();
assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
// test query using querypager
QueryExpression qe = QueryParser
.parseQueryExpression("testkey1 == 'testval1'");
QueryPager pager = cs.query(qe);
metadatas = cs.getNextPage(pager);
assertEquals(metadatas.size(), 1);
ingestedMetadata = metadatas.get(0).getMetadata();
assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
// test query using std paging
qe = QueryParser.parseQueryExpression("testkey1 == 'testval1'");
Page page = cs.getPage(new PageInfo(20, PageInfo.FIRST_PAGE), qe);
metadatas = cs.getMetadata(page);
assertEquals(metadatas.size(), 1);
ingestedMetadata = metadatas.get(0).getMetadata();
assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
// test query using std paging with catalog restriction
qe = QueryParser.parseQueryExpression("testkey1 == 'testval1'");
page = cs.getPage(new PageInfo(20, PageInfo.FIRST_PAGE), qe,
Collections.singleton("TestCatalog1"));
metadatas = cs.getMetadata(page);
assertEquals(metadatas.size(), 1);
ingestedMetadata = metadatas.get(0).getMetadata();
assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 1);
// test delete
m = new Metadata();
m.addMetadata(CatalogServiceLocal.CATALOG_SERVICE_TRANSACTION_ID_MET_KEY, tr.getTransactionId().toString());
cs.delete(m);
assertEquals(cs.getMetadata(Collections.singletonList(tr)).size(), 0);
}
private InMemoryIngestMapperFactory getOracleIngestMapperFactory(
String tmpDirPath) throws SQLException, IOException {
String user = "sa";
String pass = "";
String driver = "org.hsqldb.jdbcDriver";
String url = "jdbc:hsqldb:file:" + tmpDirPath + ";shutdown=true";
InMemoryIngestMapperFactory factory = new InMemoryIngestMapperFactory();
factory.setDriver(driver);
factory.setJdbcUrl(url);
factory.setPass(pass);
factory.setUser(user);
factory.setTablesFile(this.getClass().getResource("/test-mapper-cat.sql").getPath());
return factory;
}
private DataSourceIndexFactory getInMemoryDSFactory(String tmpDirPath)
throws IOException, SQLException {
String user = "sa";
String pass = "";
String driver = "org.hsqldb.jdbcDriver";
String url = "jdbc:hsqldb:file:" + tmpDirPath + ";shutdown=true";
InMemoryIndexFactory indexFactory = new InMemoryIndexFactory();
indexFactory.setDriver(driver);
indexFactory.setJdbcUrl(url);
indexFactory.setPass(pass);
indexFactory.setUser(user);
indexFactory.setTablesFile(this.getClass().getResource("/test-index-cat.sql").getPath());
return indexFactory;
}
}