package integration_tests;
import com.loadimpact.exception.ApiException;
import com.loadimpact.resource.LoadZone;
import com.loadimpact.resource.TestConfiguration;
import com.loadimpact.resource.UserScenario;
import com.loadimpact.resource.configuration.LoadScheduleStep;
import com.loadimpact.resource.configuration.LoadTrack;
import com.loadimpact.resource.configuration.UserType;
import com.loadimpact.util.StringUtils;
import org.junit.Before;
import org.junit.Test;
import java.net.URL;
import java.util.List;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
/**
* Verifies it's possible to create/use/delete test-configurations.
*
* @user jens
* @date 2015-05-15
*/
public class UsingTestConfigurations extends AbstractIntegrationTestBase {
@Test
public void create_configuration_should_pass() throws Exception {
final String configurationName = "integration_test_" + System.nanoTime();
final String targetUrl = "https://loadimpact.com/";
final int testDuration = 10;
final int testUserCount = 10;
final LoadZone trackZone = LoadZone.AMAZON_US_ASHBURN;
final int trackPercentage = 100;
UserScenario trackScenario = createScenario();
// prepare
final TestConfiguration configurationToBeCreated = new TestConfiguration();
configurationToBeCreated.name = configurationName;
configurationToBeCreated.url = new URL(targetUrl);
configurationToBeCreated.userType = UserType.SBU;
configurationToBeCreated.loadSchedule.add(new LoadScheduleStep(testDuration, testUserCount));
final LoadTrack track = new LoadTrack(trackZone);
track.clip(trackPercentage, trackScenario.id);
configurationToBeCreated.tracks.add(track);
// create
TestConfiguration configuration = client.createTestConfiguration(configurationToBeCreated);
assertThat(configuration, notNullValue());
assertThat(configuration.id, greaterThan(0));
assertThat(configuration.name, is(configurationName));
final int configurationId = configuration.id;
// fetch
configuration = client.getTestConfiguration(configurationId);
assertThat(configuration, notNullValue());
assertThat(configuration.id, is(configurationId));
// fetch all
final List<TestConfiguration> configurations = client.getTestConfigurations();
assertThat(configurations, notNullValue());
assertThat(configurations.size(), greaterThanOrEqualTo(1));
// delete
client.deleteTestConfiguration(configurationId);
try {
client.getTestConfiguration(configurationId);
fail("Expected: 404 Not Found");
} catch (ApiException ignore) {
}
client.deleteUserScenario(trackScenario.id);
}
@Test
public void create_and_clone_should_pass() throws Exception {
final String configurationName = "integration_test_" + System.nanoTime();
final String targetUrl = "https://loadimpact.com/";
final int testDuration = 10;
final int testUserCount = 10;
final LoadZone trackZone = LoadZone.AMAZON_US_ASHBURN;
final int trackPercentage = 100;
UserScenario trackScenario = createScenario();
// prepare
final TestConfiguration configurationToBeCreated = new TestConfiguration();
configurationToBeCreated.name = configurationName;
configurationToBeCreated.url = new URL(targetUrl);
configurationToBeCreated.userType = UserType.SBU;
configurationToBeCreated.loadSchedule.add(new LoadScheduleStep(testDuration, testUserCount));
final LoadTrack track = new LoadTrack(trackZone);
track.clip(trackPercentage, trackScenario.id);
configurationToBeCreated.tracks.add(track);
// create
TestConfiguration configuration = client.createTestConfiguration(configurationToBeCreated);
assertThat(configuration, notNullValue());
assertThat(configuration.id, greaterThan(0));
assertThat(configuration.name, is(configurationName));
// clone
final String clonedName = "integration_test_cloned_" + System.nanoTime();
TestConfiguration configurationCloned = client.cloneTestConfiguration(configuration.id, clonedName);
assertThat(configurationCloned, notNullValue());
assertThat(configurationCloned.name, is(clonedName));
assertThat(configurationCloned.id, greaterThan(0));
assertThat(configurationCloned.id, not(is(configuration.id)));
// delete
client.deleteTestConfiguration(configurationCloned.id);
client.deleteTestConfiguration(configuration.id);
client.deleteUserScenario(trackScenario.id);
}
@Test
public void create_and_update_should_pass() throws Exception {
final String configurationName = "integration_test_" + System.nanoTime();
final String targetUrl = "https://loadimpact.com/";
final int testDuration = 10;
final int testUserCount = 10;
final LoadZone trackZone = LoadZone.AMAZON_US_ASHBURN;
final int trackPercentage = 100;
UserScenario trackScenario = createScenario();
// prepare
final TestConfiguration configurationToBeCreated = new TestConfiguration();
configurationToBeCreated.name = configurationName;
configurationToBeCreated.url = new URL(targetUrl);
configurationToBeCreated.userType = UserType.SBU;
configurationToBeCreated.loadSchedule.add(new LoadScheduleStep(testDuration, testUserCount));
final LoadTrack track = new LoadTrack(trackZone);
track.clip(trackPercentage, trackScenario.id);
configurationToBeCreated.tracks.add(track);
// create
TestConfiguration configuration = client.createTestConfiguration(configurationToBeCreated);
assertThat(configuration, notNullValue());
assertThat(configuration.id, greaterThan(0));
assertThat(configuration.name, is(configurationName));
// update
TestConfiguration configurationToBeUpdated = new TestConfiguration(configuration.toJSON());
configurationToBeUpdated.id = configuration.id;
configurationToBeUpdated.name = configurationName.toUpperCase();
configurationToBeUpdated.url = new URL("http://developers.loadimpact.com/api/index.html");
TestConfiguration configurationUpdated = client.updateTestConfiguration(configurationToBeUpdated);
assertThat(configurationUpdated, notNullValue());
assertThat(configurationUpdated.name, is(configurationToBeUpdated.name));
assertThat(configurationUpdated.url, is(configurationToBeUpdated.url));
// delete
client.deleteTestConfiguration(configuration.id);
client.deleteUserScenario(trackScenario.id);
}
}