Package org.apache.ftpserver.test

Source Code of org.apache.ftpserver.test.TestUtil

/*
* 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.ftpserver.test;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import junit.framework.TestCase;

import org.apache.commons.codec.binary.Hex;
import org.apache.ftpserver.util.IoUtils;

/**
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*
*/
public class TestUtil {

    private static final int DEFAULT_PORT = 12321;

    public static File getBaseDir() {
        // check Maven system prop first and use if set
        String basedir = System.getProperty("basedir");
        if (basedir != null) {
            return new File(basedir);
        } else {
            // Are we using Eclipse based on parent directory?
            File core = new File("core");
            File check = new File(core,"src");
            if (check.isDirectory()) {
                return core;
            }
            return new File(".");
        }
    }

    /**
     * Attempts to find a free port
     *
     * @throws IOException
     *
     * @throws IOException
     */
    public static int findFreePort() throws IOException {
        return findFreePort(DEFAULT_PORT);
    }
   
    /**
     * Attempts to find a free port
     * @param initPort The first port to try, before resolving to
     *   brute force searching
     * @throws IOException
     *
     * @throws IOException
     */
    public static int findFreePort(int initPort) throws IOException {
        int port = -1;
        ServerSocket tmpSocket = null;
        // first try the default port
        try {
            tmpSocket = new ServerSocket(initPort);

            port = initPort;
           
            System.out.println("Using default port: " + port);
        } catch (IOException e) {
            System.out.println("Failed to use specified port");
            // didn't work, try to find one dynamically
            try {
                int attempts = 0;

                while (port < 1024 && attempts < 2000) {
                    attempts++;

                    tmpSocket = new ServerSocket(0);

                    port = tmpSocket.getLocalPort();
                }

            } catch (IOException e1) {
                throw new IOException(
                        "Failed to find a port to use for testing: "
                                + e1.getMessage());
            }
        } finally {
            if (tmpSocket != null) {
                try {
                    tmpSocket.close();
                } catch (IOException e) {
                    // ignore
                }
                tmpSocket = null;
            }
        }

        return port;
    }

    public static String[] getHostAddresses() throws Exception {
        Enumeration<NetworkInterface> nifs = NetworkInterface
                .getNetworkInterfaces();

        List<String> hostIps = new ArrayList<String>();
        while (nifs.hasMoreElements()) {
            NetworkInterface nif = nifs.nextElement();
            Enumeration<InetAddress> ips = nif.getInetAddresses();

            while (ips.hasMoreElements()) {
                InetAddress ip = ips.nextElement();
                if (ip instanceof java.net.Inet4Address) {
                    hostIps.add(ip.getHostAddress());
                } else {
                    // IPv6 not tested
                }
            }
        }

        return hostIps.toArray(new String[0]);
    }

    public static InetAddress findNonLocalhostIp() throws Exception {
        Enumeration<NetworkInterface> nifs = NetworkInterface
                .getNetworkInterfaces();

        while (nifs.hasMoreElements()) {
            NetworkInterface nif = nifs.nextElement();
            Enumeration<InetAddress> ips = nif.getInetAddresses();

            while (ips.hasMoreElements()) {
                InetAddress ip = ips.nextElement();
                if (ip instanceof java.net.Inet4Address
                        && !ip.isLoopbackAddress()) {
                    return ip;
                } else {
                    // IPv6 not tested
                }
            }
        }

        return null;
    }

    public static void writeDataToFile(File file, byte[] data)
            throws IOException {
        FileOutputStream fos = null;

        try {
            fos = new FileOutputStream(file);

            fos.write(data);
        } finally {
            IoUtils.close(fos);
        }
    }

    public static void assertFileEqual(byte[] expected, File file)
            throws Exception {
        ByteArrayOutputStream baos = null;
        FileInputStream fis = null;

        try {
            baos = new ByteArrayOutputStream();
            fis = new FileInputStream(file);

            IoUtils.copy(fis, baos, 1024);

            byte[] actual = baos.toByteArray();

            assertArraysEqual(expected, actual);
        } finally {
            IoUtils.close(fis);
            IoUtils.close(baos);
        }
    }

    public static void assertInArrays(Object expected, Object[] actual) {
        boolean found = false;
        for (int i = 0; i < actual.length; i++) {
            Object object = actual[i];
            if (object.equals(expected)) {
                found = true;
                break;
            }
        }

        if (!found) {
            TestCase.fail("Expected value not in array");
        }
    }

    public static void assertArraysEqual(byte[] expected, byte[] actual) {
        TestCase.assertEquals(new String(Hex.encodeHex(expected)), new String(Hex.encodeHex(actual)));
    }
}
TOP

Related Classes of org.apache.ftpserver.test.TestUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.