/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.impl.wsdl.actions.loadtest;
import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.model.settings.Settings;
import com.eviware.soapui.settings.HttpSettings;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.support.AbstractSoapUIAction;
import com.eviware.x.form.XFormDialog;
import com.eviware.x.form.XFormField;
import com.eviware.x.form.XFormFieldListener;
import com.eviware.x.form.support.ADialogBuilder;
import com.eviware.x.form.support.AField;
import com.eviware.x.form.support.AField.AFieldType;
import com.eviware.x.form.support.AForm;
import com.eviware.x.form.support.APage;
/**
* Displays the LoadTest Options dialog
*
* @author Ole.Matzura
*/
public class LoadTestOptionsAction extends AbstractSoapUIAction<WsdlLoadTest> {
public static final String SOAPUI_ACTION_ID = "LoadTestOptionsAction";
private XFormDialog dialog;
public LoadTestOptionsAction() {
super("Options", "Sets options for this LoadTest");
}
public void perform(WsdlLoadTest loadTest, Object param) {
if (dialog == null) {
buildDialog();
}
dialog.setIntValue(SettingsForm.THREAD_STARTUP_DELAY, loadTest.getStartDelay());
dialog.setBooleanValue(SettingsForm.RESET_STATISTICS, loadTest.getResetStatisticsOnThreadCountChange());
dialog.setBooleanValue(SettingsForm.CALC_TPS, loadTest.getCalculateTPSOnTimePassed());
dialog.setIntValue(SettingsForm.SAMPLE_INTERVAL, (int) loadTest.getSampleInterval());
dialog.setBooleanValue(SettingsForm.DISABLE_HISTORY, loadTest.getHistoryLimit() == 0);
dialog.setIntValue(SettingsForm.MAX_ASSERTIONS, (int) loadTest.getMaxAssertionErrors());
dialog.setBooleanValue(SettingsForm.CANCEL_RUNNING, loadTest.getCancelOnReachedLimit());
dialog.setIntValue(SettingsForm.STRATEGY_INTERVAL, (int) loadTest.getStrategyInterval());
dialog.setBooleanValue(SettingsForm.CANCEL_EXCESSIVE, loadTest.getCancelExcessiveThreads());
dialog.setBooleanValue(SettingsForm.TESTSTEP_STATISTICS, loadTest.getUpdateStatisticsPerTestStep());
Settings settings = loadTest.getSettings();
dialog.setBooleanValue(SettingsForm.INCLUDE_REQUEST,
settings.getBoolean(HttpSettings.INCLUDE_REQUEST_IN_TIME_TAKEN));
dialog.setBooleanValue(SettingsForm.INCLUDE_RESPONSE,
settings.getBoolean(HttpSettings.INCLUDE_RESPONSE_IN_TIME_TAKEN));
dialog.setBooleanValue(SettingsForm.CLOSE_CONNECTIONS, settings.getBoolean(HttpSettings.CLOSE_CONNECTIONS));
dialog.setValue(LogForm.LOG_FOLDER, loadTest.getStatisticsLogFolder());
dialog.setIntValue(LogForm.LOG_INTERVAL, (int) loadTest.getStatisticsLogInterval());
dialog.setBooleanValue(LogForm.LOG_ON_THREADCOUNT_CHANGE, loadTest.getLogStatisticsOnThreadChange());
if (dialog.show() && !loadTest.isRunning()) {
try {
loadTest.setStartDelay(dialog.getIntValue(SettingsForm.THREAD_STARTUP_DELAY, loadTest.getStartDelay()));
loadTest.setResetStatisticsOnThreadCountChange(dialog.getBooleanValue(SettingsForm.RESET_STATISTICS));
loadTest.setCalculateTPSOnTimePassed(dialog.getBooleanValue(SettingsForm.CALC_TPS));
loadTest.setSampleInterval(dialog.getIntValue(SettingsForm.SAMPLE_INTERVAL,
(int) loadTest.getSampleInterval()));
loadTest.setHistoryLimit(dialog.getBooleanValue(SettingsForm.DISABLE_HISTORY) ? 0 : -1);
loadTest.setMaxAssertionErrors(dialog.getIntValue(SettingsForm.MAX_ASSERTIONS, 1000));
loadTest.setCancelOnReachedLimit(dialog.getBooleanValue(SettingsForm.CANCEL_RUNNING));
loadTest.setStrategyInterval(dialog.getIntValue(SettingsForm.STRATEGY_INTERVAL,
WsdlLoadTest.DEFAULT_STRATEGY_INTERVAL));
loadTest.setCancelExcessiveThreads(dialog.getBooleanValue(SettingsForm.CANCEL_EXCESSIVE));
loadTest.setUpdateStatisticsPerTestStep(dialog.getBooleanValue(SettingsForm.TESTSTEP_STATISTICS));
settings.setBoolean(HttpSettings.INCLUDE_REQUEST_IN_TIME_TAKEN,
dialog.getBooleanValue(SettingsForm.INCLUDE_REQUEST));
settings.setBoolean(HttpSettings.INCLUDE_RESPONSE_IN_TIME_TAKEN,
dialog.getBooleanValue(SettingsForm.INCLUDE_RESPONSE));
settings.setBoolean(HttpSettings.CLOSE_CONNECTIONS,
dialog.getBooleanValue(SettingsForm.CLOSE_CONNECTIONS));
loadTest.setLogStatisticsOnThreadChange(dialog.getBooleanValue(LogForm.LOG_ON_THREADCOUNT_CHANGE));
loadTest.setStatisticsLogFolder(dialog.getValue(LogForm.LOG_FOLDER));
loadTest.setStatisticsLogInterval(dialog.getIntValue(LogForm.LOG_INTERVAL,
(int) loadTest.getStatisticsLogInterval()));
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
}
private void buildDialog() {
dialog = ADialogBuilder.buildTabbedDialog(WizardForm.class, null);
dialog.getFormField(SettingsForm.DISABLE_HISTORY).addFormFieldListener(new XFormFieldListener() {
public void valueChanged(XFormField sourceField, String newValue, String oldValue) {
dialog.getFormField(SettingsForm.SAMPLE_INTERVAL).setEnabled(!Boolean.parseBoolean(newValue));
}
});
}
@AForm(description = "Set options for this LoadTest", name = "LoadTest Options", helpUrl = HelpUrls.LOADTESTOPTIONS_HELP_URL, icon = UISupport.TOOL_ICON_PATH)
private interface WizardForm {
@APage(name = "Settings")
public final static SettingsForm INPUT = null;
@APage(name = "Statistics Log")
public final static LogForm LogForm = null;
}
@AForm(name = "LoadTest Options", description = "", helpUrl = HelpUrls.LOADTESTOPTIONS_HELP_URL, icon = UISupport.OPTIONS_ICON_PATH)
private interface SettingsForm {
@AField(name = "Thread Startup Delay", description = "The delay before starting a thread in ms", type = AFieldType.INT)
public final static String THREAD_STARTUP_DELAY = "Thread Startup Delay";
@AField(name = "Reset Statistics", description = "when the number of threads changes", type = AFieldType.BOOLEAN)
public final static String RESET_STATISTICS = "Reset Statistics";
@AField(name = "Calculate TPS/BPS", description = "based on actual time passed", type = AFieldType.BOOLEAN)
public final static String CALC_TPS = "Calculate TPS/BPS";
@AField(name = "TestStep Statistics", description = "update statistics every TestStep", type = AFieldType.BOOLEAN)
public final static String TESTSTEP_STATISTICS = "TestStep Statistics";
@AField(name = "Include Request Write", description = "in calculated time", type = AFieldType.BOOLEAN)
public final static String INCLUDE_REQUEST = "Include Request Write";
@AField(name = "Include Response Read", description = "in calculated time", type = AFieldType.BOOLEAN)
public final static String INCLUDE_RESPONSE = "Include Response Read";
@AField(name = "Close Connections", description = "between each request", type = AFieldType.BOOLEAN)
public final static String CLOSE_CONNECTIONS = "Close Connections";
@AField(name = "Sample Interval", description = "statistics sample interval in milliseconds", type = AFieldType.INT)
public final static String SAMPLE_INTERVAL = "Sample Interval";
@AField(name = "Disable History", description = "to preserve memory (will disable diagrams)", type = AFieldType.BOOLEAN)
public final static String DISABLE_HISTORY = "Disable History";
@AField(name = "Max Assertions in Log", description = "the maximum number of assertion errors to keep in log (to preserve memory)", type = AFieldType.INT)
public final static String MAX_ASSERTIONS = "Max Assertions in Log";
@AField(name = "Cancel Running", description = "Cancel running TestCases when Limit has been reached", type = AFieldType.BOOLEAN)
public final static String CANCEL_RUNNING = "Cancel Running";
@AField(name = "Cancel Excessive", description = "Cancel excessive threads when ThreadCount decreases", type = AFieldType.BOOLEAN)
public final static String CANCEL_EXCESSIVE = "Cancel Excessive";
@AField(name = "Strategy Interval", description = "LoadTest Strategy application interval in milliseconds", type = AFieldType.INT)
public final static String STRATEGY_INTERVAL = "Strategy Interval";
}
@AForm(name = "Logging", description = "", helpUrl = HelpUrls.LOADTESTOPTIONS_HELP_URL, icon = UISupport.OPTIONS_ICON_PATH)
private interface LogForm {
@AField(name = "Log Folder", description = "The folder in which to create log files", type = AFieldType.FOLDER)
public final static String LOG_FOLDER = "Log Folder";
@AField(name = "Log Interval", description = "The log interval in milliseconds, 0 only logs at end", type = AFieldType.INT)
public final static String LOG_INTERVAL = "Log Interval";
@AField(name = "Log on ThreadCount change", description = "Log every time the number of threads changes", type = AFieldType.BOOLEAN)
public final static String LOG_ON_THREADCOUNT_CHANGE = "Log on ThreadCount change";
}
}