All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.testutils.RandomTempFile Maven / Gradle / Ivy

Go to download

The AWS SDK for Java - Test Utils module holds the all the utilities that are used by the tests.

There is a newer version: 2.29.17
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. 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.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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 software.amazon.awssdk.testutils;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.utils.JavaSystemSetting;

/**
 * Extension of File that creates a temporary file with a specified name in
 * Java's temporary directory, as declared in the JRE's system properties. The
 * file is immediately filled with a specified amount of random ASCII data.
 *
 * @see RandomInputStream
 */
public class RandomTempFile extends File {

    private static final Logger log = LoggerFactory.getLogger(RandomTempFile.class);
    private static final long serialVersionUID = -8232143353692832238L;

    /** Java temp dir where all temp files will be created. */
    private static final String TEMP_DIR = JavaSystemSetting.TEMP_DIRECTORY.getStringValueOrThrow();

    /** Flag controlling whether binary or character data is used. */
    private final boolean binaryData;

    /**
     * Creates, and fills, a temp file with a randomly generated name and specified size of random ASCII data.
     *
     * @param sizeInBytes The amount of random ASCII data, in bytes, for the new temp
     *                    file.
     * @throws IOException If any problems were encountered creating the new temp file.
     */
    public RandomTempFile(long sizeInBytes) throws IOException {
        this(UUID.randomUUID().toString(), sizeInBytes, false);
    }

    /**
     * Creates, and fills, a temp file with the specified name and specified
     * size of random ASCII data.
     *
     * @param filename
     *            The name for the new temporary file, within the Java temp
     *            directory as declared in the JRE's system properties.
     * @param sizeInBytes
     *            The amount of random ASCII data, in bytes, for the new temp
     *            file.
     *
     * @throws IOException
     *             If any problems were encountered creating the new temp file.
     */
    public RandomTempFile(String filename, int sizeInBytes) throws IOException {
        this(filename, sizeInBytes, false);
    }


    /**
     * Creates, and fills, a temp file with the specified name and specified
     * size of random ASCII data.
     *
     * @param filename
     *            The name for the new temporary file, within the Java temp
     *            directory as declared in the JRE's system properties.
     * @param sizeInBytes
     *            The amount of random ASCII data, in bytes, for the new temp
     *            file.
     *
     * @throws IOException
     *             If any problems were encountered creating the new temp file.
     */
    public RandomTempFile(String filename, long sizeInBytes) throws IOException {
        this(filename, sizeInBytes, false);
    }

    /**
     * Creates, and fills, a temp file with the specified name and specified
     * size of random binary or character data.
     *
     * @param filename
     *            The name for the new temporary file, within the Java temp
     *            directory as declared in the JRE's system properties.
     * @param sizeInBytes
     *            The amount of random ASCII data, in bytes, for the new temp
     *            file.
     * @param binaryData Whether to fill the file with binary or character data.
     *
     * @throws IOException
     *             If any problems were encountered creating the new temp file.
     */
    public RandomTempFile(String filename, long sizeInBytes, boolean binaryData)
            throws IOException {
        super(TEMP_DIR + File.separator + System.currentTimeMillis() + "-"
              + filename);
        this.binaryData = binaryData;
        createFile(sizeInBytes);
        log.debug("RandomTempFile {} created", this);
    }

    public RandomTempFile(File root, String filename, long sizeInBytes) throws IOException {
        super(root, filename);
        this.binaryData = false;
        createFile(sizeInBytes);
    }


    public void createFile(long sizeInBytes) throws IOException {
        deleteOnExit();

        try (FileOutputStream outputStream = new FileOutputStream(this);
             BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
             InputStream inputStream = new RandomInputStream(sizeInBytes, binaryData)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) > -1) {
                bufferedOutputStream.write(buffer, 0, bytesRead);
            }
        }
    }

    @Override
    public boolean delete() {
        if (!super.delete()) {
            throw new RuntimeException("Could not delete: " + getAbsolutePath());
        }
        return true;
    }

    public static File randomUncreatedFile() {
        File random = new File(TEMP_DIR, UUID.randomUUID().toString());
        random.deleteOnExit();
        return random;
    }

    @Override
    public boolean equals(Object obj) {
        return this == obj;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy