org.archive.util.TestUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of heritrix-commons Show documentation
Show all versions of heritrix-commons Show documentation
The Archive Commons Code Libraries project contains general Java utility
libraries, as used by the Heritrix crawler and other projects.
The newest version!
/*
* This file is part of the Heritrix web crawler (crawler.archive.org).
*
* 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.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.ref.SoftReference;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.logging.Logger;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Utility methods useful in testing situations.
*
* @author gojomo
*/
public class TestUtils {
private static final Logger logger =
Logger.getLogger(TestUtils.class.getName());
/**
* Temporarily exhaust memory, forcing weak/soft references to
* be broken.
*/
public static void forceScarceMemory() {
// force soft references to be broken
LinkedList> hog = new LinkedList>();
long blocks = Runtime.getRuntime().maxMemory() / 1000000;
logger.info("forcing scarce memory via "+blocks+" 1MB blocks");
for(long l = 0; l <= blocks; l++) {
try {
hog.add(new SoftReference(new byte[1000000]));
} catch (OutOfMemoryError e) {
hog = null;
logger.info("OOME triggered");
break;
}
}
}
public static void testSerialization(Object proc) throws Exception {
byte[] first = serialize(proc);
ByteArrayInputStream binp = new ByteArrayInputStream(first);
ObjectInputStream oinp = new ObjectInputStream(binp);
Object o = oinp.readObject();
oinp.close();
TestCase.assertEquals(proc.getClass(), o.getClass());
byte[] second = serialize(o);
TestCase.assertTrue(Arrays.equals(first, second));
}
public static byte[] serialize(Object o) throws Exception {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
ObjectOutputStream oout = new ObjectOutputStream(bout);
oout.writeObject(o);
oout.close();
return bout.toByteArray();
}
public static TestSuite makePackageSuite(Class> c)
throws ClassNotFoundException {
String cname = c.getName();
int p = cname.lastIndexOf('.');
String dir = cname.substring(0, p).replace('.', File.separatorChar);
String root = "heritrix/src/test/java/".replace('/', File.separatorChar);
File src = new File(root);
return makeSuite(src, new File(root + dir));
}
public static TestSuite makeSuite(File srcRoot, File dir)
throws ClassNotFoundException {
TestSuite result = new TestSuite("All Tests");
if (!dir.exists()) {
throw new IllegalArgumentException(dir + " does not exist.");
}
scanSuite(result, srcRoot, dir);
return result;
}
private static void scanSuite(TestSuite suite, File start, File dir)
throws ClassNotFoundException {
for (File f: dir.listFiles()) {
if (f.isDirectory() && !f.getName().startsWith(".")) {
String prefix = start.getAbsolutePath();
String full = f.getAbsolutePath();
TestSuite sub = new TestSuite(full.substring(prefix.length()));
scanSuite(sub, start, f);
if (sub.testCount() > 0) {
suite.addTest(sub);
}
} else {
if (f.getName().endsWith("Test.java")) {
String full = f.getAbsolutePath();
String prefix = start.getAbsolutePath();
String cname = full.substring(prefix.length());
if (cname.startsWith(File.separator)) {
cname = cname.substring(1);
}
cname = cname.replace(File.separatorChar, '.');
cname = cname.substring(0, cname.length() - 5);
suite.addTestSuite((Class extends TestCase>) Class.forName(cname));
}
}
}
}
/*
* create a tmp dir for testing; copied nearly verbatim from TmpDirTestCase
*/
public static File tmpDir() throws IOException {
String tmpDirStr = System.getProperty(TmpDirTestCase.TEST_TMP_SYSTEM_PROPERTY_NAME);
tmpDirStr = (tmpDirStr == null)? TmpDirTestCase.DEFAULT_TEST_TMP_DIR: tmpDirStr;
File tmpDir = new File(tmpDirStr);
FileUtils.ensureWriteableDirectory(tmpDir);
if (!tmpDir.canWrite())
{
throw new IOException(tmpDir.getAbsolutePath() +
" is unwriteable.");
}
tmpDir.deleteOnExit();
return tmpDir;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy