Commit 72321bd8 authored by chiaming2000's avatar chiaming2000
Browse files

Merge pull request #33 from Kinetic/integration-test

Optimize integration test: eliminate unnecessary ISE operations to reduce the test running time.
parents 1e386ff7 cb700e4b
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ PORT=8123
SSL_PORT=8443
HOME=`cd ~; pwd`
USE_SSL=false
ISE=false

JAVA=""
if [ "$JAVA_HOME" != "" ]; then
@@ -41,11 +42,12 @@ printUsage(){
   echo "            -tlsport              ssl connection port, defalt is 8443"
   echo "            -home                 drive or simulator home, default is user home path"
   echo "            -ssl                  true or false, default is false, run test without ssl connecttion"
   echo "            -ise                  true or false, default is false, use ise or not before test"
}


if [ $# -eq 0 ]; then
   exec "$JAVA" -classpath "$CLASSPATH" -Dkinetic.io.in=true -Dkinetic.io.out=true -DRUN_NIO_TEST=true -DRUN_SSL_TEST=${USE_SSL} -DRUN_AGAINST_EXTERNAL=true -DKINETIC_HOST=$HOST com.seagate.kinetic.allTests.ConformanceTestRunner
   exec "$JAVA" -classpath "$CLASSPATH" -Dkinetic.io.in=true -Dkinetic.io.out=true -DRUN_NIO_TEST=true -DRUN_SSL_TEST=${USE_SSL} -DRUN_AGAINST_EXTERNAL=true -DKINETIC_HOST=$HOST -DISE=$ISE com.seagate.kinetic.allTests.ConformanceTestRunner
   exit 0
fi

@@ -82,6 +84,11 @@ do
      USE_SSL=$2
      shift
      ;;
    -ise)
      echo "Print ssl \"$2\""
      ISE=$2
      shift
      ;;
    -usesocketlog)
      echo "Print usesocketlog \"$2\""
      USE_SOCKET_LOG=$2
@@ -112,6 +119,6 @@ do
   shift
done

exec "$JAVA" -classpath "$CLASSPATH" -Dkinetic.io.in=true -Dkinetic.io.out=true -DRUN_NIO_TEST=true -DRUN_SSL_TEST=${USE_SSL} -DRUN_AGAINST_EXTERNAL=true -DKINETIC_HOST=$HOST -DKINETIC_PORT=$PORT -DKINETIC_SSL_PORT=$SSL_PORT  -DKINETIC_HOME=$HOME com.seagate.kinetic.allTests.ConformanceTestRunner
exec "$JAVA" -classpath "$CLASSPATH" -Dkinetic.io.in=true -Dkinetic.io.out=true -DRUN_NIO_TEST=true -DRUN_SSL_TEST=${USE_SSL} -DRUN_AGAINST_EXTERNAL=true -DKINETIC_HOST=$HOST -DKINETIC_PORT=$PORT -DKINETIC_SSL_PORT=$SSL_PORT  -DKINETIC_HOME=$HOME -DISE=$ISE com.seagate.kinetic.allTests.ConformanceTestRunner

exit 0
+5 −3
Original line number Diff line number Diff line
@@ -109,9 +109,11 @@ public abstract class AbstractIntegrationTestTarget {
	protected void performISE() throws KineticException {
		KineticAdminClient kineticAdminClient = KineticAdminClientFactory
				.createInstance(getAdminClientConfig());
		byte[] newErasePin = toByteArray("123");
		kineticAdminClient.setErasePin(toByteArray(""), newErasePin);
		kineticAdminClient.instantErase(newErasePin);
		String oldErasePin = System.getProperty("OLD_PIN", "");
		String newErasePin = System.getProperty("NEW_PIN", "123");
		
		kineticAdminClient.setErasePin(toByteArray(oldErasePin), toByteArray(newErasePin));
		kineticAdminClient.instantErase(toByteArray(newErasePin));
		kineticAdminClient.close();
	}
}
+85 −84
Original line number Diff line number Diff line
@@ -16,6 +16,15 @@
 */
package com.seagate.kinetic;

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.ExecutionException;

import kinetic.client.KineticException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
import com.google.common.cache.CacheBuilder;
@@ -26,15 +35,6 @@ import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;

import kinetic.client.KineticException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.ExecutionException;

public class ExternalTestTarget extends AbstractIntegrationTestTarget {

    private static final Logger logger = LoggerFactory
@@ -48,13 +48,14 @@ public class ExternalTestTarget extends AbstractIntegrationTestTarget {
        if (clearExistingDatabase) {
            if (Boolean.getBoolean("FAST_CLEAN_UP")) {
                clearDatabaseUsingSSH(host);
			} else {
            } else if (Boolean.getBoolean(System.getProperty("ISE", "true"))) {
                performISE();
            } else {
            }
        }
    }

	// Cache SSH sessions to avoid the overhead of setting up and tearing down
    // Cache SSH sessions to avoid the overhead of setting up and tearing downrm
    // SSH connections to the target
    // before and after every test as part of the erase process
    @SuppressWarnings("unused")
+364 −349
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import kinetic.client.p2p.KineticP2pClient;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.DataProvider;

import com.google.protobuf.ByteString;
@@ -112,11 +113,25 @@ public class IntegrationTestCase {
        testTarget.shutdown();
    }

//	@BeforeMethod(alwaysRun = true)
//	protected void securityEraseTarget() throws KineticException {
//		getAdminClient().secureErase(
//				"NULL".getBytes(Charset.forName("UTF-8")));
//	}
    @BeforeSuite(alwaysRun = true)
    protected void securityEraseTarget() throws KineticException {
        if (Boolean.parseBoolean(System.getProperty("RUN_AGAINST_EXTERNAL"))) {
            AdminClientConfiguration acc = new AdminClientConfiguration();
            acc.setHost(System.getProperty("KINETIC_HOST", "127.0.0.1"));
            acc.setPort(Integer.parseInt(System.getProperty("KINETIC_SSL_PORT",
                    "8443")));

            KineticAdminClient kac = KineticAdminClientFactory
                    .createInstance(acc);
            String oldErasePin = System.getProperty("OLD_PIN", "");
            String newErasePin = System.getProperty("NEW_PIN", "123");

            kac.setErasePin(toByteArray(oldErasePin), toByteArray(newErasePin));
            kac.instantErase(toByteArray(newErasePin));

            kac.close();
        }
    }

    /**
     * Get a Kinetic client.
+96 −11
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import kinetic.admin.Role;
import kinetic.client.AsyncKineticException;
import kinetic.client.CallbackHandler;
import kinetic.client.CallbackResult;
import kinetic.client.Entry;
import kinetic.client.KineticClient;
import kinetic.client.KineticException;

@@ -109,8 +110,8 @@ public class KineticTestHelpers {
        };
    }

    public static void instantErase(String oldErasePin, String newErasePin, KineticAdminClient client)
            throws KineticException {
    public static void instantErase(String oldErasePin, String newErasePin,
            KineticAdminClient client) throws KineticException {

        byte[] oldErasePinB = toByteArray(oldErasePin);
        byte[] newErasePinB = toByteArray(newErasePin);
@@ -120,18 +121,102 @@ public class KineticTestHelpers {

    public static void cleanData(int keyCount, KineticClient client)
            throws KineticException {
        for (int i = 0; i < keyCount; i++) {
            byte[] key = toByteArray("key" + i);
        int keySize = keyCount - 1;
        boolean flag = true;
        byte[] keyB = toByteArray("key0");
        while (flag) {
            client.deleteForced(keyB);

            Entry enN = client.getNext(keyB);

            if (enN == null) {
                flag = false;
            } else if (new String(enN.getKey(), Charset.forName("UTF-8"))
                    .equals("key" + keySize)) {
                flag = false;
                client.deleteForced(enN.getKey());
            } else {
                keyB = enN.getKey();
            }
        }
    }

    public static void cleanData(byte[] startKey, byte[] endKey,
            KineticClient client) throws KineticException {
        boolean flag = true;
        while (flag) {
            client.deleteForced(startKey);

            Entry enN = client.getNext(startKey);

            if (enN == null) {
                flag = false;
            } else if (new String(enN.getKey(), Charset.forName("UTF-8"))
                    .equals(new String(endKey, Charset.forName("UTF-8")))) {
                flag = false;
                client.deleteForced(enN.getKey());
            } else {
                startKey = enN.getKey();
            }
        }
    }

    public static void cleanNextData(byte[] key, KineticClient client)
            throws KineticException {
        boolean flag = true;
        while (flag) {
            Entry enN = client.getNext(key);
            if (enN == null) {
                flag = false;
                client.deleteForced(key);
            } else {
                client.deleteForced(key);
                key = enN.getKey();
            }
        }
    }

    public static void cleanPreviousData(byte[] key, KineticClient client)
            throws KineticException {
        boolean flag = true;
        while (flag) {
            Entry enN = client.getPrevious(key);

            if (enN == null) {
                flag = false;
                client.deleteForced(key);
            } else {
                client.deleteForced(key);
                key = enN.getKey();
            }
        }
    }

    public static void cleanKVGenData(int keyCount, KineticClient client)
            throws KineticException {
        KVGenerator kvGen = new KVGenerator();
        String lastKey = "";
        for (int i = 0; i < keyCount; i++) {
            byte[] key = toByteArray(kvGen.getNextKey());
            client.deleteForced(key);
            lastKey = kvGen.getNextKey();
        }

        boolean flag = true;
        KVGenerator kvGen1 = new KVGenerator();
        byte[] keyB = toByteArray(kvGen1.getNextKey());
        while (flag) {
            client.deleteForced(keyB);

            Entry enN = client.getNext(keyB);

            if (enN == null) {
                flag = false;
            } else if (new String(enN.getKey(), Charset.forName("UTF-8"))
                    .equals(lastKey)) {
                flag = false;
                client.deleteForced(enN.getKey());
            } else {
                keyB = enN.getKey();
            }
        }
    }

Loading