Author: kelly
Date: Sat Jul 17 21:52:32 2010
New Revision: 965138

URL: http://svn.apache.org/viewvc?rev=965138&view=rev
Log:
A base test case that provides test data files in actual (yet temporary) 
filesystem path locations by copying them out of the classpath resources from 
org/apache/oodt/cas/metadata.

Concrete test cases extend this class and call 'getTestDataFile' to get a test 
data file.

Added:
    
incubator/oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/MetadataTestCase.java

Added: 
incubator/oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/MetadataTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/MetadataTestCase.java?rev=965138&view=auto
==============================================================================
--- 
incubator/oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/MetadataTestCase.java
 (added)
+++ 
incubator/oodt/trunk/metadata/src/test/org/apache/oodt/cas/metadata/MetadataTestCase.java
 Sat Jul 17 21:52:32 2010
@@ -0,0 +1,114 @@
+/*
+ * 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 arean
+            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 {
+        String[] entries = tmpDir.list();                                      
             // Check the play area by
+        for (int i = 0; i < entries.length; ++i) {                             
             // going through each entry
+            File candidate = new File(tmpDir, name);                           
             // and making a File for each
+            if (candidate.exists())                                            
             // Found it?
+                return candidate;                                              
             // Wootness!
+        }
+        InputStream in = getClass().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;
+}


Reply via email to