com.jpeterson.littles3.bo.FileS3ObjectTest.java Source code

Java tutorial

Introduction

Here is the source code for com.jpeterson.littles3.bo.FileS3ObjectTest.java

Source

/*
 * Copyright 2007 Jesse Peterson
 * 
 * Licensed 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 com.jpeterson.littles3.bo;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class FileS3ObjectTest extends TestCase {
    private Log logger;

    /**
     * Create the test case
     * 
     * @param testName
     *            name of the test case
     */
    public FileS3ObjectTest(String testName) {
        super(testName);

        logger = LogFactory.getLog(this.getClass());
        logger.debug("FileS3ObjectTest");
    }

    /**
     * @return the suite of tests being tested
     */
    public static Test suite() {
        return new TestSuite(FileS3ObjectTest.class);
    }

    /**
     * Test the constructor.
     */
    public void test_constructor() {
        FileS3Object s3Object;
        URL storageUrl;

        try {
            storageUrl = new URL("file:///C:/temp/foo.txt");
        } catch (MalformedURLException e) {
            e.printStackTrace();
            fail("Unexpected exception");
            return;
        }
        s3Object = new FileS3Object("bucket", "key", storageUrl);

        assertEquals("Unexpected value", "bucket", s3Object.getBucket());
        assertEquals("Unexpected value", "key", s3Object.getKey());
        assertEquals("Unexpected value", storageUrl, s3Object.getStorageUrl());
    }

    /**
     * Test the content length property.
     */
    public void test_contentLength() {
        File file;
        FileS3Object s3Object;

        try {
            file = File.createTempFile("unitTest", null);

            file.deleteOnExit();

            FileOutputStream out = new FileOutputStream(file);

            out.write("12345".getBytes());

            out.close();

            s3Object = new FileS3Object("bucket", "key", file.toURL());

            assertEquals("Unexpected value", 5, s3Object.getContentLength());
        } catch (IOException e) {
            e.printStackTrace();
            fail("Unexpected exception");
            return;
        }
    }

    /**
     * Test the last modified property.
     */
    public void test_lastModified() {
        File file;
        FileS3Object s3Object;

        try {
            file = File.createTempFile("unitTest", null);

            file.deleteOnExit();

            FileOutputStream out = new FileOutputStream(file);

            out.write("12345".getBytes());

            out.close();

            s3Object = new FileS3Object("bucket", "key", file.toURL());

            assertEquals("Unexpected value", file.lastModified(), s3Object.getLastModified());
        } catch (IOException e) {
            e.printStackTrace();
            fail("Unexpected exception");
            return;
        }
    }

    /**
     * Test the delete data method.
     */
    public void test_deleteData() {
        File file;
        FileS3Object s3Object;

        try {
            file = File.createTempFile("unitTest", null);

            file.deleteOnExit();

            FileOutputStream out = new FileOutputStream(file);

            out.write("12345".getBytes());

            out.close();

            s3Object = new FileS3Object("bucket", "key", file.toURL());

            assertTrue("File should exits", file.exists());

            assertTrue("Should be able to delete", s3Object.deleteData());

            assertFalse("File should not exist", file.exists());

            assertFalse("Should already be deleted", s3Object.deleteData());
        } catch (IOException e) {
            e.printStackTrace();
            fail("Unexpected exception");
            return;
        }
    }

    /**
     * Test the input stream method.
     */
    public void test_inputStream() {
        File file;
        FileS3Object s3Object;

        try {
            file = File.createTempFile("unitTest", null);

            file.deleteOnExit();

            FileOutputStream out = new FileOutputStream(file);

            out.write("12345".getBytes());

            out.close();

            s3Object = new FileS3Object("bucket", "key", file.toURL());

            InputStream in = s3Object.getInputStream();

            assertEquals("Unexpected value", '1', in.read());
            assertEquals("Unexpected value", '2', in.read());
            assertEquals("Unexpected value", '3', in.read());
            assertEquals("Unexpected value", '4', in.read());
            assertEquals("Unexpected value", '5', in.read());
            assertEquals("Unexpected value", -1, in.read());
        } catch (IOException e) {
            e.printStackTrace();
            fail("Unexpected exception");
            return;
        }
    }

    /**
     * Test the output stream method.
     */
    public void test_outputStream() {
        File file;
        FileS3Object s3Object;

        try {
            file = File.createTempFile("unitTest", null);

            file.deleteOnExit();

            s3Object = new FileS3Object("bucket", "key", file.toURL());

            OutputStream out = s3Object.getOutputStream();

            out.write("12345".getBytes());

            out.close();

            InputStream in = new FileInputStream(file);

            assertEquals("Unexpected value", '1', in.read());
            assertEquals("Unexpected value", '2', in.read());
            assertEquals("Unexpected value", '3', in.read());
            assertEquals("Unexpected value", '4', in.read());
            assertEquals("Unexpected value", '5', in.read());
            assertEquals("Unexpected value", -1, in.read());
        } catch (IOException e) {
            e.printStackTrace();
            fail("Unexpected exception");
            return;
        }
    }

    /**
     * Test that an instance is serializable.
     */
    public void test_serialization() {
        FileS3Object s3Object, reconstitutedS3Object;
        ByteArrayInputStream bais;
        ByteArrayOutputStream baos;
        ObjectInputStream ois;
        ObjectOutputStream oos;
        URL storageUrl = null;

        try {
            storageUrl = new URL("file:///c:/");
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
            fail("Unexpected exception");
        }

        s3Object = new FileS3Object("bucket", "key", storageUrl);

        try {
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);

            oos.writeObject(s3Object);

            bais = new ByteArrayInputStream(baos.toByteArray());
            ois = new ObjectInputStream(bais);

            reconstitutedS3Object = (FileS3Object) ois.readObject();

            assertEquals("Unexpected value", "bucket", reconstitutedS3Object.getBucket());
            assertEquals("Unexpected value", "key", reconstitutedS3Object.getKey());
            assertEquals("Unexpected value", storageUrl, reconstitutedS3Object.getStorageUrl());
        } catch (IOException e) {
            e.printStackTrace();
            fail("Unexpected exception");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            fail("Unexpected exception");
        }
    }
}