org.cloudifysource.rest.UploadRepoTest.java Source code

Java tutorial

Introduction

Here is the source code for org.cloudifysource.rest.UploadRepoTest.java

Source

/*******************************************************************************
 * Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved
 *
 * 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 org.cloudifysource.rest;

import static org.junit.Assert.fail;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

import junit.framework.Assert;

import org.apache.commons.io.FileUtils;
import org.cloudifysource.dsl.internal.CloudifyConstants;
import org.cloudifysource.dsl.internal.packaging.ZipUtils;
import org.cloudifysource.rest.controllers.RestErrorException;
import org.cloudifysource.rest.repo.UploadRepo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;

/**
 *
 * @author yael
 *
 */
public class UploadRepoTest {

    private UploadRepo repo;
    private static final int CLEANUP_TIMEOUT_MILLIS = 1000;
    private static final String UPLOAD_DIR_PATH = "src" + File.separator + "test" + File.separator + "resources"
            + File.separator + "upload";
    private static final String ZIP_FILE_PATH = UPLOAD_DIR_PATH + File.separator + "test.zip";
    private static final String TEST_FILE_NAME = "test.txt";
    private static final String TXT_FILE_PATH = UPLOAD_DIR_PATH + File.separator + TEST_FILE_NAME;

    @Before
    public void init() throws IOException {
        repo = new UploadRepo();
        repo.init();
    }

    @After
    public void destroy() throws IOException {
        repo.destroy();
    }

    @Test
    public void getNotExistTest() {
        final File file = repo.get(UUID.randomUUID().toString());
        Assert.assertNull(file);
    }

    @Test
    public void testUploadTimeout() throws InterruptedException, IOException {
        int cleanupTimeoutMillis = repo.getCleanupTimeoutMillis();
        repo.resetTimeout(CLEANUP_TIMEOUT_MILLIS);
        try {
            File file = new File(ZIP_FILE_PATH);
            String dirName = null;
            try {
                System.out.println("tring to put file " + file.getAbsolutePath() + " in repo.");
                dirName = putTest(file);
            } catch (RestErrorException e) {
                fail(e.getMessage());
            }
            File uploadedFile = repo.get(dirName);
            System.out.println("got from repo "
                    + ((uploadedFile == null) ? "upload file [dir name = " + dirName + "] not exist in repo"
                            : uploadedFile.getAbsolutePath()));
            assertUploadedFile(uploadedFile);

            // wait until the file is deleted.
            Thread.sleep(repo.getCleanupTimeoutMillis() * 3);

            final File restUploadDir = repo.getRestUploadDir();
            Assert.assertNotNull(restUploadDir);
            Assert.assertTrue(restUploadDir.isDirectory());
            file = repo.get(dirName);
            Assert.assertNull(file);
        } finally {
            repo.resetTimeout(cleanupTimeoutMillis);
        }
    }

    @Test
    public void uploadZipFileTest() throws IOException {
        putAndGetTest(new File(ZIP_FILE_PATH));
    }

    @Test
    public void uploadTxtFileTest() throws IOException {
        putAndGetTest(new File(TXT_FILE_PATH));
    }

    public static MultipartFile createNewMultiFile(final File file) throws IOException {
        byte[] content = FileUtils.readFileToByteArray(file);
        final MockMultipartFile mockMultipartFile = new MockMultipartFile(CloudifyConstants.UPLOAD_FILE_PARAM_NAME,
                file.getName(), "text/plain", content);
        return mockMultipartFile;
    }

    private String putTest(final File testFile) throws IOException, RestErrorException {
        final MultipartFile multiFile = createNewMultiFile(testFile);
        String dirName = null;
        try {
            dirName = repo.put(null, multiFile);
        } catch (final IOException e) {
            fail(e.getMessage());
        }
        Assert.assertNotNull(dirName);
        return dirName;
    }

    public void putAndGetTest(final File file) throws IOException {
        String uploadKey = null;
        try {
            uploadKey = putTest(file);
        } catch (RestErrorException e) {
            fail(e.getMessage());
        }
        Assert.assertNotNull(uploadKey);
        final File uploadedFile = repo.get(uploadKey);
        assertUploadedFile(uploadedFile);
    }

    private void assertUploadedFile(final File uploadedFile) throws IOException {
        Assert.assertNotNull(uploadedFile);
        // file expected to be a file and not a directory.
        Assert.assertTrue(uploadedFile.isFile());
        // unzip file if needed
        File unzippedFile = uploadedFile;
        String name = uploadedFile.getName();
        if (name.endsWith("zip")) {
            File tempDir = new File(new File(CloudifyConstants.TEMP_FOLDER), "tempDir");
            tempDir.mkdirs();
            tempDir.deleteOnExit();
            ZipUtils.unzip(uploadedFile, tempDir);
            unzippedFile = new File(tempDir, TEST_FILE_NAME);
            Assert.assertTrue(unzippedFile.exists());
            unzippedFile.deleteOnExit();
        }
        // check file name and content
        Assert.assertEquals(TEST_FILE_NAME, unzippedFile.getName());
        FileUtils.contentEquals(new File(TXT_FILE_PATH), unzippedFile);
    }
}