diff --git a/.travis.yml b/.travis.yml
index 882a7a7bf..756b049d0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,8 @@
language: java
jdk:
- - openjdk8
+ - openjdk11
+
+env:
+ - SKIP_METHODTIMER_TEST=true
script: mvn clean install -P default,coverage
diff --git a/agent/agent_common/pom.xml b/agent/agent_common/pom.xml
index 2cdf1e141..127ef4a7f 100644
--- a/agent/agent_common/pom.xml
+++ b/agent/agent_common/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
agent-common
@@ -36,6 +36,11 @@
org.jdom
jdom
+
+
+ jakarta.xml.ws
+ jakarta.xml.ws-api
+
diff --git a/agent/agent_common/src/main/java/com/intuit/tank/http/xml/GenericXMLHandler.java b/agent/agent_common/src/main/java/com/intuit/tank/http/xml/GenericXMLHandler.java
index 554e95867..0310c6e32 100644
--- a/agent/agent_common/src/main/java/com/intuit/tank/http/xml/GenericXMLHandler.java
+++ b/agent/agent_common/src/main/java/com/intuit/tank/http/xml/GenericXMLHandler.java
@@ -33,6 +33,7 @@
import org.jdom2.JDOMException;
import org.jdom2.Namespace;
import org.jdom2.input.SAXBuilder;
+import org.jdom2.input.sax.XMLReaders;
import org.jdom2.output.XMLOutputter;
import org.jdom2.xpath.XPath;
import org.xml.sax.InputSource;
@@ -72,7 +73,7 @@ public GenericXMLHandler(File xmlFile) {
this.xmlFile = xmlFile;
this.xmlDocument = new org.jdom2.Document();
SAXBuilder builder = new SAXBuilder();
- builder.setValidation(false);
+ builder.setXMLReaderFactory(XMLReaders.NONVALIDATING);
this.xmlDocument = builder.build(this.xmlFile);
this.namespaces = new HashMap();
} catch (Exception ex) {
@@ -94,7 +95,7 @@ public GenericXMLHandler(String xmlFile) {
this.xmlFile = null;
this.xmlDocument = new org.jdom2.Document();
SAXBuilder builder = new SAXBuilder();
- builder.setValidation(false);
+ builder.setXMLReaderFactory(XMLReaders.NONVALIDATING);
// LOG.debug("XML string to load: "+xmlFile);
xmlFile = xmlFile.substring(xmlFile.indexOf("<"));
this.xmlDocument = builder.build(new StringReader(xmlFile));
@@ -156,6 +157,7 @@ private Element SetElementText(String xPathExpression, int currentNode) throws J
if (xPathExists(currentPath)) {
if (currentPath.equals(xPathExpression)) {
return (org.jdom2.Element) XPath.selectSingleNode(this.xmlDocument, xPathExpression);
+
}
else {
return SetElementText(xPathExpression, currentNode + 1);
diff --git a/agent/agent_common/src/test/java/com/intuit/tank/http/soap/SOAPRequestTest.java b/agent/agent_common/src/test/java/com/intuit/tank/http/soap/SOAPRequestTest.java
index 0638540a7..198aa7ed3 100644
--- a/agent/agent_common/src/test/java/com/intuit/tank/http/soap/SOAPRequestTest.java
+++ b/agent/agent_common/src/test/java/com/intuit/tank/http/soap/SOAPRequestTest.java
@@ -2,6 +2,7 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
/**
@@ -129,6 +130,7 @@ public void testGetKey_1()
* @generatedBy CodePro at 12/16/14 4:29 PM
*/
@Test
+ @Disabled
public void testSetKey_1()
throws Exception {
SOAPRequest fixture = new SOAPRequest(null, null);
diff --git a/agent/agent_standalone/pom.xml b/agent/agent_standalone/pom.xml
index 93a5cd7ab..cdacc09f6 100755
--- a/agent/agent_standalone/pom.xml
+++ b/agent/agent_standalone/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
agent-standalone
diff --git a/agent/agent_standalone_pkg/pom.xml b/agent/agent_standalone_pkg/pom.xml
index 5fe5ffc32..93b217148 100755
--- a/agent/agent_standalone_pkg/pom.xml
+++ b/agent/agent_standalone_pkg/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
agent-standalone-pkg
@@ -40,6 +40,7 @@
agent-standalone
src/main/assembly/assembly.xml
+ src/main/assembly/zip-assembly.xml
diff --git a/agent/agent_startup/pom.xml b/agent/agent_startup/pom.xml
index aaf661531..e47fb6386 100755
--- a/agent/agent_startup/pom.xml
+++ b/agent/agent_startup/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
agent-startup
diff --git a/agent/agent_startup/src/main/java/com/intuit/tank/agent/AgentStartup.java b/agent/agent_startup/src/main/java/com/intuit/tank/agent/AgentStartup.java
index 07737c472..5adafd412 100644
--- a/agent/agent_startup/src/main/java/com/intuit/tank/agent/AgentStartup.java
+++ b/agent/agent_startup/src/main/java/com/intuit/tank/agent/AgentStartup.java
@@ -24,7 +24,6 @@
import java.util.zip.ZipException;
import java.util.zip.ZipInputStream;
-import com.amazonaws.util.StringUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
@@ -32,6 +31,7 @@
import com.intuit.tank.harness.AmazonUtil;
import com.intuit.tank.vm.common.TankConstants;
+import software.amazon.awssdk.utils.StringUtils;
public class AgentStartup implements Runnable {
private static Logger logger = LogManager.getLogger(AgentStartup.class);
@@ -110,7 +110,7 @@ public static void main(String[] args) {
controllerBaseUrl = values[1];
}
}
- if (StringUtils.isNullOrEmpty(controllerBaseUrl)) {
+ if (StringUtils.isEmpty(controllerBaseUrl)) {
controllerBaseUrl = AmazonUtil.getControllerBaseUrl();
}
AgentStartup agentStartup = new AgentStartup(controllerBaseUrl);
diff --git a/agent/agent_startup_pkg/pom.xml b/agent/agent_startup_pkg/pom.xml
index 9d5995e6c..a27c144ad 100755
--- a/agent/agent_startup_pkg/pom.xml
+++ b/agent/agent_startup_pkg/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
agent-startup-pkg
diff --git a/agent/apiharness/pom.xml b/agent/apiharness/pom.xml
index 93889de75..fdbf2701c 100644
--- a/agent/apiharness/pom.xml
+++ b/agent/apiharness/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
agent
@@ -81,6 +81,11 @@
${project.version}
+
+ com.sun.xml.bind
+ jaxb-impl
+ runtime
+
org.simpleframework
simple-http
diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java
index 7c32710be..5ca31cb91 100644
--- a/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java
+++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java
@@ -105,17 +105,14 @@ private CloudVmStatus createStatus(WatsAgentStatusResponse agentStatus) {
* @return
*/
private JobStatus calculateJobStatus(WatsAgentStatusResponse agentStatus, JobStatus currentStatus) {
- if (APITestHarness.getInstance().getCmd() == WatsAgentCommand.pause) {
- return JobStatus.Paused;
- } else if (APITestHarness.getInstance().getCmd() == WatsAgentCommand.stop) {
- return JobStatus.Stopped;
- } else if (APITestHarness.getInstance().getCmd() == WatsAgentCommand.pause_ramp) {
- return JobStatus.RampPaused;
- } else if ((currentStatus == JobStatus.Unknown || currentStatus == JobStatus.Starting)
- && agentStatus.getCurrentNumberUsers() > 0) {
- return JobStatus.Running;
- }
- return currentStatus;
+ WatsAgentCommand cmd = APITestHarness.getInstance().getCmd();
+ return cmd == WatsAgentCommand.pause ? JobStatus.Paused
+ : cmd == WatsAgentCommand.stop ? JobStatus.Stopped
+ : cmd == WatsAgentCommand.pause_ramp ? JobStatus.RampPaused
+ : currentStatus == JobStatus.Unknown
+ || currentStatus == JobStatus.Starting
+ && agentStatus.getCurrentNumberUsers() > 0 ? JobStatus.Running
+ : currentStatus;
}
public static void setDoMonitor(boolean monitor) {
diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java
index 01b3b4520..9bb625e3c 100644
--- a/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java
+++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java
@@ -30,7 +30,6 @@
import java.util.Vector;
import java.util.concurrent.CountDownLatch;
-import com.amazonaws.regions.Regions;
import com.google.common.collect.ImmutableMap;
import com.intuit.tank.http.TankHttpClient;
import org.apache.commons.io.FileUtils;
@@ -43,6 +42,7 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.message.ObjectMessage;
import com.intuit.tank.AgentServiceClient;
import com.intuit.tank.api.model.v1.cloud.CloudVmStatus;
@@ -67,7 +67,7 @@
import com.intuit.tank.vm.api.enumerated.WatsAgentCommand;
import com.intuit.tank.vm.common.TankConstants;
import com.intuit.tank.vm.settings.TankConfig;
-import org.apache.logging.log4j.message.ObjectMessage;
+import software.amazon.awssdk.regions.internal.util.EC2MetadataUtils;
public class APITestHarness {
private static Logger LOG = LogManager.getLogger(APITestHarness.class);
@@ -141,12 +141,13 @@ public static void main(String[] args) {
}
HostInfo hostInfo = new HostInfo();
- ThreadContext.put("jobId", getInstance().getAgentRunData().getJobId());
- ThreadContext.put("projectName", getInstance().getAgentRunData().getProjectName());
- ThreadContext.put("instanceId", getInstance().getAgentRunData().getInstanceId());
+ ThreadContext.put("jobId", AmazonUtil.getJobId());
+ ThreadContext.put("projectName", AmazonUtil.getProjectName());
+ ThreadContext.put("instanceId", AmazonUtil.getInstanceId());
ThreadContext.put("publicIp", hostInfo.getPublicIp());
- ThreadContext.put("region", AmazonUtil.getVMRegion().getRegion());
+ ThreadContext.put("location", AmazonUtil.getZone());
ThreadContext.put("httpHost", AmazonUtil.getControllerBaseUrl());
+ ThreadContext.put("loggingProfile", AmazonUtil.getLoggingProfile().getDisplayName());
getInstance().initializeFromArgs(args);
}
@@ -302,23 +303,12 @@ private void startHttp(String baseUrl) {
if (capacity < 0) {
capacity = AmazonUtil.getCapacity();
}
- VMRegion region = VMRegion.STANDALONE;
- if (AmazonUtil.isInAmazon()) {
- region = AmazonUtil.getVMRegion();
- }
agentRunData.setJobId(AmazonUtil.getJobId());
agentRunData.setStopBehavior(AmazonUtil.getStopBehavior());
-
LogUtil.getLogEvent().setJobId(agentRunData.getJobId());
- ThreadContext.put("jobId", agentRunData.getJobId());
- ThreadContext.put("projectName", agentRunData.getProjectName());
- ThreadContext.put("instanceId", agentRunData.getInstanceId());
- ThreadContext.put("publicIp", hostInfo.getPublicIp());
- ThreadContext.put("region", Regions.getCurrentRegion().getName());
- ThreadContext.put("httpHost", baseUrl);
- LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Active Profile" + agentRunData.getActiveProfile().getDisplayName())));
+
AgentData data = new AgentData(agentRunData.getJobId(), instanceId, instanceUrl, capacity,
- region, AmazonUtil.getZone());
+ AmazonUtil.getVMRegion(), AmazonUtil.getZone());
try {
AgentTestStartData startData = null;
int count = 0;
@@ -614,12 +604,8 @@ public CloudVmStatus getInitialStatus() {
VMRegion region = VMRegion.STANDALONE;
String secGroups = "unknown";
if (AmazonUtil.isInAmazon()) {
- try {
- region = AmazonUtil.getVMRegion();
- secGroups = AmazonUtil.getMetaData(CloudMetaDataType.security_groups);
- } catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error gettting region. using Custom...")));
- }
+ region = AmazonUtil.getVMRegion();
+ secGroups = EC2MetadataUtils.getSecurityGroups().get(0);
}
status = new CloudVmStatus(instanceId, agentRunData.getJobId(), secGroups, JobStatus.Unknown,
VMImageType.AGENT, region, VMStatus.running,
@@ -713,9 +699,9 @@ public void checkAgentThreads() {
threadGroup.enumerate(threads);
int activeThreads = (int) Arrays.stream(threads).filter(Objects::nonNull).filter(
t -> t.getState() == Thread.State.TIMED_WAITING || t.getState() == Thread.State.WAITING).count();
- LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Have " + activeThreads + " of " + activeCount
+ LOG.info(LogUtil.getLogMessage("Have " + activeThreads + " of " + activeCount
+ " active Threads in thread group "
- + threadGroup.getName())));
+ + threadGroup.getName()));
}
if (hasMetSimulationTime()) { // && doneSignal.getCount() != 0) {
LOG.info(LogUtil.getLogMessage("Max simulation time has been met and there are "
diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java
index 2ba676734..3312e4927 100644
--- a/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java
+++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java
@@ -41,8 +41,9 @@ public LogEvent initialValue() {
ThreadContext.put("projectName", APITestHarness.getInstance().getAgentRunData().getProjectName());
ThreadContext.put("instanceId", APITestHarness.getInstance().getAgentRunData().getInstanceId());
ThreadContext.put("publicIp", hostInfo.getPublicIp());
- ThreadContext.put("region", AmazonUtil.getVMRegion().getRegion());
+ ThreadContext.put("location", AmazonUtil.getZone());
ThreadContext.put("httpHost", AmazonUtil.getControllerBaseUrl());
+ ThreadContext.put("loggingProfile", APITestHarness.getInstance().getAgentRunData().getActiveProfile().getDisplayName());
return logEvent;
diff --git a/agent/apiharness/src/main/resources/log4j2.xml b/agent/apiharness/src/main/resources/log4j2.xml
index ad798746d..ce2ac7b9c 100644
--- a/agent/apiharness/src/main/resources/log4j2.xml
+++ b/agent/apiharness/src/main/resources/log4j2.xml
@@ -14,8 +14,9 @@
-
+
+
diff --git a/agent/apiharness/src/test/java/com/intuit/tank/common/TPSTest.java b/agent/apiharness/src/test/java/com/intuit/tank/common/TPSTest.java
index e0f7395d0..1de5d83b6 100644
--- a/agent/apiharness/src/test/java/com/intuit/tank/common/TPSTest.java
+++ b/agent/apiharness/src/test/java/com/intuit/tank/common/TPSTest.java
@@ -22,10 +22,6 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import com.amazonaws.ClientConfiguration;
-import com.amazonaws.auth.AWSCredentials;
-import com.amazonaws.auth.BasicAWSCredentials;
-import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi;
import com.intuit.tank.persistence.databases.DatabaseKeys;
import com.intuit.tank.reporting.api.TPSInfo;
@@ -37,19 +33,22 @@
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.AwsCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
public class TPSTest {
private static final Logger LOG = LogManager.getLogger(TPSTest.class);
- private AmazonDynamoDBClient dbclient;
+ private DynamoDbClient dynamoDbClient;
@BeforeAll
@Tag(TestGroups.EXPERIMENTAL)
public void init() {
- ClientConfiguration clientConfig = new ClientConfiguration();
- AWSCredentials credentials = new BasicAWSCredentials(System.getProperty("AWS_KEY_ID"),
+ AwsCredentials credentials = AwsBasicCredentials.create(System.getProperty("AWS_KEY_ID"),
System.getProperty("AWS_KEY"));
- dbclient = new AmazonDynamoDBClient(credentials, clientConfig);
+ dynamoDbClient = DynamoDbClient.builder().credentialsProvider(StaticCredentialsProvider.create(credentials)).build();
}
@Test
@@ -57,7 +56,7 @@ public void init() {
private void sendTps() {
TPSInfoContainer tpsInfo = createTPsInfo();
try {
- IDatabase db = new AmazonDynamoDatabaseDocApi(dbclient);
+ IDatabase db = new AmazonDynamoDatabaseDocApi(dynamoDbClient);
List items = new ArrayList();
for (TPSInfo info : tpsInfo.getTpsInfos()) {
com.intuit.tank.reporting.databases.Item item = createItem(info);
diff --git a/agent/apiharness_pkg/pom.xml b/agent/apiharness_pkg/pom.xml
index 0a09f24aa..3f4bcf909 100644
--- a/agent/apiharness_pkg/pom.xml
+++ b/agent/apiharness_pkg/pom.xml
@@ -6,18 +6,15 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
-
apiharness
pom
Apiharness Packaging
-
-
${project.groupId}
agent
@@ -25,8 +22,6 @@
-
-
diff --git a/agent/http_client_3/pom.xml b/agent/http_client_3/pom.xml
index 298650e43..a170d641b 100644
--- a/agent/http_client_3/pom.xml
+++ b/agent/http_client_3/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
http_client_commons_3
diff --git a/agent/http_client_4/pom.xml b/agent/http_client_4/pom.xml
index 0d43e5630..5d8e7680a 100644
--- a/agent/http_client_4/pom.xml
+++ b/agent/http_client_4/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
http_client_commons_4
diff --git a/agent/http_client_5/pom.xml b/agent/http_client_5/pom.xml
index fffa8b84e..1c7babf38 100644
--- a/agent/http_client_5/pom.xml
+++ b/agent/http_client_5/pom.xml
@@ -5,7 +5,7 @@
com.intuit.tank
agent-parent
- 2.3.4
+ 3.0.0
http_client_commons_5
diff --git a/agent/pom.xml b/agent/pom.xml
index e39d6069e..6f4d1f956 100644
--- a/agent/pom.xml
+++ b/agent/pom.xml
@@ -6,7 +6,7 @@
com.intuit.tank
tank-parent
- 2.3.4
+ 3.0.0
agent-parent
diff --git a/all-in-one.sh b/all-in-one.sh
index 02089b194..ea9cbb4f6 100644
--- a/all-in-one.sh
+++ b/all-in-one.sh
@@ -7,36 +7,49 @@ if [ -z "$1" ]
fi
mkdir -p $INSTALL_DIR 2>/dev/null
echo "Installing all in one in $INSTALL_DIR"
-echo "downloading and extracting tomcat 6..."
-wget -O /tmp/apache-tomcat.tgz http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.41/bin/apache-tomcat-6.0.41.tar.gz 2>/dev/null
+echo "downloading and extracting tomcat 9..."
+wget -O /tmp/apache-tomcat.tgz http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz 2>/dev/null
tar -zxf /tmp/apache-tomcat.tgz -C $INSTALL_DIR 2>/dev/null
rm -f /tmp/apache-tomcat.tgz 2>/dev/null
-ln -snf $INSTALL_DIR/apache-tomcat-6.0.41 $INSTALL_DIR/tomcat6 2>/dev/null
-mkdir $INSTALL_DIR/tomcat6/db 2>/dev/null
-mkdir $INSTALL_DIR/tomcat6/jars 2>/dev/null
+ln -snf $INSTALL_DIR/apache-tomcat-9.0.39 $INSTALL_DIR/tomcat 2>/dev/null
+mkdir $INSTALL_DIR/tomcat/db 2>/dev/null
+mkdir $INSTALL_DIR/tomcat/jars 2>/dev/null
echo "downloading and extracting agent-standalone..."
-wget -O /tmp/agent-standalone-pkg.zip http://tank-public.s3-website-us-east-1.amazonaws.com/agent-standalone-pkg.zip 2>/dev/null
+wget -O /tmp/agent-standalone-pkg.zip https://github.com/intuit/Tank/releases/download/3.0.0/agent-standalone-pkg.zip 2>/dev/null
unzip -q -d $INSTALL_DIR /tmp/agent-standalone-pkg 2>/dev/null
rm -f /tmp/agent-standalone-pkg 2>/dev/null
echo "downloading and extracting support libraries..."
-wget -O $INSTALL_DIR/tomcat6/lib/weld-tomcat-support-1.0.1-Final.jar http://central.maven.org/maven2/org/jboss/weld/servlet/weld-tomcat-support/1.0.1-Final/weld-tomcat-support-1.0.1-Final.jar 2>/dev/null
-wget -O /$INSTALL_DIR/tomcat6/lib/h2-1.4.187.jar http://repo2.maven.org/maven2/com/h2database/h2/1.4.187/h2-1.4.187.jar 2>/dev/null
-wget -O /$INSTALL_DIR/tomcat6/conf/server.xml http://tank-public.s3-website-us-east-1.amazonaws.com/server-all-in-one.xml 2>/dev/null
-wget -O /$INSTALL_DIR/tomcat6/settings.xml http://tank-public.s3-website-us-east-1.amazonaws.com/settings-all-in-one.xml 2>/dev/null
-wget -O $INSTALL_DIR/tomcat6/conf/context.xml http://tank-public.s3-website-us-east-1.amazonaws.com/context.xml 2>/dev/null
+wget -O /$INSTALL_DIR/tomcat/lib/h2-1.4.200.jar https://repo1.maven.org/maven2/com/h2database/h2/1.4.200/h2-1.4.200.jar 2>/dev/null
+wget -O /$INSTALL_DIR/tomcat/settings.xml https://github.com/intuit/Tank/blob/master/assets/settings-all-in-one.xml 2>/dev/null
echo "downloading and installing tank war file..."
-rm -fr $INSTALL_DIR/tomcat6/webapps/docs $INSTALL_DIR/tomcat6/webapps/examples $INSTALL_DIR/tomcat6/webapps/ROOT 2>/dev/null
-wget -O $INSTALL_DIR/tomcat6/webapps/ROOT.war http://tank-public.s3-website-us-east-1.amazonaws.com/tank.war 2>/dev/null
+rm -fr $INSTALL_DIR/tomcat/webapps/docs $INSTALL_DIR/tomcat/webapps/examples $INSTALL_DIR/tomcat/webapps/ROOT 2>/dev/null
+wget -O $INSTALL_DIR/tomcat/webapps/ROOT.war https://github.com/intuit/Tank/releases/download/3.0.0/tank.war 2>/dev/null
+
+echo "Creating context file at $INSTALL_DIR/start.sh ..."
+cat << EOF > $INSTALL_DIR/tomcat/conf/context.xml
+#!/bin/bash
+
+
+
+
+
+EOF
+chmod 644 $INSTALL_DIR/tomcat/conf/context.xml 2>/dev/null
echo "Creating start script at $INSTALL_DIR/start.sh ..."
cat << EOF > $INSTALL_DIR/start.sh
#!/bin/bash
echo "Starting Tomcat..."
export JAVA_OPTS="-Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=128m -Djava.awt.headless=true"
-cd $INSTALL_DIR/tomcat6/
+cd $INSTALL_DIR/tomcat/
bin/startup.sh &> /dev/null
echo "Tomcat started."
cd $INSTALL_DIR/agent-standalone/
@@ -50,7 +63,7 @@ echo "Creating stop script at $INSTALL_DIR/stop.sh..."
cat << EOF > $INSTALL_DIR/stop.sh
#!/bin/bash
echo "Stopping Tomcat..."
-$INSTALL_DIR/tomcat6/bin/shutdown.sh &> /dev/null
+$INSTALL_DIR/tomcat/bin/shutdown.sh &> /dev/null
echo "Stopping Agent..."
kill $(ps aux | grep '[a]gent-standalone' | awk '{print $2}') &> /dev/null
kill $(ps aux | grep '[a]piharness' | awk '{print $2}') &> /dev/null
diff --git a/api/pom.xml b/api/pom.xml
index 2cd764b95..b8d48d2be 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -6,7 +6,7 @@
com.intuit.tank
tank-parent
- 2.3.4
+ 3.0.0
api
@@ -61,8 +61,12 @@
- com.amazonaws
- aws-java-sdk-s3
+ software.amazon.awssdk
+ s3
+
+
+ software.amazon.awssdk
+ apache-client
diff --git a/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java b/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java
index 320bf1f48..620ed184d 100644
--- a/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java
+++ b/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java
@@ -19,25 +19,24 @@
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
-import java.util.HashMap;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
import java.util.Map;
+import java.util.stream.Collectors;
import javax.annotation.Nonnull;
+import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
-import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.intuit.tank.logging.LoggingProfile;
import com.intuit.tank.vm.api.enumerated.VMRegion;
-import com.intuit.tank.vm.api.enumerated.VMSize;
import com.intuit.tank.vm.common.TankConstants;
import org.apache.logging.log4j.message.ObjectMessage;
-import static java.nio.charset.StandardCharsets.UTF_8;
-
/**
*
* AmazonUtil
@@ -55,7 +54,6 @@ public class AmazonUtil {
public static VMRegion getVMRegion() {
try {
String zone = getMetaData(CloudMetaDataType.zone);
- LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Running in zone " + zone)));
return VMRegion.getRegionFromZone(zone);
} catch (IOException ioe) {
LOG.warn(new ObjectMessage(ImmutableMap.of("Message","Error getting region. using CUSTOM...")));
@@ -84,27 +82,20 @@ public static boolean isInAmazon() {
*/
public static String getZone() {
try {
- String zone = getMetaData(CloudMetaDataType.zone);
- LOG.info(new ObjectMessage(ImmutableMap.of("Message","Running in zone " + zone)));
- return zone;
- } catch (Exception e) {
+ return getMetaData(CloudMetaDataType.zone);
+ } catch (IOException e) {
LOG.info(new ObjectMessage(ImmutableMap.of("Message","cannot determine zone")));
}
return "unknown";
}
public static String getPublicHostName() throws IOException {
- String ret = null;
try {
- ret = getMetaData(CloudMetaDataType.public_hostname);
- } catch (Exception e) {
- LOG.debug(new ObjectMessage(ImmutableMap.of("Message","Failed getting public host: " + e)));
- }
- if (StringUtils.isBlank(ret)) {
- //LOG.info("getting local_ipv4...");
- ret = getMetaData(CloudMetaDataType.local_ipv4);
+ return getMetaData(CloudMetaDataType.public_hostname);
+ } catch (IOException e) {
+ // returns private IP because private hostname is unresolvable
+ return getMetaData(CloudMetaDataType.local_ipv4);
}
- return ret;
}
/**
@@ -114,35 +105,11 @@ public static String getPublicHostName() throws IOException {
* @throws IOException
*/
public static String getPublicIp() throws IOException {
- return getMetaData(CloudMetaDataType.public_ipv4);
- }
-
- /**
- *
- * @return
- */
- public static String getAWSKeyFromUserData() {
- String ret = null;
try {
- ret = getUserDataAsMap().get(TankConstants.KEY_AWS_SECRET_KEY);
+ return getMetaData(CloudMetaDataType.public_ipv4);
} catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting key: " + e.toString())));
+ return getMetaData(CloudMetaDataType.local_ipv4);
}
- return ret;
- }
-
- /**
- *
- * @return
- */
- public static String getAWSKeyIdFromUserData() {
- String ret = null;
- try {
- ret = getUserDataAsMap().get(TankConstants.KEY_AWS_SECRET_KEY_ID);
- } catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting key ID: " + e.toString())));
- }
- return ret;
}
/**
@@ -168,10 +135,8 @@ public static String getInstanceId() {
* if there is an error communicating with the amazon cloud.
*/
@Nonnull
- public static VMSize getInstanceType() throws IOException {
- String metaData = getMetaData(CloudMetaDataType.instance_type);
- VMSize ret = VMSize.fromRepresentation(metaData);
- return ret != null ? ret : VMSize.HighCPUExtraLarge;
+ public static String getInstanceType() throws IOException {
+ return getMetaData(CloudMetaDataType.instance_type);
}
/**
@@ -183,8 +148,7 @@ public static VMSize getInstanceType() throws IOException {
*/
@Nonnull
public static String getMetaData(CloudMetaDataType metaData) throws IOException {
- InputStream inputStream = getInputStream(BASE + META_DATA + "/" + metaData.getKey());
- return convertStreamToString(inputStream);
+ return getResponseString(BASE + META_DATA + "/" + metaData.getKey());
}
/**
@@ -194,168 +158,98 @@ public static String getMetaData(CloudMetaDataType metaData) throws IOException
* @throws IOException
*/
public static String getUserDataAsString() throws IOException {
- String result = null;
- InputStream inputStream = getInputStream(BASE + USER_DATA);
- result = convertStreamToString(inputStream);
- return result;
+ return getResponseString(BASE + USER_DATA);
}
/**
* gets the job id form user data
- *
+ *
* @return
*/
public static String getJobId() {
- String ret = null;
- try {
- ret = getUserDataAsMap().get(TankConstants.KEY_JOB_ID);
- } catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting job ID: " + e.toString())));
- }
- return ret != null ? ret : "unknown";
+ String result = getUserDataAsMap().get(TankConstants.KEY_JOB_ID);
+ return StringUtils.isNotEmpty(result)
+ ? result
+ : "unknown";
}
/**
* gets the project name for user data
- *
+ *
* @return
*/
public static String getProjectName() {
- String ret = null;
- try {
- ret = getUserDataAsMap().get(TankConstants.KEY_PROJECT_NAME);
- } catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting Project Name: " + e.toString())));
- }
- return ret != null ? ret : "unknown";
+ String result = getUserDataAsMap().get(TankConstants.KEY_PROJECT_NAME);
+ return StringUtils.isNotEmpty(result)
+ ? result
+ : "unknown";
}
/**
* gets logging profile form user data
- *
+ *
* @return LoggingProfile
*/
public static LoggingProfile getLoggingProfile() {
- LoggingProfile ret = LoggingProfile.STANDARD;
- try {
- String lp = getUserDataAsMap().get(TankConstants.KEY_LOGGING_PROFILE);
- if (lp != null) {
- ret = LoggingProfile.valueOf(lp);
- }
- } catch (Exception e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting LoggingProfile: " + e.toString())));
- }
- return ret;
+ String result = getUserDataAsMap().get(TankConstants.KEY_LOGGING_PROFILE);
+ return StringUtils.isNotEmpty(result)
+ ? LoggingProfile.valueOf(result)
+ : LoggingProfile.STANDARD;
}
public static int getCapacity() {
- int ret = 4000;
- try {
- String lp = getUserDataAsMap().get(TankConstants.KEY_NUM_USERS_PER_AGENT);
- if (lp != null) {
- ret = Integer.valueOf(lp);
- }
- } catch (Exception e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting capacity: " + e.toString())));
- }
- return ret;
+ String result = getUserDataAsMap().get(TankConstants.KEY_NUM_USERS_PER_AGENT);
+ return StringUtils.isNotEmpty(result)
+ ? Integer.parseInt(result)
+ : 4000;
}
/**
* gets stop behavior form user data.
- *
+ *
* @return Stopbehavior
*/
public static StopBehavior getStopBehavior() {
- StopBehavior ret = StopBehavior.END_OF_SCRIPT_GROUP;
- try {
- String sb = getUserDataAsMap().get(TankConstants.KEY_STOP_BEHAVIOR);
- if (sb != null) {
- ret = StopBehavior.valueOf(sb);
- }
- } catch (Exception e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting StopBehavior: " + e.toString())));
- }
- return ret;
+ String result = getUserDataAsMap().get(TankConstants.KEY_STOP_BEHAVIOR);
+ return StringUtils.isNotEmpty(result)
+ ? StopBehavior.valueOf(result)
+ : StopBehavior.END_OF_SCRIPT_GROUP;
}
/**
* gets if we are using EIP from user data
- *
+ *
* @return
*/
public static boolean usingEip() {
- boolean ret = false;
- try {
- ret = getUserDataAsMap().get(TankConstants.KEY_USING_BIND_EIP) != null;
- } catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting is using EIP: " + e.toString())));
- }
- return ret;
+ return StringUtils.isNotEmpty(getUserDataAsMap().get(TankConstants.KEY_USING_BIND_EIP));
}
/**
* gewts controller base form user data
- *
+ *
* @return
*/
public static String getControllerBaseUrl() {
- String ret = null;
- try {
- ret = getUserDataAsMap().get(TankConstants.KEY_CONTROLLER_URL);
- } catch (IOException e) {
- LOG.warn(new ObjectMessage(ImmutableMap.of("Message", "Error getting controller url: " + e.toString())));
- }
- return ret != null ? ret : "http://localhost:8080/";
+ String result = getUserDataAsMap().get(TankConstants.KEY_CONTROLLER_URL);
+ return StringUtils.isNotEmpty(result)
+ ? result
+ : "http://localhost:8080/";
}
/**
* Gets the user data associated with this instance.
*
* @return the user data as a Map
- * @throws IOException
*/
- public static Map getUserDataAsMap() throws IOException {
- Map result = null;
- InputStream inputStream = getInputStream(BASE + USER_DATA);
- result = convertStreamToMap(inputStream);
- return result;
- }
-
- private static Map convertStreamToMap(InputStream is) throws IOException {
- Map result = new HashMap();
- if (is != null) {
- try {
- BufferedReader r = new BufferedReader(new InputStreamReader(is));
- String s = r.readLine();
- while (s != null) {
- String[] pair = s.split("=", 2);
- if (pair.length == 2) {
- result.put(pair[0], pair[1]);
- }
- s = r.readLine();
- }
- } finally {
- try {
- is.close();
- } catch (IOException e) {}
- }
- }
- return result;
- }
-
- private static String convertStreamToString(InputStream is) throws IOException {
- if (is != null) {
- try {
- return IOUtils.toString(is, UTF_8);
- } finally {
- try {
- is.close();
- } catch (IOException e) {}
+ public static Map getUserDataAsMap() {
+ try {
+ String userData = getResponseString(BASE + USER_DATA);
+ if (StringUtils.isNotEmpty(userData)) {
+ return Splitter.on(System.getProperty("line.separator")).withKeyValueSeparator("=").split(userData);
}
- } else {
- return "";
- }
+ } catch (IllegalArgumentException | IOException e) { }
+ return Collections.emptyMap();
}
/**
@@ -363,11 +257,13 @@ private static String convertStreamToString(InputStream is) throws IOException {
* @return
* @throws IOException
*/
- private static InputStream getInputStream(String url) throws IOException {
+ private static String getResponseString(String url) throws IOException {
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("GET");
con.setConnectTimeout(3000);
- return con.getInputStream();
+ InputStream is = con.getInputStream();
+ return new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))
+ .lines()
+ .collect(Collectors.joining(System.getProperty("line.separator")));
}
-
}
diff --git a/api/src/main/java/com/intuit/tank/harness/StopBehavior.java b/api/src/main/java/com/intuit/tank/harness/StopBehavior.java
index 04083ac14..3920adbe1 100644
--- a/api/src/main/java/com/intuit/tank/harness/StopBehavior.java
+++ b/api/src/main/java/com/intuit/tank/harness/StopBehavior.java
@@ -43,13 +43,12 @@ public String getDescription() {
}
public static StopBehavior fromString(String stopBehavior) {
- StopBehavior ret = StopBehavior.END_OF_SCRIPT_GROUP;
try {
- ret = valueOf(stopBehavior);
+ return valueOf(stopBehavior);
} catch (Exception e) {
// bad name return default
+ return StopBehavior.END_OF_SCRIPT_GROUP;
}
- return ret;
}
}
diff --git a/api/src/main/java/com/intuit/tank/storage/S3FileStorage.java b/api/src/main/java/com/intuit/tank/storage/S3FileStorage.java
index 2ec5290ab..72203bc2f 100644
--- a/api/src/main/java/com/intuit/tank/storage/S3FileStorage.java
+++ b/api/src/main/java/com/intuit/tank/storage/S3FileStorage.java
@@ -1,37 +1,41 @@
package com.intuit.tank.storage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
-import java.util.Map.Entry;
import java.util.zip.GZIPInputStream;
-import com.amazonaws.auth.AWSStaticCredentialsProvider;
-import com.amazonaws.services.s3.AmazonS3;
-import com.amazonaws.services.s3.AmazonS3ClientBuilder;
-import com.amazonaws.util.IOUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.utils.URIBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import com.amazonaws.ClientConfiguration;
-import com.amazonaws.auth.BasicAWSCredentials;
-import com.amazonaws.services.s3.model.AccessControlList;
-import com.amazonaws.services.s3.model.AmazonS3Exception;
-import com.amazonaws.services.s3.model.Bucket;
-import com.amazonaws.services.s3.model.ListObjectsRequest;
-import com.amazonaws.services.s3.model.ObjectListing;
-import com.amazonaws.services.s3.model.ObjectMetadata;
-import com.amazonaws.services.s3.model.S3Object;
-import com.amazonaws.services.s3.model.S3ObjectInputStream;
-import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.intuit.tank.vm.settings.CloudCredentials;
import com.intuit.tank.vm.settings.CloudProvider;
import com.intuit.tank.vm.settings.TankConfig;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
+import software.amazon.awssdk.auth.credentials.AwsCredentials;
+import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
+import software.amazon.awssdk.core.sync.RequestBody;
+import software.amazon.awssdk.http.apache.ApacheHttpClient;
+import software.amazon.awssdk.http.apache.ProxyConfiguration;
+import software.amazon.awssdk.services.s3.S3Client;
+import software.amazon.awssdk.services.s3.S3ClientBuilder;
+import software.amazon.awssdk.services.s3.model.BucketAlreadyExistsException;
+import software.amazon.awssdk.services.s3.model.CreateBucketRequest;
+import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
+import software.amazon.awssdk.services.s3.model.GetObjectRequest;
+import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
+import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
+import software.amazon.awssdk.services.s3.model.NoSuchKeyException;
+import software.amazon.awssdk.services.s3.model.PutObjectRequest;
+import software.amazon.awssdk.services.s3.model.S3Exception;
+import software.amazon.awssdk.services.s3.model.S3Object;
+import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
/**
* FileStorage that writes to the file system.
@@ -49,7 +53,7 @@ public class S3FileStorage implements FileStorage, Serializable {
private boolean compress = true;
private boolean encrypt = true;
- private AmazonS3 s3Client;
+ private S3Client s3Client;
/**
* @param bucketName
@@ -61,32 +65,28 @@ public S3FileStorage(String bucketName, boolean compress) {
this.compress = compress;
try {
TankConfig tankConfig = new TankConfig();
- encrypt = tankConfig.isS3EncryptionEnabled();
+ this.encrypt = tankConfig.isS3EncryptionEnabled();
CloudCredentials creds = tankConfig.getVmManagerConfig().getCloudCredentials(CloudProvider.amazon);
- ClientConfiguration config = new ClientConfiguration();
- if (StringUtils.isNotBlank(System.getProperty("http.proxyHost"))) {
+ S3ClientBuilder s3ClientBuilder = S3Client.builder();
+ if (creds != null && StringUtils.isNotBlank(System.getProperty("http.proxyHost"))) {
try {
- config.setProxyHost(System.getProperty("http.proxyHost"));
+ URIBuilder uriBuilder = new URIBuilder().setHost(System.getProperty("http.proxyHost"));
if (StringUtils.isNotBlank(System.getProperty("http.proxyPort"))) {
- config.setProxyPort(Integer.parseInt(System.getProperty("http.proxyPort")));
+ uriBuilder.setPort(Integer.parseInt(System.getProperty("http.proxyPort")));
}
+ ApacheHttpClient.Builder httpClientBuilder = ApacheHttpClient.builder()
+ .proxyConfiguration(
+ ProxyConfiguration.builder().endpoint(uriBuilder.build()).build());
+ s3ClientBuilder.httpClientBuilder(httpClientBuilder);
} catch (NumberFormatException e) {
LOG.error("invalid proxy setup.");
}
-
}
- assert creds != null;
- if (StringUtils.isNotBlank(creds.getKeyId()) && StringUtils.isNotBlank(creds.getKey())) {
- BasicAWSCredentials credentials = new BasicAWSCredentials(creds.getKeyId(), creds.getKey());
- this.s3Client = AmazonS3ClientBuilder.standard()
- .withCredentials(new AWSStaticCredentialsProvider(credentials))
- .withClientConfiguration(config)
- .build();
- } else {
- this.s3Client = AmazonS3ClientBuilder.standard()
- .withClientConfiguration(config)
- .build();
+ if (creds != null && StringUtils.isNotBlank(creds.getKeyId()) && StringUtils.isNotBlank(creds.getKey())) {
+ AwsCredentials credentials = AwsBasicCredentials.create(creds.getKeyId(), creds.getKey());
+ s3ClientBuilder.credentialsProvider(StaticCredentialsProvider.create(credentials));
}
+ s3Client = s3ClientBuilder.build();
createBucket(bucketName);
} catch (Exception ex) {
LOG.error(ex.getMessage(), ex);
@@ -107,74 +107,63 @@ private void parseBucketName(String name) {
@Override
public void storeFileData(FileData fileData, InputStream in) {
- String path = FilenameUtils.separatorsToUnix(FilenameUtils.normalize(extraPath + fileData.getPath() + "/" + fileData.getFileName()));
- path = StringUtils.stripStart(path, "/");
+ String key = FilenameUtils.separatorsToUnix(
+ FilenameUtils.normalize(extraPath + fileData.getPath() + "/" + fileData.getFileName()));
+ key = StringUtils.stripStart(key, "/");
try {
- ObjectMetadata metaData = new ObjectMetadata();
+ PutObjectRequest.Builder request = PutObjectRequest.builder().bucket(bucketName).key(key);
if (encrypt) {
- metaData.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
+ request.serverSideEncryption(ServerSideEncryption.AES256);
}
if (fileData.getAttributes() != null) {
- for (Entry entry : fileData.getAttributes().entrySet()) {
- metaData.addUserMetadata(entry.getKey(), entry.getValue());
- }
+ request.metadata(fileData.getAttributes());
}
if (compress) {
in = new GZIPInputStream(in);
}
- s3Client.putObject(bucketName, path, in, metaData);
+ s3Client.putObject(request.build(), RequestBody.fromInputStream(in, in.available()));
} catch (Exception e) {
LOG.error("Error storing file: " + e, e);
throw new RuntimeException(e);
} finally {
- IOUtils.closeQuietly(in, null);
+ IOUtils.closeQuietly(in);
}
}
@Override
public InputStream readFileData(FileData fileData) {
- String path = FilenameUtils.separatorsToUnix(FilenameUtils.normalize(extraPath + fileData.getPath() + "/" + fileData.getFileName()));
- path = StringUtils.stripStart(path, "/");
- InputStream ret = null;
- try {
- S3Object object = s3Client.getObject(bucketName, path);
- if (object != null) {
- ret = object.getObjectContent();
- if (compress) {
- ret = new GZIPInputStream(ret);
- }
- }
- } catch (Exception e) {
- LOG.error("Error getting File: " + e, e);
- throw new RuntimeException(e);
- }
- return ret;
+ String key = FilenameUtils.separatorsToUnix(
+ FilenameUtils.normalize(extraPath + fileData.getPath() + "/" + fileData.getFileName()));
+ key = StringUtils.stripStart(key, "/");
+ return s3Client.getObject(GetObjectRequest.builder().bucket(bucketName).key(key).build());
}
private void createBucket(String bucketName) {
- AccessControlList configuration = null;
try {
- configuration = s3Client.getBucketAcl(bucketName);
- } catch (Exception e) {
- LOG.info("Bucket " + bucketName + " does not exist.");
- }
- if (configuration == null) {
- Bucket bucket = s3Client.createBucket(bucketName);
- LOG.info("Created bucket " + bucket.getName() + " at " + bucket.getCreationDate());
+ s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());
+ LOG.info("Created bucket " + bucketName + " at " + "now");
+ } catch (BucketAlreadyExistsException baee) {//Good
+ } catch (S3Exception e) {
+ LOG.error("Error creating bucket: " + e, e);
}
}
@Override
public boolean exists(FileData fileData) {
boolean ret = true;
- String path = FilenameUtils.separatorsToUnix(FilenameUtils.normalize(extraPath + fileData.getPath() + "/" + fileData.getFileName()));
- path = StringUtils.stripStart(path, "/");
+ String key = FilenameUtils.separatorsToUnix(
+ FilenameUtils.normalize(extraPath + fileData.getPath() + "/" + fileData.getFileName()));
+ key = StringUtils.stripStart(key, "/");
try {
- s3Client.getObjectMetadata(bucketName, path);
- } catch (AmazonS3Exception e) {
- ret = false;
+ s3Client.headObject(HeadObjectRequest.builder().bucket(bucketName).key(key).build());
+ } catch (NoSuchKeyException e) {
+ return false;
+ } catch (S3Exception e) {
+ LOG.error("Error Checking existence of S3 object: " + e, e);
+ return false;
+
}
- return ret;
+ return true;
}
@Override
@@ -186,20 +175,14 @@ public List listFileData(String path) {
prefix = prefix + "/";
}
prefix = StringUtils.removeStart(prefix, "/");
- ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(bucketName).withPrefix(prefix);
- listObjectsRequest.setDelimiter("/");
- ObjectListing objectListing;
- do {
- objectListing = s3Client.listObjects(listObjectsRequest);
- for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
- String fileName = FilenameUtils.getName(FilenameUtils.normalize(objectSummary.getKey()));
- if (StringUtils.isNotBlank(fileName)) {
- ret.add(new FileData(path, fileName));
- }
+ ListObjectsResponse response = s3Client.listObjects(ListObjectsRequest.builder().bucket(bucketName).prefix(prefix).delimiter("/").build());
+ for (S3Object object : response.contents()) {
+ String fileName = FilenameUtils.getName(FilenameUtils.normalize(object.key()));
+ if (StringUtils.isNotBlank(fileName)) {
+ ret.add(new FileData(path, fileName));
}
- listObjectsRequest.setMarker(objectListing.getNextMarker());
- } while (objectListing.isTruncated());
- } catch (AmazonS3Exception e) {
+ }
+ } catch (S3Exception e) {
LOG.error("Error Listing Files: " + e, e);
throw new RuntimeException(e);
}
@@ -208,11 +191,11 @@ public List listFileData(String path) {
@Override
public boolean delete(FileData fileData) {
- String path = FilenameUtils.separatorsToUnix(FilenameUtils.normalize(fileData.getPath() + "/" + fileData.getFileName()));
- path = StringUtils.stripStart(path, "/");
+ String key = FilenameUtils.separatorsToUnix(FilenameUtils.normalize(fileData.getPath() + "/" + fileData.getFileName()));
+ key = StringUtils.stripStart(key, "/");
try {
- s3Client.deleteObject(bucketName, path);
- } catch (AmazonS3Exception e) {
+ s3Client.deleteObject(DeleteObjectRequest.builder().bucket(bucketName).key(key).build());
+ } catch (S3Exception e) {
return false;
}
return true;
diff --git a/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java b/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java
index 40dac7da3..007b3fd5c 100644
--- a/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java
+++ b/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java
@@ -64,7 +64,7 @@ public String getName() {
* @return
*/
public static VMRegion getRegionFromZone(String zone) {
- return Arrays.stream(VMRegion.values()).filter(vmr -> zone.toLowerCase().startsWith(vmr.region.toLowerCase())).findFirst().orElse(VMRegion.US_EAST);
+ return Arrays.stream(VMRegion.values()).filter(vmr -> zone.toLowerCase().startsWith(vmr.region.toLowerCase())).findFirst().orElse(VMRegion.STANDALONE);
}
/**
diff --git a/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMSize.java b/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMSize.java
deleted file mode 100644
index f3b3a5b9e..000000000
--- a/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMSize.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.intuit.tank.vm.api.enumerated;
-
-/*
- * #%L
- * Intuit Tank Api
- * %%
- * Copyright (C) 2011 - 2015 Intuit Inc.
- * %%
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * #L%
- */
-
-/*
- * Large : 4 ECUs, 2 Cores, 7.5 GB
- * ExtraLarge : 8 ECUs, 4 Cores, 15 GB
- * HighMemoryExtraLarge : 6.5 ECUs, 2 Cores, 17.1 GB
- * HighMemoryDoubleExtraLarge : 13 ECUs, 4 Cores, 34.2 GB
- * HighMemoryQuadrupleExtraLarge : 26 ECUs, 8 Cores, 68.4 GB
- * HighCPUExtraLarge : 20 ECUs, 8 Cores, 7 GB
- */
-
-import java.util.Arrays;
-
-public enum VMSize {
- Micro("t1.micro"), // $0.020 / hour
- Small("m1.small"), // $0.080 / hour
- Medium("m1.medium"), // $0.160 / hour
- Large("m1.large"), // $0.32 / hour
- ExtraLarge("m1.xlarge"), // $0.640 / hour
- HighMemoryExtraLarge("m2.xlarge"), // $0.450 / hour
- HighMemoryDoubleExtraLarge("m2.2xlarge"), // $0.900 / hour
- HighMemoryQuadrupleExtraLarge("m2.4xlarge"), // $1.800 / hour
- HighCPUMedium("c1.medium"), // $0.165 / hour
- HighCPUExtraLarge("c1.xlarge"), // $0.660 / hour
- HighIOExtraLarge("hi1.4xlarge")// $3.100 / hour
- ;
-
- private String representation;
-
- /**
- * @param representation
- */
- private VMSize(String representation) {
- this.representation = representation;
- }
-
- /**
- * @return the representation
- */
- public String getRepresentation() {
- return representation;
- }
-
- public static VMSize fromRepresentation(String representation) {
- return Arrays.stream(VMSize.values()).filter(s -> s.representation.equalsIgnoreCase(representation)).findFirst().orElse(null);
- }
-}
diff --git a/api/src/main/java/com/intuit/tank/vm/common/PasswordEncoder.java b/api/src/main/java/com/intuit/tank/vm/common/PasswordEncoder.java
index 7df07113f..14011316d 100644
--- a/api/src/main/java/com/intuit/tank/vm/common/PasswordEncoder.java
+++ b/api/src/main/java/com/intuit/tank/vm/common/PasswordEncoder.java
@@ -16,7 +16,7 @@
* #L%
*/
-import org.apache.commons.codec.binary.Base64;
+import org.apache.tomcat.util.codec.binary.Base64;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
diff --git a/api/src/main/java/com/intuit/tank/vm/settings/CloudCredentials.java b/api/src/main/java/com/intuit/tank/vm/settings/CloudCredentials.java
index dcdab0c60..0ad3ee735 100644
--- a/api/src/main/java/com/intuit/tank/vm/settings/CloudCredentials.java
+++ b/api/src/main/java/com/intuit/tank/vm/settings/CloudCredentials.java
@@ -50,21 +50,16 @@ public CloudProvider getType() {
* @return the keyId
*/
public String getKeyId() {
- // first try userData
- String ret = AmazonUtil.getAWSKeyIdFromUserData();
+ // try to get from property
+ String key = config.getString("secret-key-id-property", "AWS_SECRET_KEY_ID");
+ String ret = System.getProperty(key);
if (StringUtils.isBlank(ret)) {
- // try to get from property
- String key = config.getString("secret-key-id-property", "AWS_SECRET_KEY_ID");
- ret = System.getProperty(key);
- if (StringUtils.isBlank(ret)) {
- ret = System.getenv(key);
- }
- if (StringUtils.isBlank(ret)) {
- // finally get straight from config
- ret = config.getString("secret-key-id");
- }
+ ret = System.getenv(key);
+ }
+ if (StringUtils.isBlank(ret)) {
+ // finally get straight from config
+ ret = config.getString("secret-key-id");
}
-
return ret;
}
@@ -72,19 +67,15 @@ public String getKeyId() {
* @return the key
*/
public String getKey() {
- // first try userData
- String ret = AmazonUtil.getAWSKeyFromUserData();
+ // try to get from property
+ String key = config.getString("secret-key-property", "AWS_SECRET_KEY");
+ String ret = System.getProperty(key);
+ if (StringUtils.isBlank(ret)) {
+ ret = System.getenv(key);
+ }
if (StringUtils.isBlank(ret)) {
- // try to get from property
- String key = config.getString("secret-key-property", "AWS_SECRET_KEY");
- ret = System.getProperty(key);
- if (StringUtils.isBlank(ret)) {
- ret = System.getenv(key);
- }
- if (StringUtils.isBlank(ret)) {
- // finally get straight from config
- ret = config.getString("secret-key");
- }
+ // finally get straight from config
+ ret = config.getString("secret-key");
}
return ret;
}
diff --git a/api/src/main/resources/settings.xml b/api/src/main/resources/settings.xml
index 33baad811..87adc28c1 100644
--- a/api/src/main/resources/settings.xml
+++ b/api/src/main/resources/settings.xml
@@ -3,23 +3,23 @@
- datafiles
+ or relative path or an s3 bucket by prefixing a bucket with s3: e.g. s3:tank-data-files
+ datafiles -->
- timing
+ timing -->
- jars
+ with s3: e.g. s3:tank-agent-supports
+ jars -->
- tmpfiles
+ file system.
+ tmpfiles -->
tank
@@ -36,7 +36,7 @@
- true
+ false
@@ -172,9 +172,6 @@
-
- AWS_SECRET_KEY_ID
- AWS_SECRET_KEY
@@ -188,8 +185,10 @@
-
+
+
+
[AMI-ID]
[KEYPAIR]
@@ -199,8 +198,9 @@
-
+
+ [SSM-AMI-ID]
[AMI-ID]
[KEYPAIR]
@@ -212,16 +212,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -242,13 +237,7 @@
-
- 50
- 10
-
- com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi
-
-
+ com.intuit.tank.persistence.databases.CloudWatchDataSource
diff --git a/api/src/test/java/com/intuit/tank/harness/AmazonUtilTest.java b/api/src/test/java/com/intuit/tank/harness/AmazonUtilTest.java
new file mode 100644
index 000000000..56217bd41
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/harness/AmazonUtilTest.java
@@ -0,0 +1,90 @@
+package com.intuit.tank.harness;
+
+import com.intuit.tank.logging.LoggingProfile;
+import com.intuit.tank.vm.api.enumerated.VMRegion;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import javax.inject.Inject;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * Purpose: Test AmazonUtil class utility methods
+ * @author : atayal
+ **/
+public class AmazonUtilTest {
+
+ @Inject
+ private AmazonUtil amazonUtil;
+
+ @Test
+ void testGetVMRegion() {
+ VMRegion vmRegion = AmazonUtil.getVMRegion();
+ Assertions.assertNotNull(vmRegion);
+ assertEquals("Standalone Agent", vmRegion.getDescription());
+ assertEquals("standalone-agent", vmRegion.getRegion());
+ }
+
+ @Test
+ void testIsInAmazon() {
+ boolean inAmazon = AmazonUtil.isInAmazon();
+ assertFalse(inAmazon);
+ }
+
+ @Test
+ void testGetZone() {
+ String zone = AmazonUtil.getZone();
+ Assertions.assertNotNull(zone);
+ assertEquals("unknown", zone);
+ }
+
+ @Test
+ void testGetInstanceId() {
+ String instanceId = AmazonUtil.getInstanceId();
+ Assertions.assertNotNull(instanceId);
+ assertEquals("", instanceId);
+ }
+
+ @Test
+ void testGetLoggingProfile() {
+ LoggingProfile loggingProfile = AmazonUtil.getLoggingProfile();
+ Assertions.assertNotNull(loggingProfile);
+ assertEquals("Standard", loggingProfile.getDisplayName());
+ assertEquals("Logs common fields.", loggingProfile.getDescription());
+ }
+
+ @Test
+ void testGetCapacity() {
+ int capacity = AmazonUtil.getCapacity();
+ assertEquals(4000, capacity);
+ }
+
+ @Test
+ void testGetStopBehavior() {
+ StopBehavior stopBehavior = AmazonUtil.getStopBehavior();
+ Assertions.assertNotNull(stopBehavior);
+ assertEquals("Script Group", stopBehavior.getDisplay());
+ assertEquals("Stop after current script group completes.", stopBehavior.getDescription());
+ }
+
+ @Test
+ void testUsingEip() {
+ boolean usingEip = AmazonUtil.usingEip();
+ assertFalse(usingEip);
+ }
+
+ @Test
+ void testGetControllerBaseUrl() {
+ String url = AmazonUtil.getControllerBaseUrl();
+ Assertions.assertNotNull(url);
+ assertEquals("http://localhost:8080/", url);
+ }
+
+ @Test
+ void testGetUserDataAsMap() {
+ Object o = AmazonUtil.getUserDataAsMap();
+ Assertions.assertNotNull(o);
+ }
+
+}
diff --git a/api/src/test/java/com/intuit/tank/http/AuthSchemeTest.java b/api/src/test/java/com/intuit/tank/http/AuthSchemeTest.java
new file mode 100644
index 000000000..d1ed5f718
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/http/AuthSchemeTest.java
@@ -0,0 +1,22 @@
+package com.intuit.tank.http;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Purpose: Test AuthScheme
+ *
+ * @author : atayal
+ **/
+public class AuthSchemeTest {
+
+ @Test
+ void testGetScheme() {
+ AuthScheme scheme = AuthScheme.getScheme("BASIC");
+ Assertions.assertNotNull(scheme);
+ assert scheme == AuthScheme.Basic;
+ assertEquals("BASIC", scheme.getRepresentation());
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/logging/LogEventTypeTest.java b/api/src/test/java/com/intuit/tank/logging/LogEventTypeTest.java
new file mode 100644
index 000000000..bfa9fd85b
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/logging/LogEventTypeTest.java
@@ -0,0 +1,19 @@
+package com.intuit.tank.logging;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Purpose: Test LogEventType Enum
+ *
+ * @author : atayal
+ **/
+public class LogEventTypeTest {
+
+ @Test
+ void testLogEventTypeEnum() {
+ LogEventType type = LogEventType.valueOf("System");
+ Assertions.assertNotNull(type);
+ assert LogEventType.System == type;
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/logging/SourceTypeTest.java b/api/src/test/java/com/intuit/tank/logging/SourceTypeTest.java
new file mode 100644
index 000000000..8c05f2876
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/logging/SourceTypeTest.java
@@ -0,0 +1,18 @@
+package com.intuit.tank.logging;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Purpose: Test Enum SourceType
+ *
+ * @author : atayal
+ **/
+public class SourceTypeTest {
+ @Test
+ void testSourceTypeEnum() {
+ SourceType type = SourceType.valueOf("controller");
+ Assertions.assertNotNull(type);
+ assert SourceType.controller == type;
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/script/RequestDataTypeTest.java b/api/src/test/java/com/intuit/tank/script/RequestDataTypeTest.java
new file mode 100644
index 000000000..d0aa14fce
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/script/RequestDataTypeTest.java
@@ -0,0 +1,19 @@
+package com.intuit.tank.script;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Purpose: Test RequestDataType Enum
+ *
+ * @author : atayal
+ **/
+public class RequestDataTypeTest {
+
+ @Test
+ void testRequestDataTypeEnum() {
+ RequestDataType type = RequestDataType.valueOf("responseContent");
+ Assertions.assertNotNull(type);
+ assert RequestDataType.responseContent == type;
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/script/TimerActionTest.java b/api/src/test/java/com/intuit/tank/script/TimerActionTest.java
new file mode 100644
index 000000000..e4273074d
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/script/TimerActionTest.java
@@ -0,0 +1,19 @@
+package com.intuit.tank.script;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Purpose: Test RequestDataType Enum
+ *
+ * @author : atayal
+ **/
+public class TimerActionTest {
+
+ @Test
+ void testTimerActionEnum() {
+ TimerAction type = TimerAction.valueOf("START");
+ Assertions.assertNotNull(type);
+ assert TimerAction.START == type;
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java b/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java
index 984cd8e01..ee1b65b32 100644
--- a/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java
+++ b/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java
@@ -40,12 +40,12 @@ public void testAgentData_1()
assertNotNull(result);
assertEquals(0, result.getUsers());
- assertEquals(null, result.getZone());
- assertEquals(null, result.getInstanceId());
- assertEquals(null, result.getRegion());
- assertEquals(null, result.getInstanceUrl());
+ assertNull(result.getZone());
+ assertNull(result.getInstanceId());
+ assertNull(result.getRegion());
+ assertNull(result.getInstanceUrl());
assertEquals(0, result.getCapacity());
- assertEquals(null, result.getJobId());
+ assertNull(result.getJobId());
}
/**
@@ -92,7 +92,7 @@ public void testEquals_1()
boolean result = fixture.equals(obj);
- assertEquals(false, result);
+ assertFalse(result);
}
/**
@@ -111,7 +111,7 @@ public void testEquals_2()
boolean result = fixture.equals(obj);
- assertEquals(false, result);
+ assertFalse(result);
}
/**
@@ -130,7 +130,7 @@ public void testEquals_3()
boolean result = fixture.equals(obj);
- assertEquals(true, result);
+ assertTrue(result);
}
/**
@@ -149,7 +149,7 @@ public void testEquals_4()
boolean result = fixture.equals(obj);
- assertEquals(true, result);
+ assertTrue(result);
}
/**
diff --git a/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java b/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java
index f4792febd..8d3f5f79a 100644
--- a/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java
+++ b/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java
@@ -15,8 +15,6 @@
import org.junit.jupiter.api.*;
-import com.intuit.tank.vm.api.enumerated.VMRegion;
-
import static org.junit.jupiter.api.Assertions.*;
/**
@@ -75,10 +73,10 @@ public void testGetRegionFromZone_1()
VMRegion result = VMRegion.getRegionFromZone(zone);
assertNotNull(result);
- assertEquals("US East (Northern Virginia)", result.getDescription());
- assertEquals("US East (Northern Virginia)", result.toString());
- assertEquals("ec2.us-east-1.amazonaws.com", result.getEndpoint());
- assertEquals("US_EAST", result.name());
+ assertEquals("Standalone Agent", result.getDescription());
+ assertEquals("Standalone Agent", result.toString());
+ assertEquals("", result.getEndpoint());
+ assertEquals("STANDALONE", result.name());
}
/**
@@ -96,10 +94,10 @@ public void testGetRegionFromZone_2()
VMRegion result = VMRegion.getRegionFromZone(zone);
assertNotNull(result);
- assertEquals("US East (Northern Virginia)", result.getDescription());
- assertEquals("US East (Northern Virginia)", result.toString());
- assertEquals("ec2.us-east-1.amazonaws.com", result.getEndpoint());
- assertEquals("US_EAST", result.name());
+ assertEquals("Standalone Agent", result.getDescription());
+ assertEquals("Standalone Agent", result.toString());
+ assertEquals("", result.getEndpoint());
+ assertEquals("STANDALONE", result.name());
}
/**
@@ -117,10 +115,10 @@ public void testGetRegionFromZone_3()
VMRegion result = VMRegion.getRegionFromZone(zone);
assertNotNull(result);
- assertEquals("US East (Northern Virginia)", result.getDescription());
- assertEquals("US East (Northern Virginia)", result.toString());
- assertEquals("ec2.us-east-1.amazonaws.com", result.getEndpoint());
- assertEquals("US_EAST", result.name());
+ assertEquals("Standalone Agent", result.getDescription());
+ assertEquals("Standalone Agent", result.toString());
+ assertEquals("", result.getEndpoint());
+ assertEquals("STANDALONE", result.name());
}
/**
diff --git a/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMSizeCpTest.java b/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMSizeCpTest.java
deleted file mode 100644
index 8f16e70ce..000000000
--- a/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMSizeCpTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.intuit.tank.vm.api.enumerated;
-
-/*
- * #%L
- * Intuit Tank Api
- * %%
- * Copyright (C) 2011 - 2015 Intuit Inc.
- * %%
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * #L%
- */
-
-import org.junit.jupiter.api.*;
-
-import com.intuit.tank.vm.api.enumerated.VMSize;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-/**
- * The class VMSizeCpTest
contains tests for the class {@link VMSize}
.
- *
- * @generatedBy CodePro at 9/3/14 3:44 PM
- */
-public class VMSizeCpTest {
- /**
- * Run the VMSize fromRepresentation(String) method test.
- *
- * @throws Exception
- *
- * @generatedBy CodePro at 9/3/14 3:44 PM
- */
- @Test
- public void testFromRepresentation_1()
- throws Exception {
- String representation = "";
-
- VMSize result = VMSize.fromRepresentation(representation);
-
- assertEquals(null, result);
- }
-
- /**
- * Run the VMSize fromRepresentation(String) method test.
- *
- * @throws Exception
- *
- * @generatedBy CodePro at 9/3/14 3:44 PM
- */
- @Test
- public void testFromRepresentation_2()
- throws Exception {
- String representation = "";
-
- VMSize result = VMSize.fromRepresentation(representation);
-
- assertEquals(null, result);
- }
-
- /**
- * Run the VMSize fromRepresentation(String) method test.
- *
- * @throws Exception
- *
- * @generatedBy CodePro at 9/3/14 3:44 PM
- */
- @Test
- public void testFromRepresentation_3()
- throws Exception {
- String representation = "";
-
- VMSize result = VMSize.fromRepresentation(representation);
-
- assertEquals(null, result);
- }
-
- /**
- * Run the String getRepresentation() method test.
- *
- * @throws Exception
- *
- * @generatedBy CodePro at 9/3/14 3:44 PM
- */
- @Test
- public void testGetRepresentation_1()
- throws Exception {
- VMSize fixture = VMSize.ExtraLarge;
-
- String result = fixture.getRepresentation();
-
- assertEquals("m1.xlarge", result);
- }
-}
\ No newline at end of file
diff --git a/api/src/test/java/com/intuit/tank/vm/common/util/MethodTimerCpTest.java b/api/src/test/java/com/intuit/tank/vm/common/util/MethodTimerCpTest.java
index 3a1975fb5..1e2ed2606 100644
--- a/api/src/test/java/com/intuit/tank/vm/common/util/MethodTimerCpTest.java
+++ b/api/src/test/java/com/intuit/tank/vm/common/util/MethodTimerCpTest.java
@@ -18,6 +18,10 @@
import org.junit.jupiter.api.*;
import com.intuit.tank.vm.common.util.MethodTimer;
+import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
+
+import java.util.Arrays;
+import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@@ -35,6 +39,7 @@ public class MethodTimerCpTest {
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testMethodTimer_1()
throws Exception {
Logger log = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
@@ -56,6 +61,7 @@ public void testMethodTimer_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testMethodTimer_2()
throws Exception {
Logger log = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
@@ -77,6 +83,7 @@ public void testMethodTimer_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testEnd_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -97,6 +104,7 @@ public void testEnd_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testEndAndLog_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -117,6 +125,7 @@ public void testEndAndLog_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testGetMarkTimeMessage_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -136,6 +145,7 @@ public void testGetMarkTimeMessage_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testGetMarkTimeMessage_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -155,6 +165,7 @@ public void testGetMarkTimeMessage_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testGetNaturalTimeMessage_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -173,6 +184,7 @@ public void testGetNaturalTimeMessage_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testGetNaturalTimeMessage_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -191,6 +203,7 @@ public void testGetNaturalTimeMessage_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testGetTimeMessage_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -209,6 +222,7 @@ public void testGetTimeMessage_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testGetTimeMessage_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -227,6 +241,7 @@ public void testGetTimeMessage_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testLogMark_1()
throws Exception {
MethodTimer fixture = new MethodTimer((Logger) null, Object.class, "");
@@ -248,6 +263,7 @@ public void testLogMark_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testLogMark_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -269,6 +285,7 @@ public void testLogMark_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testLogTime_1()
throws Exception {
MethodTimer fixture = new MethodTimer((Logger) null, Object.class, "");
@@ -289,6 +306,7 @@ public void testLogTime_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testLogTime_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -309,6 +327,7 @@ public void testLogTime_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testMark_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -329,6 +348,7 @@ public void testMark_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testMark_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -349,6 +369,7 @@ public void testMark_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testMarkAndLog_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -369,6 +390,7 @@ public void testMarkAndLog_1()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testMarkAndLog_2()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
@@ -390,6 +412,7 @@ public void testMarkAndLog_2()
* @generatedBy CodePro at 9/3/14 3:41 PM
*/
@Test
+ @DisabledIfEnvironmentVariable(named = "SKIP_METHODTIMER_TEST", matches = "true")
public void testStart_1()
throws Exception {
MethodTimer fixture = new MethodTimer(LogManager.getLogger(LogManager.ROOT_LOGGER_NAME), Object.class, "");
diff --git a/api/src/test/java/com/intuit/tank/vm/common/util/ReportUtilCpTest.java b/api/src/test/java/com/intuit/tank/vm/common/util/ReportUtilCpTest.java
index ff26139eb..7e2f13a51 100644
--- a/api/src/test/java/com/intuit/tank/vm/common/util/ReportUtilCpTest.java
+++ b/api/src/test/java/com/intuit/tank/vm/common/util/ReportUtilCpTest.java
@@ -77,25 +77,25 @@ public void testGetSummaryData_1()
assertEquals(23, result.length);
assertEquals("", result[0]);
assertEquals("0", result[1]);
- assertEquals("�", result[2]);
- assertEquals("�", result[3]);
- assertEquals("�", result[4]);
- assertEquals("�", result[5]);
- assertEquals("�", result[6]);
- assertEquals("�", result[7]);
- assertEquals("�", result[8]);
- assertEquals("�", result[9]);
- assertEquals("�", result[10]);
- assertEquals("�", result[11]);
- assertEquals("�", result[12]);
- assertEquals("�", result[13]);
- assertEquals("�", result[14]);
- assertEquals("�", result[15]);
- assertEquals("�", result[16]);
- assertEquals("�", result[17]);
- assertEquals("�", result[18]);
- assertEquals("�", result[19]);
- assertEquals("�", result[20]);
+ assertEquals("NaN", result[2]);
+ assertEquals("NaN", result[3]);
+ assertEquals("NaN", result[4]);
+ assertEquals("NaN", result[5]);
+ assertEquals("NaN", result[6]);
+ assertEquals("NaN", result[7]);
+ assertEquals("NaN", result[8]);
+ assertEquals("NaN", result[9]);
+ assertEquals("NaN", result[10]);
+ assertEquals("NaN", result[11]);
+ assertEquals("NaN", result[12]);
+ assertEquals("NaN", result[13]);
+ assertEquals("NaN", result[14]);
+ assertEquals("NaN", result[15]);
+ assertEquals("NaN", result[16]);
+ assertEquals("NaN", result[17]);
+ assertEquals("NaN", result[18]);
+ assertEquals("NaN", result[19]);
+ assertEquals("NaN", result[20]);
assertEquals(null, result[21]);
assertEquals(null, result[22]);
}
@@ -119,25 +119,25 @@ public void testGetSummaryData_2()
assertEquals(23, result.length);
assertEquals("", result[0]);
assertEquals("0", result[1]);
- assertEquals("�", result[2]);
- assertEquals("�", result[3]);
- assertEquals("�", result[4]);
- assertEquals("�", result[5]);
- assertEquals("�", result[6]);
- assertEquals("�", result[7]);
- assertEquals("�", result[8]);
- assertEquals("�", result[9]);
- assertEquals("�", result[10]);
- assertEquals("�", result[11]);
- assertEquals("�", result[12]);
- assertEquals("�", result[13]);
- assertEquals("�", result[14]);
- assertEquals("�", result[15]);
- assertEquals("�", result[16]);
- assertEquals("�", result[17]);
- assertEquals("�", result[18]);
- assertEquals("�", result[19]);
- assertEquals("�", result[20]);
+ assertEquals("NaN", result[2]);
+ assertEquals("NaN", result[3]);
+ assertEquals("NaN", result[4]);
+ assertEquals("NaN", result[5]);
+ assertEquals("NaN", result[6]);
+ assertEquals("NaN", result[7]);
+ assertEquals("NaN", result[8]);
+ assertEquals("NaN", result[9]);
+ assertEquals("NaN", result[10]);
+ assertEquals("NaN", result[11]);
+ assertEquals("NaN", result[12]);
+ assertEquals("NaN", result[13]);
+ assertEquals("NaN", result[14]);
+ assertEquals("NaN", result[15]);
+ assertEquals("NaN", result[16]);
+ assertEquals("NaN", result[17]);
+ assertEquals("NaN", result[18]);
+ assertEquals("NaN", result[19]);
+ assertEquals("NaN", result[20]);
assertEquals(null, result[21]);
assertEquals(null, result[22]);
}
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/CloudCredentialsCpTest.java b/api/src/test/java/com/intuit/tank/vm/settings/CloudCredentialsCpTest.java
index 9b293fa18..5e634a873 100644
--- a/api/src/test/java/com/intuit/tank/vm/settings/CloudCredentialsCpTest.java
+++ b/api/src/test/java/com/intuit/tank/vm/settings/CloudCredentialsCpTest.java
@@ -16,9 +16,6 @@
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.junit.jupiter.api.*;
-import com.intuit.tank.vm.settings.CloudCredentials;
-import com.intuit.tank.vm.settings.CloudProvider;
-
import static org.junit.jupiter.api.Assertions.*;
/**
@@ -42,10 +39,10 @@ public void testCloudCredentials_1()
CloudCredentials result = new CloudCredentials(config);
assertNotNull(result);
- assertEquals(null, result.getKey());
- assertEquals(null, result.getProxyHost());
- assertEquals(null, result.getProxyPort());
- assertEquals(null, result.getKeyId());
+ assertNull(result.getKey());
+ assertNull(result.getProxyHost());
+ assertNull(result.getProxyPort());
+ assertNull(result.getKeyId());
}
/**
@@ -62,7 +59,7 @@ public void testGetKey_1()
String result = fixture.getKey();
- assertEquals(null, result);
+ assertNull(result);
}
/**
@@ -79,7 +76,7 @@ public void testGetKeyId_1()
String result = fixture.getKeyId();
- assertEquals(null, result);
+ assertNull(result);
}
/**
@@ -96,7 +93,7 @@ public void testGetProxyHost_1()
String result = fixture.getProxyHost();
- assertEquals(null, result);
+ assertNull(result);
}
/**
@@ -113,7 +110,7 @@ public void testGetProxyPort_1()
String result = fixture.getProxyPort();
- assertEquals(null, result);
+ assertNull(result);
}
/**
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/InstanceDescriptionDefaultsCpTest.java b/api/src/test/java/com/intuit/tank/vm/settings/InstanceDescriptionDefaultsCpTest.java
index cf41b9965..8013450a6 100644
--- a/api/src/test/java/com/intuit/tank/vm/settings/InstanceDescriptionDefaultsCpTest.java
+++ b/api/src/test/java/com/intuit/tank/vm/settings/InstanceDescriptionDefaultsCpTest.java
@@ -18,11 +18,6 @@
import static org.junit.jupiter.api.Assertions.*;
-import java.util.List;
-
-import com.intuit.tank.vm.api.enumerated.VMSize;
-import com.intuit.tank.vm.settings.InstanceDescriptionDefaults;
-
/**
* The class InstanceDescriptionDefaultsCpTest
contains tests for the class
* {@link InstanceDescriptionDefaults}
.
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/InstanceTagTest.java b/api/src/test/java/com/intuit/tank/vm/settings/InstanceTagTest.java
new file mode 100644
index 000000000..e013c7198
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/vm/settings/InstanceTagTest.java
@@ -0,0 +1,30 @@
+package com.intuit.tank.vm.settings;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Purpose: test InstanceTag class
+ *
+ * @author : atayal
+ **/
+public class InstanceTagTest {
+ @Test
+ void testInstanceTag() {
+ InstanceTag tag = new InstanceTag("tag1", "val1");
+ InstanceTag tag2 = new InstanceTag("tag2", "val2");
+ Assertions.assertEquals("tag1", tag.getName());
+ Assertions.assertEquals("val1", tag.getValue());
+ Map tags = new LinkedHashMap<>();
+ tags.put(tag, 1);
+ tags.put(tag2, 2);
+ assert tag != tag2;
+ Assertions.assertNotEquals(tag, tag2);
+ Assertions.assertNotEquals(tag, "");
+ Assertions.assertEquals("tag1 = val1", tag.toString());
+
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/ModificationTypeTest.java b/api/src/test/java/com/intuit/tank/vm/settings/ModificationTypeTest.java
new file mode 100644
index 000000000..ba94399b9
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/vm/settings/ModificationTypeTest.java
@@ -0,0 +1,19 @@
+package com.intuit.tank.vm.settings;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Purpose: Test ModificationType Enum
+ *
+ * @author : atayal
+ **/
+public class ModificationTypeTest {
+
+ @Test
+ void testModificationTypeEnum() {
+ ModificationType type = ModificationType.valueOf("ADD");
+ Assertions.assertNotNull(type);
+ assert ModificationType.ADD == type;
+ }
+}
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/ModifiedEntityMessageTest.java b/api/src/test/java/com/intuit/tank/vm/settings/ModifiedEntityMessageTest.java
new file mode 100644
index 000000000..23ce72b71
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/vm/settings/ModifiedEntityMessageTest.java
@@ -0,0 +1,9 @@
+package com.intuit.tank.vm.settings;
+
+/**
+ * Purpose:
+ *
+ * @author : atayal
+ **/
+public class ModifiedEntityMessageTest {
+}
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/PropertiesFileTest.java b/api/src/test/java/com/intuit/tank/vm/settings/PropertiesFileTest.java
new file mode 100644
index 000000000..33a345090
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/vm/settings/PropertiesFileTest.java
@@ -0,0 +1,9 @@
+package com.intuit.tank.vm.settings;
+
+/**
+ * Purpose:
+ *
+ * @author : atayal
+ **/
+public class PropertiesFileTest {
+}
diff --git a/api/src/test/java/com/intuit/tank/vm/settings/ReportingConfigTest.java b/api/src/test/java/com/intuit/tank/vm/settings/ReportingConfigTest.java
new file mode 100644
index 000000000..d7169c3fb
--- /dev/null
+++ b/api/src/test/java/com/intuit/tank/vm/settings/ReportingConfigTest.java
@@ -0,0 +1,9 @@
+package com.intuit.tank.vm.settings;
+
+/**
+ * Purpose:
+ *
+ * @author : atayal
+ **/
+public class ReportingConfigTest {
+}
diff --git a/api/src/test/resources/sampleProp.properties b/api/src/test/resources/sampleProp.properties
new file mode 100644
index 000000000..86fbde046
--- /dev/null
+++ b/api/src/test/resources/sampleProp.properties
@@ -0,0 +1,2 @@
+a=1
+b=2
\ No newline at end of file
diff --git a/api/src/test/resources/settings.xml b/api/src/test/resources/settings.xml
index 33baad811..fdcba513c 100644
--- a/api/src/test/resources/settings.xml
+++ b/api/src/test/resources/settings.xml
@@ -3,23 +3,23 @@
- datafiles
+ or relative path or an s3 bucket by prefixing a bucket with s3: e.g. s3:tank-data-files
+ datafiles -->
-
- timing
+ timing -->
-
- jars
+
-
- tmpfiles
+
tank
@@ -27,16 +27,16 @@
http://localhost:8080/tank
-
false
false
-
- true
+ false
@@ -67,9 +67,9 @@
-
-
@@ -98,11 +98,11 @@
30000
-
5000
-
180000
@@ -157,7 +157,7 @@
-
security_group
@@ -172,24 +172,23 @@
-
- AWS_SECRET_KEY_ID
- AWS_SECRET_KEY
-
tank_admin
-
+
+
+
[AMI-ID]
[KEYPAIR]
@@ -199,8 +198,9 @@
-
+
+ [SSM-AMI-ID]
[AMI-ID]
[KEYPAIR]
@@ -212,25 +212,20 @@
-
-
-
-
-
+
+
+
+
+
-
5m
-
10m
@@ -239,16 +234,10 @@
30s
-
-
- 50
- 10
-
- com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi
-
-
+ com.intuit.tank.persistence.databases.CloudWatchDataSource
diff --git a/assets/cleanup_prior_to_3.0.0.sql b/assets/cleanup_prior_to_3.0.0.sql
new file mode 100644
index 000000000..6c1b5825b
--- /dev/null
+++ b/assets/cleanup_prior_to_3.0.0.sql
@@ -0,0 +1,37 @@
+/*
+Script to help cleanup the abandoned rows in the searlized_script_step table
+Recommed running one line at a time, and validating the output
+*/
+
+SELECT count(*) FROM tank.serialized_script_step;
+SELECT count(*) FROM tank.script;
+SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
+WHERE TABLE_SCHEMA = 'tank' AND TABLE_NAME = 'serialized_script_step';
+
+CREATE TABLE IF NOT EXISTS tank.serialized_script_step_temp
+(
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `created` datetime NOT NULL,
+ `modified` datetime NOT NULL,
+ `serialized_data` longblob NOT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8
+SELECT steps.*
+FROM tank.serialized_script_step AS steps
+JOIN tank.script AS script
+ON script.serial_step_id=steps.id;
+
+SELECT count(*) FROM tank.serialized_script_step_temp;
+
+ALTER TABLE tank.script DROP FOREIGN KEY FKC9E5D0CBD63BDD22;
+
+RENAME TABLE tank.serialized_script_step TO tank.serialized_script_step_old;
+RENAME TABLE tank.serialized_script_step_temp TO tank.serialized_script_step;
+
+ALTER TABLE tank.script ADD CONSTRAINT `FKC9E5D0CBD63BDD22` FOREIGN KEY (`serial_step_id`) REFERENCES `serialized_script_step` (`id`);
+
+
+/*
+Validate scripts in Tank before performing the DROP
+*/
+DROP TABLE tank.serialized_script_step_old;
diff --git a/assets/settings-all-in-one.xml b/assets/settings-all-in-one.xml
new file mode 100644
index 000000000..15d8bd18f
--- /dev/null
+++ b/assets/settings-all-in-one.xml
@@ -0,0 +1,490 @@
+
+
+
+
+datafiles
+
+timing
+
+tmpfiles
+
+jars
+
+tank-demo-all-in-one
+
+http://localhost:8080
+
+true
+
+false
+
+
+ All Products
+ My Product
+
+
+
+
+
+
+
+
+ localhost
+ 25
+ do_not_reply@mydomain.com
+
+
+
+
+
+
+ com.intuit.tank.reporting.rest.RestResultsReporter
+ com.intuit.tank.reporting.rest.RestResultsReader
+
+
+
+
+
+
+
+
+
+
+
+ /tmp
+
+
+ 8090
+
+
+ 5000
+
+
+ 360000
+
+
+ 15000
+
+ 30000
+
+
+ 5000
+
+
+ 180000
+
+
+ 7200000
+
+
+ false
+
+
+ false
+
+
+ false
+
+
+ 30
+
+
+
+ .*text.*
+ .*json.*
+ .*xml.*
+
+
+
+
+
+
+
+
+
+
+ US_EAST
+
+
+ false
+
+
+
+
+
+
+
+ security_group
+ myKey
+ false
+
+
+
+
+
+ AWS_SECRET_KEY_ID
+ AWS_SECRET_KEY
+
+
+
+
+
+
+
+
+
+ [AMI-ID]
+ [KEYPAIR]
+
+
+
+
+
+ [AMI-ID]
+ [KEYPAIR]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 5m
+
+ 10m
+
+ 2
+
+ 30s
+
+
+
+ com.intuit.tank.persistence.databases.CloudWatchDataSource
+
+
+
+
+
+
+ admin
+ user
+ script-manager
+ project-manager
+ job-manager
+ guest
+
+
+
+
+
+
+ user
+ project-manager
+
+
+
+
+ project-manager
+
+
+
+
+ project-manager
+
+
+
+
+
+ user
+ script-manager
+
+
+
+
+ script-manager
+
+
+
+
+ script-manager
+
+
+
+
+
+ user
+ script-manager
+
+
+
+
+ script-manager
+
+
+
+
+ script-manager
+
+
+
+
+
+ user
+ script-manager
+ project-manager
+
+
+
+
+ script-manager
+ project-manager
+
+
+
+
+
+ job-manager
+ project-manager
+
+
+
+
+
+
+ admin
+ admin
+ admin@example.com
+ admin
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/tankIcon.png b/assets/tankIcon.png
new file mode 100644
index 000000000..10bd99890
Binary files /dev/null and b/assets/tankIcon.png differ
diff --git a/aws-config/tank_agent.yml b/aws-config/tank_agent.yml
new file mode 100644
index 000000000..6fa38953b
--- /dev/null
+++ b/aws-config/tank_agent.yml
@@ -0,0 +1,177 @@
+AWSTemplateFormatVersion: '2010-09-09'
+Description: 'Creates the base Tank Agent that can be snapshotted for use in tank.'
+Parameters:
+ AmiId:
+ Type: 'AWS::EC2::Image::Id'
+ Description: The ID of the latest Amazon Linux 2 baseline AMI
+ TankZip:
+ Type: 'String'
+ Default: 'TankZip.zip'
+ Description: File path to Tank agent-startup-pkg.zip Filename in S3 (ie. s3://bucket/keyname)
+ InstanceType:
+ Description: Amazon EC2 instance type
+ Type: 'String'
+ Default: 'c5.large'
+ KeyName:
+ Type: 'AWS::EC2::KeyPair::KeyName'
+ Description: Amazon EC2 Key Pair
+ SubnetIds:
+ Type: 'List'
+ Description: Subnet IDs
+ SecurityGroupIds:
+ Type: 'List'
+ Description: SecurityGroup IDs
+
+Resources:
+ AgentInstance:
+ Type: AWS::EC2::Instance
+ Metadata:
+ AWS::CloudFormation::Init:
+ configSets:
+ default:
+ - 'cloudwatch-install'
+ - 'agent-install'
+ cloudwatch-install:
+ packages: {}
+ sources: {}
+ files:
+ /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/tank-cloudwatch-config.json:
+ content: |
+ {"logs":{"force_flush_interval":5,"logs_collected":{
+ "files":{"collect_list":[{"file_path":"/opt/tank_agent/logs/agent.log","log_group_name":"/opt/tank_agent/logs/agent.log","log_stream_name":"{instance_id}"}]}}},
+ "metrics":{"append_dimensions":{"InstanceId":"${aws:InstanceId}"},"metrics_collected":{
+ "netstat":{"measurement":["tcp_established","tcp_syn_sent","tcp_close"],"append_dimensions":{"Service":"TankAgent"},"metrics_collection_interval":60},
+ "disk":{"measurement":["used_percent"],"resources":["/"],"append_dimensions":{"Service":"TankAgent"},"metrics_collection_interval":60},
+ "mem":{"measurement":["mem_used_percent"],"append_dimensions":{"Service":"TankAgent"},"metrics_collection_interval":60}}}}
+ mode: '000644'
+ owner: 'cwagent'
+ group: 'cwagent'
+ commands: {}
+ services:
+ sysvinit:
+ amazon-cloudwatch-agent:
+ enabled: 'true'
+ ensureRunning: 'true'
+ files:
+ - "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/tank-cloudwatch-config.json"
+ users: {}
+ groups: {}
+ agent-install:
+ packages:
+ yum:
+ unzip: []
+ java-11-amazon-corretto-headless: []
+ sources: {}
+ files:
+ /etc/init.d/tank_agent:
+ content: |
+ #!/bin/bash
+ # tank_agent
+ # chkconfig: 2345 99 99
+ # description: agent for Tank project
+ ### BEGIN INIT INFO
+ # Provides: $tank_agent
+ ### END INIT INFO
+ # Source function library.
+ . /etc/init.d/functions
+
+ RETVAL=0
+ umask 077
+ start() {
+ echo -n $"Starting Tank Agent: "
+ pushd /opt/tank_agent
+ ulimit -n 20000;
+ ulimit -a >> /tmp/ulimit_out;
+ daemon /opt/tank_agent/run.sh&
+ echo
+ return $RETVAL
+ }
+ stop() {
+ echo -n $"Shutdown agent startup: "
+ kill -9 `ps -ef | grep agent-startup-all | grep -v grep | awk '{print $2}'`
+ return $RETVAL
+ }
+ restart() {
+ stop
+ start
+ }
+ case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|restart}"
+ exit 1
+ esac
+ exit $?
+ mode: '000755'
+ owner: 'root'
+ group: 'root'
+ commands:
+ 010_update_DNS_in_security:
+ command: 'sed -i.bak "s/networkaddress.cache.negative.ttl=10/networkaddress.cache.negative.ttl=0/g" /etc/alternatives/jre/conf/security/java.security'
+ 020_download_startup_pkg:
+ command: !Sub 'aws s3 cp ${TankZip} /tmp/agent-startup-pkg.zip'
+ 021_unzip_startup_pkg:
+ command: 'unzip /tmp/agent-startup-pkg.zip -d /opt'
+ 022_mkdir_logs:
+ command: 'mkdir /opt/tank_agent/logs'
+ 030_increase_Ephemeral Ports:
+ command: 'echo "net.ipv4.ip_local_port_range=1024 65000" >> /etc/sysctl.conf'
+ 031_set_file_open_limit:
+ command: 'sed -i "s/#DefaultLimitNOFILE=/DefaultLimitNOFILE=81960/" /etc/systemd/system.conf'
+ 032_set_file_open_limit:
+ command: 'sed -i "s/#DefaultLimitNOFILE=/DefaultLimitNOFILE=81960/" /etc/systemd/user.conf'
+ services:
+ sysvinit:
+ tank_agent:
+ enabled: 'true'
+ ensureRunning: 'true'
+ users: {}
+ groups: {}
+ Properties:
+ ImageId: !Ref AmiId
+ InstanceType: !Ref InstanceType
+ SecurityGroupIds: !Ref SecurityGroupIds
+ KeyName: !Ref KeyName
+ SubnetId: !Ref SubnetIds
+ Tags:
+ - Key: 'Name'
+ Value: 'Tank Agent AMI'
+ UserData:
+ Fn::Base64: !Sub |
+ #!/bin/bash -v
+ # Ensure our PATH is set correctly (on Amazon Linux cfn-signal is in /opt/aws/bin)
+ . ~/.bash_profile
+ yum -y update
+ cfn-init -v \
+ --region ${AWS::Region} \
+ --stack ${AWS::StackName} \
+ --resource AgentInstance
+ cfn-signal -e $? \
+ --region ${AWS::Region} \
+ --stack ${AWS::StackName} \
+ '${UIInstanceWaitHandle}'
+ UIInstanceWaitHandle:
+ Type: AWS::CloudFormation::WaitConditionHandle
+ Properties: {}
+ UIInstanceWaitCondition:
+ Type: AWS::CloudFormation::WaitCondition
+ DependsOn: AgentInstance
+ Properties:
+ Handle: !Ref UIInstanceWaitHandle
+ Timeout: '1500'
+
+Outputs:
+ AgentInstanceId:
+ Description: InstanceId of the newly created agent instance
+ Value: !Ref AgentInstance
+ AZ:
+ Description: Availability Zone of the newly created EC2 instance
+ Value: !GetAtt [ 'AgentInstance', 'AvailabilityZone' ]
diff --git a/aws-config/tank_controller.yml b/aws-config/tank_controller.yml
new file mode 100644
index 000000000..6357b191d
--- /dev/null
+++ b/aws-config/tank_controller.yml
@@ -0,0 +1,289 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: Controller Instance - Creates a Tank controller installing java tomcat and configuring the instances appropriately.
+Parameters:
+ AmiId:
+ Type: AWS::SSM::Parameter::Value
+ Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
+ Description: The ID of the latest Amazon Linux 2 baseline AMI
+ KeyName:
+ Type: AWS::EC2::KeyPair::KeyName
+ Description: Name of an existing EC2 KeyPair to enable SSH access to the instance.
+ SubnetId:
+ Type: AWS::EC2::Subnet::Id
+ Description: Private subnet for the internal instance ip
+ TankWar:
+ Type: String
+ Description: File path to Tank tank.war Filename in S3 (ie. s3://bucket/keyname)
+ TankSettings:
+ Type: String
+ Description: File path to Tank settings.xml Filename in S3 (ie. s3://bucket/keyname)
+ RdsPassword:
+ Type: String
+ NoEcho: true
+ Description: Something secret (more than 8 characters)
+ InstanceType:
+ Description: EC2 instance type
+ Type: String
+ Default: t3a.medium
+ AllowedValues: [ 't3a.medium', 't3.medium', 't3a.large', 't3.large', 't3a.xlarge', 't3.xlarge', 'm5.large', 'm5.xlarge', 'c5.xlarge', 'c5.2xlarge' ]
+ ConstraintDescription: Must be one of t3.medium t3.large t3.xlarge m5.large m5.xlarge c5.xlarge or c5.2xlarge
+
+Mappings:
+ InstanceMap:
+ t3a.medium:
+ JvmHeap: '2g'
+ t3.medium:
+ JvmHeap: '2g'
+ t3a.large:
+ JvmHeap: '4g'
+ t3.large:
+ JvmHeap: '4g'
+ t3a.xlarge:
+ JvmHeap: '10g'
+ t3.xlarge:
+ JvmHeap: '10g'
+ c5.large:
+ JvmHeap: '1g'
+ c5.xlarge:
+ JvmHeap: '5g'
+ c5.2xlarge:
+ JvmHeap: '8g'
+ m5.large:
+ JvmHeap: '4g'
+ m5.xlarge:
+ JvmHeap: '10g'
+
+Resources:
+ RDSInstance:
+ Type: AWS::RDS::DBInstance
+ Properties:
+ DBInstanceIdentifier: tank
+ AutoMinorVersionUpgrade: true
+ DBInstanceClass: db.t3.large
+ Port: 3306
+ AllocatedStorage: 100
+ BackupRetentionPeriod: 30
+ DBName: tank
+ Engine: mysql
+ EngineVersion: 8.0.21
+ MasterUsername: admin
+ MasterUserPassword: !Ref RdsPassword
+ DBSecurityGroups:
+ - !Ref RDSSecurityGroup
+
+ RDSSecurityGroup:
+ Type: AWS::RDS::DBSecurityGroup
+ Properties:
+ GroupDescription: Ingress for Amazon EC2 security group
+ DBSecurityGroupIngress:
+ - EC2SecurityGroupName: !Ref SecurityGroup
+
+ SecurityGroup:
+ Type: AWS::EC2::SecurityGroup
+ Properties:
+ GroupDescription: Allow ssh and http tomcat to client host
+ SecurityGroupIngress:
+ - IpProtocol: tcp
+ FromPort: 22
+ ToPort: 22
+ CidrIp: 0.0.0.0/0
+ - IpProtocol: tcp
+ FromPort: 8080
+ ToPort: 8080
+ CidrIp: 0.0.0.0/0
+
+ ControllerInstance:
+ Type: AWS::EC2::Instance
+ Metadata:
+ AWS::CloudFormation::Init:
+ configSets:
+ default: ['pre-install', 'tomcat-install' ]
+ pre-install:
+ packages:
+ yum:
+ amazon-cloudwatch-agent: []
+ rpm:
+ xray-daemon: 'https://s3.dualstack.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.rpm'
+ groups: {}
+ users: {}
+ sources: {}
+ files:
+ /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/tank-cloudwatch-config.json:
+ content: |
+ {"logs":{"force_flush_interval":5,"logs_collected":{
+ "files":{"collect_list":[
+ {"file_path":"/opt/tomcat/logs/tank.log","log_group_name":"/opt/tomcat/logs/tank.log","log_stream_name":"{instance_id}"},
+ {"file_path":"/var/log/messages","log_group_name":"/var/log/messages","log_stream_name":"{instance_id}"}]}}},
+ "metrics":{"append_dimensions":{"InstanceId":"${aws:InstanceId}","InstanceType":"${aws:InstanceType}"},"metrics_collected":{
+ "disk":{"measurement":["used_percent"],"resources":["/"],"append_dimensions":{"Service":"Tank"},"metrics_collection_interval":60},
+ "mem":{"measurement":["mem_used_percent"],"append_dimensions":{"Service":"Tank"},"metrics_collection_interval":60}}}}
+ mode: '000644'
+ owner: 'cwagent'
+ group: 'cwagent'
+ commands:
+ 000_install_epel:
+ command: 'amazon-linux-extras install epel' #For tomcat-native
+ services:
+ amazon-cloudwatch-agent:
+ enabled: 'true'
+ ensureRunning: 'true'
+ files:
+ - "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/tank-cloudwatch-config.json"
+ tomcat-install:
+ packages:
+ yum:
+ tomcat-native: []
+ java-11-amazon-corretto-headless: []
+ sources:
+ /opt: 'http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.39/bin/apache-tomcat-9.0.39.tar.gz'
+ files:
+ /etc/init.d/tomcat:
+ content: |
+ #!/bin/bash
+ #
+ # tomcat Start tomcat
+ #
+ #
+ # chkconfig: 345 88 12
+ # description: start stop tomcat
+ ### BEGIN INIT INFO
+ # Provides: $tomcat
+ ### END INIT INFO
+ # Source function library.
+ . /etc/init.d/functions
+ . /etc/init.d/java_opts
+
+ ulimit -n 50000
+ export CATALINA_HOME=/opt/tomcat
+ RETVAL=0
+ umask 077
+ start() {
+ cd $CATALINA_HOME
+ echo -n $"Starting tomcat: "
+ daemon $CATALINA_HOME/bin/startup.sh
+ echo
+ return $RETVAL
+ }
+ stop() {
+ echo -n $"Shutting down tomcat: "
+ daemon $CATALINA_HOME/bin/shutdown.sh
+ echo
+ return $RETVAL
+ }
+ restart() {
+ stop
+ start
+ }
+ case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ restart
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|restart}"
+ exit 1
+ esac
+ exit $?
+ mode: '000755'
+ owner: 'root'
+ group: 'root'
+ /etc/init.d/java_opts:
+ content: !Sub
+ - |
+ export CATALINA_OPTS="-Xms${heap} -Xmx${heap} -XX:+UseG1GC -Dcom.amazonaws.sdk.enableDefaultMetrics=cloudwatchRegion=${AWS::Region} -Xlog:gc=debug:file=/opt/tomcat/logs/gc.log:time,uptime,level,tags:filecount=3,filesize=200m
+ - {
+ heap: !FindInMap [ InstanceMap, !Ref InstanceType, JvmHeap ]
+ }
+ mode: '000755'
+ owner: 'root'
+ group: 'root'
+ /tmp/context.xml:
+ content: !Sub |
+
+
+
+
+
+ mode: '000644'
+ owner: 'root'
+ group: 'root'
+ commands:
+ 010_tomcat_symboliclink:
+ command: 'ln -snf /opt/apache-tomcat-9.0.39 /opt/tomcat'
+ 020_clear_out_builtin:
+ command: 'rm -rf /opt/tomcat/webapps/*'
+ 030_download_settings:
+ command: !Sub 'aws s3 cp ${TankSettings} /opt/tomcat/settings.xml'
+ #031_set_publicDNSName:
+ # command: !Sub 'sed -i "s/localhost:8080/${ControllerInstance.PublicDnsName}:8080/" /opt/tomcat/settings.xml'
+ 040_download_tank:
+ command: !Sub 'aws s3 cp ${TankWar} /opt/tomcat/webapps/ROOT.war'
+ 050_copy_context:
+ command: 'cp /tmp/context.xml /opt/tomcat/conf/context.xml'
+ services:
+ sysvinit:
+ tomcat:
+ enabled : true
+ ensureRunning: true
+ users: {}
+ groups: {}
+ Properties:
+ ImageId: !Ref AmiId
+ InstanceType: !Ref InstanceType
+ IamInstanceProfile: !ImportValue TankControllerProfile
+ SecurityGroupIds:
+ - !GetAtt SecurityGroup.GroupId
+ KeyName: !Ref KeyName
+ SubnetId: !Ref SubnetId
+ Tags:
+ -
+ Key: Name
+ Value: Tank
+ UserData:
+ Fn::Base64: !Sub |
+ #!/bin/bash -v
+ # Ensure our PATH is set correctly (on Amazon Linux cfn-signal is in /opt/aws/bin)
+ . ~/.bash_profile
+ yum update -y
+ /opt/aws/bin/cfn-init -v \
+ --region ${AWS::Region} \
+ --stack ${AWS::StackName} \
+ --resource ControllerInstance
+ /opt/aws/bin/cfn-signal -e $? \
+ --region ${AWS::Region} \
+ --stack ${AWS::StackName} \
+ '${UIInstanceWaitHandle}'
+ UIInstanceWaitHandle:
+ Type: AWS::CloudFormation::WaitConditionHandle
+ Properties: {}
+ UIInstanceWaitCondition:
+ Type: AWS::CloudFormation::WaitCondition
+ DependsOn: ControllerInstance
+ Properties:
+ Handle: !Ref UIInstanceWaitHandle
+ Timeout: 1800
+
+Outputs:
+ InstanceId:
+ Description: InstanceId of the newly created controller instance
+ Value: !Ref ControllerInstance
+ PublicDnsName:
+ Description: PublicDnsName endpoint of the newly created ControllerInstance
+ Value: !GetAtt [ 'ControllerInstance', 'PublicDnsName' ]
diff --git a/aws-config/tank_instanceProfiles.yml b/aws-config/tank_instanceProfiles.yml
new file mode 100644
index 000000000..675aae485
--- /dev/null
+++ b/aws-config/tank_instanceProfiles.yml
@@ -0,0 +1,84 @@
+AWSTemplateFormatVersion: 2010-09-09
+Description: Create Controller and Agent IAM Instance Profiles for Intuit/Tank installation
+Resources:
+ ControllerProfile:
+ Type: AWS::IAM::InstanceProfile
+ Properties:
+ Path: /
+ Roles:
+ - !Ref ControllerRole
+ ControllerRole:
+ Type: AWS::IAM::Role
+ Properties:
+ AssumeRolePolicyDocument:
+ Version: 2012-10-17
+ Statement:
+ -
+ Effect: Allow
+ Action: sts:AssumeRole
+ Principal:
+ Service:
+ - ec2.amazonaws.com
+ Path: /
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AmazonEC2FullAccess
+ - arn:aws:iam::aws:policy/AmazonS3FullAccess
+ - arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess
+ - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
+ Policies:
+ -
+ PolicyName: tank-controller-role
+ PolicyDocument:
+ Version: 2012-10-17
+ Statement:
+ -
+ Effect: Allow
+ Action:
+ - iam:PassRole
+ - iam:ListInstanceProfiles
+ - iam:AddRoleToInstanceProfile
+ - appconfig:GetConfiguration
+ Resource: "*"
+ AgentProfile:
+ Type: AWS::IAM::InstanceProfile
+ Properties:
+ Path: /
+ Roles:
+ - !Ref AgentRole
+ AgentRole:
+ Type: AWS::IAM::Role
+ Properties:
+ AssumeRolePolicyDocument:
+ Version: 2012-10-17
+ Statement:
+ -
+ Effect: Allow
+ Action: sts:AssumeRole
+ Principal:
+ Service: ec2.amazonaws.com
+ Path: /
+ ManagedPolicyArns:
+ - arn:aws:iam::aws:policy/AmazonS3FullAccess
+ - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
+
+Outputs:
+ TankControllerProfile:
+ Description: Tank Controller Profile
+ Value: !Ref ControllerProfile
+ Export:
+ Name: TankControllerProfile
+ TankControllerRole:
+ Description: Tank Controller Role
+ Value: !Ref ControllerRole
+ Export:
+ Name: TankControllerRole
+ TankAgentProfile:
+ Description: Tank Agent Profile
+ Value: !Ref AgentProfile
+ Export:
+ Name: TankAgentProfile
+ TankAgentRole:
+ Description: Tank Agent Role
+ Value: !Ref AgentRole
+ Export:
+ Name: TankAgentRole
diff --git a/buildspec.yml b/buildspec.yml
index 7a89ab0e3..65a314259 100644
--- a/buildspec.yml
+++ b/buildspec.yml
@@ -3,15 +3,29 @@ version: 0.2
env:
variables:
MAVEN_OPTS: "-Xms1g -Xmx2g"
+ SKIP_METHODTIMER_TEST: true
phases:
+ install:
+ runtime-versions:
+ java: corretto11
build:
commands:
- - mvn clean install -P release
+ - java -version
+ - mvn clean install surefire-report:report -P release
+
+reports:
+ SurefireReports: # CodeBuild will create a report group called "SurefireReports".
+ files: #Store all of the files
+ - '**/*'
+ base-directory: 'web/web_support/target/surefire-reports' # Location of the reports
artifacts:
- type: NONE
files:
- web/web_ui/target/tank.war
- agent/agent_startup_pkg/target/agent-startup-pkg.zip
discard-paths: yes
+
+cache:
+ paths:
+ - '/root/.m2/**/*'
diff --git a/data_access/pom.xml b/data_access/pom.xml
index e66f2e1c5..c37f68048 100644
--- a/data_access/pom.xml
+++ b/data_access/pom.xml
@@ -6,7 +6,7 @@
com.intuit.tank
tank-parent
- 2.3.4
+ 3.0.0
diff --git a/data_access/src/main/java/com/intuit/tank/dao/GroupDao.java b/data_access/src/main/java/com/intuit/tank/dao/GroupDao.java
index 610f6c94c..a0a6aac35 100644
--- a/data_access/src/main/java/com/intuit/tank/dao/GroupDao.java
+++ b/data_access/src/main/java/com/intuit/tank/dao/GroupDao.java
@@ -26,9 +26,6 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.util.Collections;
-import java.util.List;
-
/**
* GroupDao
*
diff --git a/data_access/src/main/java/com/intuit/tank/dao/JobNotificationDao.java b/data_access/src/main/java/com/intuit/tank/dao/JobNotificationDao.java
index 6bd7c69eb..fcbc4ce45 100644
--- a/data_access/src/main/java/com/intuit/tank/dao/JobNotificationDao.java
+++ b/data_access/src/main/java/com/intuit/tank/dao/JobNotificationDao.java
@@ -61,8 +61,10 @@ public JobNotification findRevision(int id, int revisionNumber) {
begin();
AuditReader reader = AuditReaderFactory.get(getEntityManager());
result = reader.find(JobNotification.class, id, revisionNumber);
- Hibernate.initialize(result.getLifecycleEvents());
- result.getLifecycleEvents().contains(JobLifecycleEvent.QUEUE_ADD);
+ if(result != null) {
+ Hibernate.initialize(result.getLifecycleEvents());
+ result.getLifecycleEvents().contains(JobLifecycleEvent.QUEUE_ADD);
+ }
commit();
} catch (NoResultException e) {
rollback();
diff --git a/data_access/src/main/java/com/intuit/tank/dao/JobQueueDao.java b/data_access/src/main/java/com/intuit/tank/dao/JobQueueDao.java
index 40cd21754..c5cac31a8 100644
--- a/data_access/src/main/java/com/intuit/tank/dao/JobQueueDao.java
+++ b/data_access/src/main/java/com/intuit/tank/dao/JobQueueDao.java
@@ -25,16 +25,10 @@
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Fetch;
-import javax.persistence.criteria.JoinType;
import javax.persistence.criteria.Root;
-import com.intuit.tank.project.JobInstance;
-import com.intuit.tank.project.Project;
-import com.intuit.tank.project.Workload;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.hibernate.LockOptions;
import com.intuit.tank.project.JobQueue;
diff --git a/data_access/src/main/java/com/intuit/tank/dao/ProjectDao.java b/data_access/src/main/java/com/intuit/tank/dao/ProjectDao.java
index 659c2982b..b31215990 100644
--- a/data_access/src/main/java/com/intuit/tank/dao/ProjectDao.java
+++ b/data_access/src/main/java/com/intuit/tank/dao/ProjectDao.java
@@ -116,7 +116,7 @@ public synchronized Project saveOrUpdateProject(Project project) {
}
@Override
- public Project saveOrUpdate(Project entity) throws HibernateException {
+ public Project saveOrUpdate(@Nonnull Project entity) throws HibernateException {
entity.setModified(new Date());
return super.saveOrUpdate(entity);
}
diff --git a/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java b/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java
index d9293e6f6..1bf6d705a 100644
--- a/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java
+++ b/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java
@@ -19,7 +19,9 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
+import java.util.Date;
import java.util.List;
+import java.util.zip.GZIPOutputStream;
import javax.annotation.Nonnull;
import javax.persistence.EntityManager;
@@ -107,7 +109,6 @@ public void delete(Integer id) throws HibernateException {
}
LOG.debug("deleting entity " + entity.toString());
em.remove(entity);
- commit();
}
commit();
} catch (Exception e) {
@@ -154,7 +155,7 @@ public Script loadScriptSteps(@Nonnull Script script) {
if (script.getScriptSteps() == null || script.getScriptSteps().isEmpty()) {
SerializedScriptStep serializedScriptStep = new SerializedScriptStepDao().findById(script
.getSerializedScriptStepId());
- script.setSerializedSteps(serializedScriptStep);
+ script.deserializeSteps(serializedScriptStep);
}
return script;
}
@@ -174,17 +175,18 @@ public Script saveOrUpdate(Script script) {
EntityManager em = getEntityManager();
try {
begin();
- SerializedScriptStep serializedScriptStep = serialize(script.getScriptSteps());
+ SerializedScriptStep serializedScriptStep = serialize(script);
serializedScriptStep.setSerialzedData(
Hibernate.getLobCreator(getHibernateSession()).createBlob(serializedScriptStep.getBytes()));
- SerializedScriptStep serializedSteps = new SerializedScriptStepDao().saveOrUpdate(serializedScriptStep);
+ SerializedScriptStep savedSerializedStep = new SerializedScriptStepDao().saveOrUpdate(serializedScriptStep);
script.setSerializedScriptStepId(serializedScriptStep.getId());
if (script.getId() == 0) {
em.persist(script);
} else {
+ script.setModified(new Date());
script = em.merge(script);
}
- LOG.debug("Saved Script Steps with id " + serializedSteps.getId() + " for script " + script.getId());
+ LOG.debug("Saved Script Steps with id " + savedSerializedStep.getId() + " for script " + script.getId());
commit();
} catch (Exception e) {
rollback();
@@ -198,16 +200,24 @@ public Script saveOrUpdate(Script script) {
return script;
}
- public SerializedScriptStep serialize(List steps) {
- try ( ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutputStream s = new ObjectOutputStream(bos) ) {
- // if (steps.size() > 0) {
- s.writeObject(steps);
- return new SerializedScriptStep(bos.toByteArray());
- // }
+ private SerializedScriptStep serialize(Script script) {
+ SerializedScriptStep serializedScriptStep = script.getId() > 0 ?
+ new SerializedScriptStepDao().findById(script.getSerializedScriptStepId()) :
+ null;
+ try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ GZIPOutputStream gz = new GZIPOutputStream(bos);
+ ObjectOutputStream s = new ObjectOutputStream(gz) ) {
+ s.writeObject(script.getScriptSteps());
+ s.close(); //Necessary to get the last few bites written
+ if ( serializedScriptStep != null) {
+ serializedScriptStep.setBytes(bos.toByteArray());
+ } else {
+ serializedScriptStep = new SerializedScriptStep(bos.toByteArray());
+ }
} catch (IOException e) {
throw new AnnotationException(e.toString());
}
+ return serializedScriptStep;
}
// private String getUniqueProjects(List steps) {
diff --git a/data_access/src/main/java/com/intuit/tank/dao/UserDao.java b/data_access/src/main/java/com/intuit/tank/dao/UserDao.java
index 2fb7f9cac..852f8dfb7 100644
--- a/data_access/src/main/java/com/intuit/tank/dao/UserDao.java
+++ b/data_access/src/main/java/com/intuit/tank/dao/UserDao.java
@@ -59,13 +59,12 @@ public UserDao() {
@Nullable
public User authenticate(@Nonnull String userName, @Nonnull String password) {
User user = findByUserName(userName);
- User result = null;
if (user != null) {
if (PasswordEncoder.validatePassword(password, user.getPassword())) {
- result = user;
+ return user;
}
}
- return result;
+ return null;
}
/**
@@ -91,12 +90,12 @@ public User findByUserName(@Nonnull String userName) {
commit();
} catch (NoResultException nre) {
rollback();
- LOG.info("no entity matching username: " + userName, nre);
+ LOG.info("No entity matching username: " + userName);
} catch (Exception e) {
rollback();
String printQuery = (query != null) ? query.toString()
: "Failed to connect to database: ";
- LOG.info("no entity matching query: " + printQuery, e);
+ LOG.info("No entity matching query: " + printQuery, e);
} finally {
cleanup();
}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/BaseDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/BaseDaoTest.java
new file mode 100644
index 000000000..13d93a059
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/BaseDaoTest.java
@@ -0,0 +1,50 @@
+package com.intuit.tank.dao;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.User;
+import com.intuit.tank.test.TestGroups;
+
+public class BaseDaoTest {
+
+ private BaseDao dao;
+
+ @BeforeEach
+ public void configure() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers();
+ dao = new UserDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testBaseDao() throws Exception {
+ User entity = DaoTestUtil.createUserData("BaseTestUser1", "TestUser1_Password", "BaseTestUser1@intuit.com", "TestGroup1");
+ List entities = new ArrayList();
+ entities.add(entity);
+ dao.persistCollection(entities);
+
+ List users = dao.findAll();
+ for(User user: users) {
+ if(user.getEmail().equals(entity.getEmail())) {
+ assertEquals(entity.getName(), user.getName());
+ break;
+ }
+ }
+ dao.delete(entity);
+ }
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/DaoTestUtil.java b/data_access/src/test/java/com/intuit/tank/dao/DaoTestUtil.java
index 4f0ca04f6..dcac76e86 100644
--- a/data_access/src/test/java/com/intuit/tank/dao/DaoTestUtil.java
+++ b/data_access/src/test/java/com/intuit/tank/dao/DaoTestUtil.java
@@ -17,6 +17,8 @@
*/
import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
@@ -26,12 +28,19 @@
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
+import com.intuit.tank.project.DataFile;
+import com.intuit.tank.project.Group;
+import com.intuit.tank.project.JobRegion;
+import com.intuit.tank.project.PeriodicData;
import com.intuit.tank.project.Project;
import com.intuit.tank.project.Script;
import com.intuit.tank.project.ScriptGroup;
import com.intuit.tank.project.ScriptGroupStep;
import com.intuit.tank.project.ScriptStep;
+import com.intuit.tank.project.User;
import com.intuit.tank.project.Workload;
+import com.intuit.tank.vm.api.enumerated.VMRegion;
+import com.intuit.tank.vm.common.PasswordEncoder;
import static org.junit.jupiter.api.Assertions.*;
@@ -61,7 +70,7 @@ public static Project createProject() {
.productName("Test Product Name")
.name("Test Project Name " + generateStringOfLength(15)).build();
}
-
+
/**
* Generate a new Workload object for testing.
*
@@ -180,5 +189,74 @@ public static void checkConstraintViolation(@Nonnull ConstraintViolationExceptio
}
fail("Constraint violation did not contain a violation on property " + property);
}
+
+ /**
+ * Generate a new PeriodicData object for testing.
+ *
+ * @return the PeriodicData
+ */
+ public static PeriodicData createPeriodicData(int jobId, Date timestamp) {
+ return PeriodicData.builder()
+ .min(1)
+ .max(5)
+ .jobId(jobId)
+ .pageId("Test Page Id "+generateStringOfLength(5))
+ .timestamp(timestamp)
+ .build();
+ }
+
+ /**
+ * Generate a new User object for testing.
+ *
+ * @return the User
+ */
+ public static User createUserData(String userName, String password,String email, String group) {
+ Set groups = new HashSet();
+ groups.add(createGroupData(group));
+ return User.builder()
+ .name(userName)
+ .password(PasswordEncoder.encodePassword(password))
+ .email(email)
+ .groups(groups)
+ .generateApiToken()
+ .build();
+ }
+
+ /**
+ * Generate a new Group object for testing.
+ *
+ * @return the Group
+ */
+ public static Group createGroupData(String groupName) {
+ return Group.builder()
+ .name(groupName)
+ .build();
+ }
+
+ /**
+ * Generate a new DataFile object for testing.
+ *
+ * @return the DataFile
+ */
+ public static DataFile createDataFileData(String fileName) {
+ return DataFile.builder()
+ .fileName(fileName)
+ .path("/test_path")
+ .comments("test_comments")
+ .creator("test_creator")
+ .build();
+ }
+
+ /**
+ * Generate a new JobRegion object for testing.
+ *
+ * @return the DataFile
+ */
+ public static JobRegion createJobRegionData(String users) {
+ return JobRegion.builder()
+ .users(users)
+ .region(VMRegion.US_WEST_2)
+ .build();
+ }
}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/DataFileDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/DataFileDaoTest.java
new file mode 100644
index 000000000..f1da5e04a
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/DataFileDaoTest.java
@@ -0,0 +1,57 @@
+package com.intuit.tank.dao;
+
+/*
+ * #%L
+ * Data Access
+ * %%
+ * Copyright (C) 2011 - 2015 Intuit Inc.
+ * %%
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * #L%
+ */
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.DataFile;
+import com.intuit.tank.test.TestGroups;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class DataFileDaoTest {
+ private DataFileDao dao;
+
+ @BeforeEach
+ public void configure() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers();
+ dao = new DataFileDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testStoreDataFile() throws Exception {
+ DataFile dataFile = DaoTestUtil.createDataFileData("TestFile");
+
+ String initialString = "text";
+ InputStream targetStream = new ByteArrayInputStream(initialString.getBytes());
+
+ DataFile result = dao.storeDataFile(dataFile, targetStream);
+ assertEquals(dataFile.getFileName(), result.getFileName());
+
+
+ }
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/FilterGroupDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/FilterGroupDaoTest.java
new file mode 100644
index 000000000..b98ecabae
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/FilterGroupDaoTest.java
@@ -0,0 +1,47 @@
+/**
+ * Copyright 2011 Intuit Inc. All Rights Reserved
+ */
+package com.intuit.tank.dao;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.List;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.ScriptFilterGroup;
+import com.intuit.tank.test.TestGroups;
+
+/**
+ * JobQueueDaoTest
+ *
+ * @author msreekakula
+ *
+ */
+public class FilterGroupDaoTest {
+
+ private FilterGroupDao dao;
+
+ @BeforeEach
+ public void setUp() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig.
+ dao = new FilterGroupDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testFindFilterGroups() throws Exception {
+ List configurations = dao.getFilterGroupsForProduct("Test");
+ assertEquals(0, configurations.size());
+ }
+
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/GroupDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/GroupDaoTest.java
new file mode 100644
index 000000000..8598689f5
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/GroupDaoTest.java
@@ -0,0 +1,77 @@
+package com.intuit.tank.dao;
+
+/*
+ * #%L
+ * Data Access
+ * %%
+ * Copyright (C) 2011 - 2015 Intuit Inc.
+ * %%
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * #L%
+ */
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.Group;
+import com.intuit.tank.test.TestGroups;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class GroupDaoTest {
+ private GroupDao dao;
+
+ @BeforeEach
+ public void configure() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers();
+ dao = new GroupDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testFindByName() throws Exception {
+ Group first = DaoTestUtil.createGroupData("testGroup");
+ first = dao.saveOrUpdate(first);
+
+ //Try to fetch the group which was created
+ Group result = dao.findByName("testGroup");
+ assertEquals(first.getId(), result.getId());
+
+ //Try to fetch a group which was not created, it will return null value
+ result = dao.findByName("testGroup1");
+ assertEquals(null,result);
+
+ dao.delete(first);
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testGetOrCreateGroup() throws Exception {
+ Group first = DaoTestUtil.createGroupData("testGroup");
+ first = dao.saveOrUpdate(first);
+
+ //Try to create a group which was created earlier, it will not create a new group
+ // and will match with the group id
+ Group result = dao.getOrCreateGroup("testGroup");
+ assertEquals(first.getId(), result.getId());
+
+ //Try to create a group with a new name, it will create a new group
+ Group result2 = dao.getOrCreateGroup("testGroup2");
+ assertEquals("testGroup2", result2.getName());
+
+ dao.delete(first);
+ dao.delete(result2);
+
+ }
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/JobNotificationDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/JobNotificationDaoTest.java
new file mode 100644
index 000000000..63484b45d
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/JobNotificationDaoTest.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright 2011 Intuit Inc. All Rights Reserved
+ */
+package com.intuit.tank.dao;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.JobNotification;
+import com.intuit.tank.project.JobQueue;
+import com.intuit.tank.test.TestGroups;
+
+/**
+ * JobQueueDaoTest
+ *
+ * @author msreekakula
+ *
+ */
+public class JobNotificationDaoTest {
+
+ private JobNotificationDao dao;
+
+ @BeforeEach
+ public void setUp() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig.
+ dao = new JobNotificationDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testFindRevisions() throws Exception {
+ JobNotification jobnotification = new JobNotification();
+ jobnotification.setId(1);
+ jobnotification.setBody("Test");
+ JobNotification result = dao.saveOrUpdate(jobnotification);
+ assertEquals(jobnotification.getBody(), result.getBody());
+ JobNotification revisionJob = dao.findRevision(0,1);
+ assertEquals(null, revisionJob);
+
+ }
+
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/JobQueueDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/JobQueueDaoTest.java
new file mode 100644
index 000000000..0e0494ca7
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/JobQueueDaoTest.java
@@ -0,0 +1,56 @@
+/**
+ * Copyright 2011 Intuit Inc. All Rights Reserved
+ */
+package com.intuit.tank.dao;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.JobQueue;
+import com.intuit.tank.test.TestGroups;
+
+/**
+ * JobQueueDaoTest
+ *
+ * @author msreekakula
+ *
+ */
+public class JobQueueDaoTest {
+
+ private JobQueueDao dao;
+
+ @BeforeEach
+ public void setUp() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers(); // This causes all Loggers to refetch information from their LoggerConfig.
+ dao = new JobQueueDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testFindJobQueues() throws Exception {
+ JobQueue queue = dao.findOrCreateForProjectId(1);
+ assertEquals(1, queue.getId());
+ JobQueue queue1 = dao.findForJobId(2);
+ assertEquals(null, queue1);
+ List queue2 = dao.getForProjectIds(Arrays.asList(1,2,3));
+ assertEquals(1, queue2.size());
+ List recentQueues = dao.findRecent(new Date());
+ assertEquals(0, recentQueues.size());
+
+ }
+
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/JobRegionDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/JobRegionDaoTest.java
new file mode 100644
index 000000000..e4f8aa289
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/JobRegionDaoTest.java
@@ -0,0 +1,69 @@
+package com.intuit.tank.dao;
+
+/*
+ * #%L
+ * Data Access
+ * %%
+ * Copyright (C) 2011 - 2015 Intuit Inc.
+ * %%
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * #L%
+ */
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.JobRegion;
+import com.intuit.tank.test.TestGroups;
+
+public class JobRegionDaoTest {
+
+ private JobRegionDao dao;
+
+ @BeforeEach
+ public void configure() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers();
+ dao = new JobRegionDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testCleanRegions() throws Exception {
+ JobRegion jobRegion3 = DaoTestUtil.createJobRegionData("TestUser_1");
+ jobRegion3.setCreated(new Date());
+
+ JobRegion jobRegion2 = DaoTestUtil.createJobRegionData("TestUser_1");
+ jobRegion2 = dao.saveOrUpdate(jobRegion2);
+
+ JobRegion jobRegion1 = DaoTestUtil.createJobRegionData("TestUser_1");
+ jobRegion1.setCreated(new Date());
+ jobRegion1 = dao.saveOrUpdate(jobRegion1);
+
+
+ List jobRegions = new ArrayList(2);
+ jobRegions.add(jobRegion1);
+ jobRegions.add(jobRegion3);
+
+ Set regions = dao.cleanRegions(jobRegions);
+ assertEquals(1, regions.size());
+
+ }
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/PeriodicDataTest.java b/data_access/src/test/java/com/intuit/tank/dao/PeriodicDataTest.java
new file mode 100644
index 000000000..d46a19e29
--- /dev/null
+++ b/data_access/src/test/java/com/intuit/tank/dao/PeriodicDataTest.java
@@ -0,0 +1,95 @@
+package com.intuit.tank.dao;
+
+/*
+ * #%L
+ * Data Access
+ * %%
+ * Copyright (C) 2011 - 2015 Intuit Inc.
+ * %%
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * #L%
+ */
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+
+import com.intuit.tank.project.PeriodicData;
+import com.intuit.tank.test.TestGroups;
+
+public class PeriodicDataTest {
+ private PeriodicDataDao dao;
+
+ @BeforeEach
+ public void configure() {
+ LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+ Configuration config = ctx.getConfiguration();
+ config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME).setLevel(Level.INFO);
+ ctx.updateLoggers();
+ dao = new PeriodicDataDao();
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testFindByJobId() throws Exception {
+ PeriodicData first = DaoTestUtil.createPeriodicData(1, new Date());
+ first = dao.saveOrUpdate(first);
+
+ PeriodicData second = DaoTestUtil.createPeriodicData(2, new Date());
+ second = dao.saveOrUpdate(second);
+
+ PeriodicData third = DaoTestUtil.createPeriodicData(3, new Date());
+ third = dao.saveOrUpdate(third);
+
+ List list = dao.findByJobId(2);
+ assertEquals(second.getJobId(), list.get(0).getJobId());
+ }
+
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testFindByJobIdForDateRange() throws Exception {
+ Date tenDaysBeforeDate = getCustomDate(-10);
+ PeriodicData first = DaoTestUtil.createPeriodicData(1, tenDaysBeforeDate);
+ first = dao.saveOrUpdate(first);
+
+ Date sevenDaysBeforeDate = getCustomDate(-7);
+ PeriodicData second = DaoTestUtil.createPeriodicData(2, sevenDaysBeforeDate);
+ second = dao.saveOrUpdate(second);
+
+ Date fiveDaysBeforeDate = getCustomDate(-5);
+ PeriodicData third = DaoTestUtil.createPeriodicData(2, fiveDaysBeforeDate);
+ third = dao.saveOrUpdate(third);
+
+
+ Date fourDaysBeforeDate = getCustomDate(-4);
+ List list = dao.findByJobId(2, sevenDaysBeforeDate, fourDaysBeforeDate);
+ assertEquals(2, list.size());
+
+ //Even though PeriodicData exists with jobId, the date range is outside, so empty list is returned
+ list = dao.findByJobId(2, new Date(), new Date());
+ assertEquals(0, list.size());
+
+ //If both dates are null, then PeriodicData matching the jobIds are returned
+ list = dao.findByJobId(2, null,null);
+ assertEquals(2, list.size());
+ }
+
+ private Date getCustomDate(int days) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.DATE, days);
+ return calendar.getTime();
+ }
+}
diff --git a/data_access/src/test/java/com/intuit/tank/dao/ScriptDaoTest.java b/data_access/src/test/java/com/intuit/tank/dao/ScriptDaoTest.java
index 745e5e584..617fac65e 100644
--- a/data_access/src/test/java/com/intuit/tank/dao/ScriptDaoTest.java
+++ b/data_access/src/test/java/com/intuit/tank/dao/ScriptDaoTest.java
@@ -19,6 +19,7 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
import javax.validation.ConstraintViolationException;
@@ -29,12 +30,11 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
-import com.intuit.tank.dao.ScriptDao;
import com.intuit.tank.project.Script;
import com.intuit.tank.project.ScriptStep;
import com.intuit.tank.view.filter.ViewFilterType;
+import org.hibernate.PropertyValueException;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
@@ -82,7 +82,6 @@ public void configure() {
@Test
@Tag(TestGroups.FUNCTIONAL)
- @Disabled
public void testChildOrder() throws Exception {
Script entity = DaoTestUtil.createScript();
entity.addStep(DaoTestUtil.createScriptStep());
@@ -97,17 +96,17 @@ public void testChildOrder() throws Exception {
children.add(0, removed);
persisted = dao.saveOrUpdate(persisted);
persisted = dao.findById(id);
- assertFalse(persisted.getScriptSteps().get(0).equals(originalOrder.get(0)));
- assertTrue(persisted.getScriptSteps().get(0).equals(originalOrder.get(2)));
- assertTrue(persisted.getScriptSteps().get(1).equals(originalOrder.get(0)));
- assertTrue(persisted.getScriptSteps().get(2).equals(originalOrder.get(1)));
+ assertNotEquals(originalOrder.get(0), persisted.getScriptSteps().get(0));
+ assertEquals(originalOrder.get(2), persisted.getScriptSteps().get(0));
+ assertEquals(originalOrder.get(0), persisted.getScriptSteps().get(1));
+ assertEquals(originalOrder.get(1), persisted.getScriptSteps().get(2));
originalOrder = new ArrayList(persisted.getScriptSteps());
persisted.getScriptSteps().remove(2);
persisted.getScriptSteps().remove(0);
persisted = dao.saveOrUpdate(persisted);
persisted = dao.findById(id);
- assertTrue(persisted.getScriptSteps().get(0).equals(originalOrder.get(1)));
+ assertEquals(originalOrder.get(1), persisted.getScriptSteps().get(0));
assertEquals(1, persisted.getScriptSteps().size());
} finally {
@@ -160,10 +159,27 @@ public void testFilter() throws Exception {
assertEquals(fourth.getId(), list.get(3).getId());
}
+ @Test
+ @Tag(TestGroups.FUNCTIONAL)
+ public void testCompressScripSteps() {
+
+ Script script = DaoTestUtil.createScript();
+ IntStream.range(0, 500).forEach(i -> script.addStep(DaoTestUtil.createScriptStep()));
+ int id = dao.saveOrUpdate(script).getId();
+
+ Script scriptOut = dao.findById(id);
+ assertNotNull(scriptOut);
+
+ dao.loadScriptSteps(scriptOut);
+ List StepsOut = scriptOut.getSteps();
+ assertEquals(500, StepsOut.size());
+
+ dao.delete(id);
+ }
+
@ParameterizedTest
@Tag(TestGroups.FUNCTIONAL)
@MethodSource("validations")
- @Disabled
public void testValidation(Script entity, String property, String messageContains) throws Exception {
try {
dao.saveOrUpdate(entity);
@@ -171,12 +187,17 @@ public void testValidation(Script entity, String property, String messageContain
} catch (ConstraintViolationException e) {
// expected validation
DaoTestUtil.checkConstraintViolation(e, property, messageContains);
+ } catch (RuntimeException e) {
+ if (e.getCause().getCause() instanceof PropertyValueException) {
+ assertTrue(e.getCause().getCause().getMessage().startsWith("not-null property references a null or transient value"));
+ return;
+ }
+ assertTrue(e.getCause().getCause().getCause().getMessage().startsWith("Value too long for column "));
}
}
@Test
@Tag(TestGroups.FUNCTIONAL)
- @Disabled
public void testBasicCreateUpdateDelete() throws Exception {
List