/*
* This file is part of the Wayback archival access software
* (http://archive-access.sourceforge.net/projects/wayback/).
*
* Licensed to the Internet Archive (IA) by one or more individual
* contributors.
*
* The IA 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.archive.wayback.resourcestore.locationdb;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import org.archive.wayback.resourcestore.locationdb.BDBResourceFileLocationDB;
import junit.framework.TestCase;
/**
*
*
* @author brad
* @version $Date: 2007-07-24 17:17:15 -0700 (Tue, 24 Jul 2007) $, $Revision: 1856 $
*/
public class BDBResourceFileLocationDBTest extends TestCase {
private BDBResourceFileLocationDB db = null;
private String dbPath = null;
private String dbName = null;
private File tmpFile = null;
private File tmpLogFile = null;
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
tmpFile = File.createTempFile("test-FileLocationDB",".tmp");
tmpLogFile = File.createTempFile("test-FileLocationDB",".log");
assertTrue(tmpFile.delete());
assertTrue(tmpFile.mkdirs());
dbPath = tmpFile.getAbsolutePath();
dbName = "test-FileLocationDB";
db = new BDBResourceFileLocationDB();
db.setBdbName(dbName);
db.setBdbPath(dbPath);
db.setLogPath(tmpLogFile.getAbsolutePath());
db.init();
super.setUp();
}
/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
db.shutdown();
if(tmpFile.isDirectory()) {
File files[] = tmpFile.listFiles();
for(int i = 0; i < files.length; i++) {
assertTrue(files[i].isFile());
assertTrue(files[i].delete());
}
assertTrue(tmpFile.delete());
}
assertTrue(tmpLogFile.delete());
}
private void testMarkLength(long start, long end, int count) throws IOException {
Iterator<String> itr = db.getNamesBetweenMarks(start,end);
int found = 0;
while(itr.hasNext()) {
itr.next();
found++;
}
assertEquals(count,found);
}
/**
* Test method for 'org.archive.wayback.http11resourcestore.FileLocationDB
*/
public void testDB() {
assertNotNull(db);
String urls[] = null;
try {
// empty results OK:
urls = db.nameToUrls("arc1");
assertNull(urls);
//assertEquals(urls.length,0);
testMarkLength(0,0,0);
// add an URL, and get it back:
db.addNameUrl("arc1","url1");
urls = db.nameToUrls("arc1");
assertNotNull(urls);
assertEquals(1,urls.length);
assertEquals("url1",urls[0]);
testMarkLength(0,5,1);
// add the same URL again, verify only comes back once:
db.addNameUrl("arc1","url1");
urls = db.nameToUrls("arc1");
assertNotNull(urls);
assertEquals(1,urls.length);
assertEquals("url1",urls[0]);
testMarkLength(0,5,1);
// check for empty results for a diff arc:
urls = db.nameToUrls("arc2");
assertNull(urls);
//assertEquals(urls.length,0);
// add a diff URL for first arc, verify both come back:
db.addNameUrl("arc1","url2");
urls = db.nameToUrls("arc1");
assertNotNull(urls);
assertEquals(2,urls.length);
assertEquals("url1",urls[0]);
assertEquals("url2",urls[1]);
testMarkLength(0,5,1);
// still nothing for arc2:
urls = db.nameToUrls("arc2");
assertNull(urls);
//assertEquals(urls.length,0);
// add an URL for arc2, and get it back:
db.addNameUrl("arc2","url2-1");
urls = db.nameToUrls("arc2");
assertNotNull(urls);
assertEquals(1,urls.length);
assertEquals("url2-1",urls[0]);
testMarkLength(0,10,2);
testMarkLength(5,10,1);
// remove unknown URL for arc2
db.removeNameUrl("arc2","url2-2");
urls = db.nameToUrls("arc2");
assertNotNull(urls);
assertEquals(1,urls.length);
assertEquals("url2-1",urls[0]);
// remove the right URL for arc2
db.removeNameUrl("arc2","url2-1");
urls = db.nameToUrls("arc2");
assertNull(urls);
//assertEquals(urls.length,0);
// remove non-existant URL for first arc, verify two still come back
db.removeNameUrl("arc1","url-non");
urls = db.nameToUrls("arc1");
assertNotNull(urls);
assertEquals(2,urls.length);
assertEquals("url1",urls[0]);
assertEquals("url2",urls[1]);
// remove a right URL for arc1
db.removeNameUrl("arc1","url1");
urls = db.nameToUrls("arc1");
assertNotNull(urls);
assertEquals(1,urls.length);
assertEquals("url2",urls[0]);
// remove a now wrong URL for arc1
db.removeNameUrl("arc1","url1");
urls = db.nameToUrls("arc1");
assertNotNull(urls);
assertEquals(1,urls.length);
assertEquals("url2",urls[0]);
// remove a last URL for arc1
db.removeNameUrl("arc1","url2");
urls = db.nameToUrls("arc1");
assertNull(urls);
//assertEquals(urls.length,0);
} catch (Exception e) {
fail("arcToUrls threw " + e.getMessage());
}
}
}