blob: 792a250f41ca0cec7f06dae48840e176cddb5381 [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.metadata;
// JDK Input/output
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
// Junit Testing framework
import junit.framework.TestCase;
/**
* Base test case for metadata tests. Provides access to test data files.
*
* @author Kelly
*/
public class MetadataTestCase extends TestCase {
/**
* Construct a metadata test case.
*
* @param name Case name.
*/
public MetadataTestCase(String name) {
super(name);
}
/**
* Augment set up of a test case by creating a play directory where we can temporarily
* keep our test data files.
*
* @throws Exception If any errors occur in directory setup, or if superclass setUp throws it.
*/
public void setUp() throws Exception {
super.setUp(); // Set up the framework test harness
tmpDir = File.createTempFile("metadata", ".tests"); // Get a temporary file
if (!tmpDir.delete()) // File?! We don't want no stinkin' file
throw new IOException("Cannot delete temporary file " + tmpDir);
if (!tmpDir.mkdirs()) // Directory is what we want
throw new IOException("Cannot create temporary directory " + tmpDir);
//tmpDir.deleteOnExit();
}
/**
* Augment tear down of a test case by cleaning up our play directory.
*
* @throws Exception if any errors occur in directory deletion, or if superclass tearDown throws it.
*/
public void tearDown() throws Exception {
String[] entries = tmpDir.list(); // Get contents of our play area
for (int i = 0; i < entries.length; ++i) { // Step through each one
File entry = new File(tmpDir, entries[i]); // Make a file out of it
if (!entry.delete()) // Nuke it if possible ...
throw new IOException("Cannot delete temporary file " + entry); // Or if not ...
}
if (!tmpDir.delete()) // Nuke the play area
throw new IOException("Cannot delete temporary directory " + tmpDir); // Or if not ...
super.tearDown(); // Tear down the test harness
}
/**
* Get a named test data file. This will yield a test data file using the standard Java resource mechanism
* (ie, fetching out of a jar, from the class path, etc.) and stick it in a temporary file, since the
* metadata API works with files it can both name and use, not just streams of file data.
*
* @param name Name of the test data file to retrieve.
* @return A {@link java.io.File} containing the named test dat.
* @throws IOException If an I/O error occurs.
*/
public File getTestDataFile(String name) throws IOException {
InputStream in = MetadataTestCase.class.getResourceAsStream(name); // Not found? Try resource stream
if (in == null) // Still not found? Bummer.
throw new IllegalArgumentException("Unknown test data file `" + name + "`; not found in resource path");
File fn = new File(tmpDir, name); // What the tests want: Files.
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fn)); // Copy data to it
in = new BufferedInputStream(in); // Buffer for efficiency
byte[] buf = new byte[512]; // Classic disk page size
for (;;) { // For ever
int c = in.read(buf); // Read into our buffer
if (c == -1) break; // EOF? Done.
out.write(buf, 0, c); // Not EOF? Copy out.
}
in.close();
out.close();
return fn;
}
/** Play area */
private File tmpDir;
}