package integration_tests;
import com.loadimpact.ApiTokenClient;
import com.loadimpact.RunningTestListener;
import com.loadimpact.exception.AbortTest;
import com.loadimpact.exception.ApiException;
import com.loadimpact.resource.*;
import com.loadimpact.resource.configuration.LoadScheduleStep;
import com.loadimpact.resource.configuration.LoadTrack;
import com.loadimpact.resource.configuration.UserType;
import com.loadimpact.util.StringUtils;
import java.net.MalformedURLException;
import java.net.URL;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
/**
* Runs a full load-test.
*
* @user jens
* @date 2015-05-15
*/
public class RunningLoadTests extends AbstractIntegrationTestBase {
@org.junit.Test
public void starting_a_test_and_aborting_directly_should_pass() throws Exception {
final UserScenario scenario = createScenario();
final TestConfiguration testConfig = createTestConfig(TARGET_URL, scenario.id);
try {
final int testId = client.startTest(testConfig.id);
assertThat(testId, greaterThan(0));
Test test = client.getTest(testId);
assertThat(test, notNullValue());
assertThat(test.id, is(testId));
waitFor("load-test has state==running", new WaitForClosure() {
@Override
public boolean isDone() {
Test test = client.getTest(testId);
return test.status == Status.RUNNING;
}
});
// abort test
client.abortTest(testId);
// verify
test = client.getTest(testId);
assertThat(test, notNullValue());
assertThat(test.status, anyOf(is(Status.ABORTING_BY_USER), is(Status.ABORTED_BY_USER)));
} finally {
client.deleteTestConfiguration(testConfig.id);
client.deleteUserScenario(scenario.id);
}
}
@org.junit.Test
public void starting_a_test_monitoring_it_and_then_aborting_it_should_pass() throws Exception {
final UserScenario scenario = createScenario();
final TestConfiguration testConfig = createTestConfig(TARGET_URL, scenario.id);
try {
final int testId = client.startTest(testConfig.id);
assertThat(testId, greaterThan(0));
Test test = client.getTest(testId);
assertThat(test, notNullValue());
assertThat(test.id, is(testId));
waitFor("load-test has state==running", new WaitForClosure() {
@Override
public boolean isDone() {
Test test = client.getTest(testId);
return test.status.isRunning();
}
});
final long deadline = now() + 60 * ONE_SECOND_AS_MILLISECS;
Test monitoredTest = client.monitorTest(testId, 10, new RunningTestListener() {
@Override
public void onProgress(Test test, ApiTokenClient client) {
assertThat(test.status.isRunning(), is(true));
if (deadline < now()) {
throw new AbortTest();
}
}
@Override
public void onAborted() {
assertTrue("OK", true);
}
@Override
public void onSuccess(Test test) {
fail("onSuccess");
}
@Override
public void onFailure(Test test) {
fail("onFailure");
}
@Override
public void onError(ApiException error) {
fail("onFailure");
}
});
assertThat(monitoredTest, nullValue());
// verify
test = client.getTest(testId);
assertThat(test, notNullValue());
assertThat(test.status, anyOf(is(Status.ABORTING_BY_USER), is(Status.ABORTED_BY_USER)));
} finally {
client.deleteTestConfiguration(testConfig.id);
client.deleteUserScenario(scenario.id);
}
}
@org.junit.Test
public void starting_a_test_monitoring_it_and_waiting_for_completion_should_pass() throws Exception {
final UserScenario scenario = createScenario();
final TestConfiguration testConfig = createTestConfig(TARGET_URL, scenario.id);
try {
final int testId = client.startTest(testConfig.id);
assertThat(testId, greaterThan(0));
Test test = client.getTest(testId);
assertThat(test, notNullValue());
assertThat(test.id, is(testId));
waitFor("load-test has state==running", new WaitForClosure() {
@Override
public boolean isDone() {
Test test = client.getTest(testId);
return test.status.isRunning();
}
});
Test monitoredTest = client.monitorTest(testId, 10, new RunningTestListener() {
@Override
public void onProgress(Test test, ApiTokenClient client) {
assertThat(test.status.isRunning(), is(true));
}
@Override
public void onAborted() {
fail("onAborted");
}
@Override
public void onSuccess(Test test) {
assertThat(test.status, is(Status.FINISHED));
}
@Override
public void onFailure(Test test) {
fail("onFailure");
}
@Override
public void onError(ApiException error) {
fail("onFailure");
}
});
assertThat(monitoredTest, notNullValue());
assertThat(monitoredTest.id, is(testId));
assertThat(monitoredTest.status.isSuccessful(), is(true));
// verify
test = client.getTest(testId);
assertThat(test, notNullValue());
assertThat(test.status.isSuccessful(), is(true));
} finally {
client.deleteTestConfiguration(testConfig.id);
client.deleteUserScenario(scenario.id);
}
}
}