/*
* 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.security.panels;
import com.eviware.soapui.SoapUI;
import com.eviware.soapui.analytics.Analytics;
import com.eviware.soapui.analytics.SoapUIActions;
import com.eviware.soapui.impl.support.actions.ShowOnlineHelpAction;
import com.eviware.soapui.impl.wsdl.panels.support.MockSecurityTestRunner;
import com.eviware.soapui.impl.wsdl.panels.testcase.actions.SetCredentialsAction;
import com.eviware.soapui.impl.wsdl.panels.testcase.actions.SetEndpointAction;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.AbstractGroovyEditorModel;
import com.eviware.soapui.impl.wsdl.panels.teststeps.support.PropertyHolderTable;
import com.eviware.soapui.impl.wsdl.support.HelpUrls;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
import com.eviware.soapui.model.ModelItem;
import com.eviware.soapui.model.security.SecurityScan;
import com.eviware.soapui.model.testsuite.TestCaseRunContext;
import com.eviware.soapui.model.testsuite.TestCaseRunner;
import com.eviware.soapui.model.testsuite.TestRunner.Status;
import com.eviware.soapui.model.testsuite.TestStepResult;
import com.eviware.soapui.model.testsuite.TestStepResult.TestStepStatus;
import com.eviware.soapui.security.SecurityTest;
import com.eviware.soapui.security.SecurityTestRunContext;
import com.eviware.soapui.security.SecurityTestRunner;
import com.eviware.soapui.security.SecurityTestRunnerImpl;
import com.eviware.soapui.security.actions.SecurityTestOptionsAction;
import com.eviware.soapui.security.log.JFunctionalTestRunLog;
import com.eviware.soapui.security.log.JSecurityTestRunLog;
import com.eviware.soapui.security.result.SecurityResult.ResultStatus;
import com.eviware.soapui.security.result.SecurityScanRequestResult;
import com.eviware.soapui.security.result.SecurityScanResult;
import com.eviware.soapui.security.result.SecurityTestStepResult;
import com.eviware.soapui.security.support.ProgressBarSecurityTestAdapter;
import com.eviware.soapui.security.support.SecurityTestRunListenerAdapter;
import com.eviware.soapui.settings.UISettings;
import com.eviware.soapui.support.DateUtil;
import com.eviware.soapui.support.DocumentListenerAdapter;
import com.eviware.soapui.support.StringUtils;
import com.eviware.soapui.support.UISupport;
import com.eviware.soapui.support.action.swing.SwingActionDelegate;
import com.eviware.soapui.support.components.GroovyEditorComponent;
import com.eviware.soapui.support.components.GroovyEditorInspector;
import com.eviware.soapui.support.components.JComponentInspector;
import com.eviware.soapui.support.components.JFocusableComponentInspector;
import com.eviware.soapui.support.components.JInspectorPanel;
import com.eviware.soapui.support.components.JInspectorPanelFactory;
import com.eviware.soapui.support.components.JUndoableTextArea;
import com.eviware.soapui.support.components.JXToolBar;
import com.eviware.soapui.support.dnd.JListDragAndDropable;
import com.eviware.soapui.support.swing.ComponentBag;
import com.eviware.soapui.support.types.StringToObjectMap;
import com.eviware.soapui.ui.support.KeySensitiveModelItemDesktopPanel;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.ListModel;
import javax.swing.SwingConstants;
import javax.swing.text.Document;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.util.Date;
import java.util.List;
/**
* SecurityTest desktop panel
* <p/>
* <p/>
* this is just first rough version created by copy-pasting from
* WsdlTestCaseDesktoppanel therefore a lot of variables have not been renamed
* yet, and a lot of code my be unused, or missing
*
* @author dragica.soldo
*/
@SuppressWarnings("serial")
public class SecurityTestDesktopPanel extends KeySensitiveModelItemDesktopPanel<SecurityTest> {
private JSecurityTestTestStepList testStepList;
private JProgressBar progressBar;
private JButton runButton;
private JButton cancelButton;
private SecurityTestRunner runner;
private JButton setEndpointButton;
private JButton setCredentialsButton;
private JButton optionsButton;
private JSecurityTestRunLog securityTestLog;
private JFunctionalTestRunLog functionalTestLog;
// private JToggleButton loopButton;
private ProgressBarSecurityTestAdapter progressBarAdapter;
private ComponentBag stateDependantComponents = new ComponentBag();
private boolean canceled;
private JTextArea descriptionArea;
private PropertyHolderTable propertiesTable;
private GroovyEditorComponent tearDownGroovyEditor;
private GroovyEditorComponent setupGroovyEditor;
private JInspectorPanel testStepListInspectorPanel;
private JInspectorPanel inspectorPanel;
private SecurityTestRunner lastRunner;
private SecurityTest securityTest;
private JXToolBar toolbar;
private InternalSecurityTestRunListener securityTestRunListener = new InternalSecurityTestRunListener();
private JLabel cntLabel;
private JComponentInspector<?> securityLogInspector;
private JComponentInspector<?> functionalLogInspector;
private ResultStatus securityStatus;
private ResultStatus functionalStatus;
private boolean startStepLogEntryAdded;
public SecurityTestDesktopPanel(SecurityTest securityTest) {
super(securityTest);
buildUI();
setPreferredSize(new Dimension(400, 550));
this.securityTest = securityTest;
securityTest.addSecurityTestRunListener(securityTestRunListener);
progressBarAdapter = new ProgressBarSecurityTestAdapter(progressBar, securityTest, cntLabel);
}
protected JSecurityTestTestStepList getTestStepList() {
return testStepList;
}
protected JSecurityTestRunLog getSecurityTestLog() {
return securityTestLog;
}
protected void setTestStepList(JSecurityTestTestStepList testStepList) {
this.testStepList = testStepList;
}
private void buildUI() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(buildToolbar(), BorderLayout.PAGE_START);
panel.add(buildRunnerBar(), BorderLayout.CENTER);
add(panel, BorderLayout.NORTH);
JComponent securityLog = buildSecurityLog();
inspectorPanel = JInspectorPanelFactory.build(buildContent());
securityLogInspector = new JComponentInspector<JComponent>(securityLog, "Security Log",
"Security Execution Log", true);
inspectorPanel.addInspector(securityLogInspector);
JComponent functionalLog = buildFunctionalLog();
functionalLogInspector = new JComponentInspector<JComponent>(functionalLog, "TestCase Log",
"Functional Execution Log", true);
inspectorPanel.addInspector(functionalLogInspector);
inspectorPanel.setDefaultDividerLocation(0.7F);
inspectorPanel.setCurrentInspector("Security Log");
if (StringUtils.hasContent(getModelItem().getDescription())
&& getModelItem().getSettings().getBoolean(UISettings.SHOW_DESCRIPTIONS)) {
testStepListInspectorPanel.setCurrentInspector("Description");
}
initializeStatusIcons();
add(inspectorPanel.getComponent(), BorderLayout.CENTER);
}
private void initializeStatusIcons() {
securityStatus = ResultStatus.UNKNOWN;
updateStatusIcon(securityStatus, securityLogInspector);
functionalStatus = ResultStatus.UNKNOWN;
updateStatusIcon(functionalStatus, functionalLogInspector);
}
private void updateStatusIcon(ResultStatus status, JComponentInspector<?> logInspector) {
switch (status) {
case FAILED: {
logInspector.setIcon(UISupport.createImageIcon("/failed_securitytest.gif"));
// inspectorPanel.activate( logInspector );
break;
}
case UNKNOWN: {
logInspector.setIcon(UISupport.createImageIcon("/unknown_securitytest.gif"));
break;
}
case OK: {
logInspector.setIcon(UISupport.createImageIcon("/valid_securitytest.gif"));
// inspectorPanel.deactivate();
break;
}
}
}
private Component buildRunnerBar() {
progressBar = new JProgressBar(0, getModelItem().getSecurityScanCount());
JPanel progressPanel = new JPanel(new BorderLayout(10, 0));
progressBar.setValue(0);
progressBar.setStringPainted(true);
progressBar.setString("");
progressBar.setIndeterminate(false);
progressBar.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 1, Color.LIGHT_GRAY));
progressPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
progressPanel.add(progressBar);
progressBar.setMinimumSize(new Dimension(0, 200));
progressBar.setBackground(Color.WHITE);
cntLabel = new JLabel("");
cntLabel.setForeground(Color.white);
cntLabel.setPreferredSize(new Dimension(50, 18));
cntLabel.setHorizontalTextPosition(SwingConstants.CENTER);
cntLabel.setHorizontalAlignment(SwingConstants.CENTER);
cntLabel.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
progressPanel.add(cntLabel, BorderLayout.EAST);
return progressPanel;
}
private JComponent buildSecurityLog() {
securityTestLog = new JSecurityTestRunLog(getModelItem());
stateDependantComponents.add(securityTestLog);
return securityTestLog;
}
private JComponent buildFunctionalLog() {
functionalTestLog = new JFunctionalTestRunLog(getModelItem());
stateDependantComponents.add(functionalTestLog);
return functionalTestLog;
}
private JComponent buildContent() {
JTabbedPane tabs = new JTabbedPane(JTabbedPane.TOP);
testStepListInspectorPanel = JInspectorPanelFactory.build(buildTestStepList(), SwingConstants.BOTTOM);
tabs.addTab("TestSteps", testStepListInspectorPanel.getComponent());
addTabs(tabs, testStepListInspectorPanel);
tabs.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
return UISupport.createTabPanel(tabs, true);
}
protected JComponent buildTestStepList() {
testStepList = new JSecurityTestTestStepList(getModelItem(), securityTestLog);
return testStepList;
}
protected void addTabs(JTabbedPane tabs, JInspectorPanel inspectorPanel) {
inspectorPanel.addInspector(new JFocusableComponentInspector<JPanel>(buildDescriptionPanel(), descriptionArea,
"Description", "SecurityTest Description", true));
inspectorPanel.addInspector(new JComponentInspector<JComponent>(buildPropertiesPanel(), "Properties",
"SecurityTest level properties", true));
inspectorPanel.addInspector(new GroovyEditorInspector(buildSetupScriptPanel(), "Setup Script",
"Script to run before tunning a SecurityTest"));
inspectorPanel.addInspector(new GroovyEditorInspector(buildTearDownScriptPanel(), "TearDown Script",
"Script to run after a SecurityTest Run"));
}
protected GroovyEditorComponent buildTearDownScriptPanel() {
tearDownGroovyEditor = new GroovyEditorComponent(new TearDownScriptGroovyEditorModel(), null);
return tearDownGroovyEditor;
}
protected GroovyEditorComponent buildSetupScriptPanel() {
setupGroovyEditor = new GroovyEditorComponent(new SetupScriptGroovyEditorModel(), null);
return setupGroovyEditor;
}
protected JComponent buildPropertiesPanel() {
JPanel panel = new JPanel(new BorderLayout());
propertiesTable = buildPropertiesTable();
panel.add(propertiesTable, BorderLayout.CENTER);
return panel;
}
protected PropertyHolderTable buildPropertiesTable() {
return new PropertyHolderTable(getModelItem());
}
private JPanel buildDescriptionPanel() {
JPanel panel = new JPanel(new BorderLayout());
descriptionArea = new JUndoableTextArea(getModelItem().getDescription());
descriptionArea.getDocument().addDocumentListener(new DocumentListenerAdapter() {
public void update(Document document) {
getModelItem().setDescription(descriptionArea.getText());
}
});
panel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
panel.add(new JScrollPane(descriptionArea), BorderLayout.CENTER);
UISupport.addTitledBorder(panel, "SecurityTest Description");
return panel;
}
protected Component buildToolbar() {
toolbar = UISupport.createToolbar();
runButton = UISupport.createToolbarButton(new RunSecurityTestAction());
optionsButton = UISupport.createToolbarButton(SwingActionDelegate.createDelegate(
SecurityTestOptionsAction.SOAPUI_ACTION_ID, getModelItem(), null, "/preferences.png"));
optionsButton.setText(null);
cancelButton = UISupport.createToolbarButton(new CancelRunSecuritytestAction(), false);
// loopButton = new JToggleButton( UISupport.createImageIcon( "/loop.gif"
// ) );
// loopButton.setPreferredSize( UISupport.getPreferredButtonSize() );
// loopButton.setToolTipText( "Loop TestCase continuously" );
setCredentialsButton = UISupport.createToolbarButton(new SetCredentialsAction(getModelItem().getTestCase()));
setEndpointButton = UISupport.createToolbarButton(new SetEndpointAction(getModelItem().getTestCase()));
stateDependantComponents.add(runButton);
stateDependantComponents.add(optionsButton);
stateDependantComponents.add(cancelButton);
stateDependantComponents.add(setCredentialsButton);
stateDependantComponents.add(setEndpointButton);
addToolbarActions(toolbar);
toolbar.addSeparator();
toolbar.add(Box.createHorizontalGlue());
toolbar.add(UISupport.createToolbarButton(new ShowOnlineHelpAction(HelpUrls.SECURITYTESTEDITOR_HELP_URL)));
return toolbar;
}
protected JButton getSetEndpointButton() {
return setEndpointButton;
}
public JButton getOptionsButton() {
return optionsButton;
}
public void setOptionsButton(JButton optionsButton) {
this.optionsButton = optionsButton;
}
protected void addToolbarActions(JToolBar toolbar) {
toolbar.add(runButton);
toolbar.add(cancelButton);
// toolbar.add( loopButton );
toolbar.addSeparator();
toolbar.add(setCredentialsButton);
toolbar.add(setEndpointButton);
toolbar.addSeparator();
toolbar.add(optionsButton);
}
protected void runSecurityTest() {
initializeStatusIcons();
if (canceled) {
// make sure state is correct
runButton.setEnabled(true);
cancelButton.setEnabled(false);
return;
}
runButton.setEnabled(false);
cancelButton.setEnabled(true);
StringToObjectMap properties = new StringToObjectMap();
// properties.put( "loopButton", loopButton );
properties.put(TestCaseRunContext.INTERACTIVE, Boolean.TRUE);
lastRunner = null;
runner = getModelItem().run(properties, true);
}
public class RunSecurityTestAction extends AbstractAction {
public RunSecurityTestAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/run.png"));
putValue(Action.SHORT_DESCRIPTION, "Runs this securitytest");
}
public void actionPerformed(ActionEvent e) {
canceled = false;
// shouldRun is indicator is there any security scan that can be run
// meaning security scan have at least one scan and it is not disabled.
boolean shouldRun = false;
for (List<SecurityScan> scanList : securityTest.getSecurityScansMap().values()) {
for (SecurityScan scan : scanList) {
if (!scan.isDisabled()) {
shouldRun = true;
}
}
}
if (shouldRun) {
Analytics.trackAction(SoapUIActions.RUN_SECURITY_TEST.getActionName());
runSecurityTest();
} else {
UISupport.showInfoMessage("No Security Scans available to run.", "Security Test Warning");
}
}
}
public class CancelRunSecuritytestAction extends AbstractAction {
public CancelRunSecuritytestAction() {
putValue(Action.SMALL_ICON, UISupport.createImageIcon("/stop.png"));
putValue(Action.SHORT_DESCRIPTION, "Stops running this securitytest");
}
public void actionPerformed(ActionEvent e) {
if (runner != null) {
runner.cancel("canceled in UI");
}
canceled = true;
}
}
@Override
protected boolean release() {
testStepList.release();
setupGroovyEditor.release();
tearDownGroovyEditor.release();
functionalTestLog.release();
return super.release();
}
public boolean onClose(boolean canCancel) {
if (canCancel) {
if (runner != null && runner.getStatus() == TestCaseRunner.Status.RUNNING) {
Boolean retval = UISupport.confirmOrCancel("Cancel running SecurityTest?", "Cancel Run");
if (retval == null) {
return false;
}
if (retval.booleanValue()) {
if (runner != null) {
runner.cancel(null);
}
}
}
} else {
if (runner != null && runner.getStatus() == TestCaseRunner.Status.RUNNING) {
if (runner != null) {
runner.cancel(null);
}
}
}
getModelItem().removeSecurityTestRunListener(securityTestRunListener);
progressBarAdapter.release();
propertiesTable.release();
inspectorPanel.release();
setupGroovyEditor.getEditor().release();
tearDownGroovyEditor.getEditor().release();
securityTestLog.release();
lastRunner = null;
return release();
}
protected void beforeRun() {
}
protected void afterRun() {
runButton.setEnabled(true);
cancelButton.setEnabled(false);
testStepList.setEnabled(true);
}
private class SetupScriptGroovyEditorModel extends AbstractGroovyEditorModel {
@Override
public Action createRunAction() {
return new AbstractAction() {
public void actionPerformed(ActionEvent e) {
MockSecurityTestRunner securityTestRunner = new MockSecurityTestRunner(SecurityTestDesktopPanel.this
.getModelItem());
try {
SecurityTestDesktopPanel.this.getModelItem().runStartupScript(
(SecurityTestRunContext) securityTestRunner.getRunContext(), securityTestRunner);
} catch (Exception e1) {
UISupport.showErrorMessage(e1);
}
}
};
}
public SetupScriptGroovyEditorModel() {
super(new String[]{"log", "testCase", "context", "testRunner"}, SecurityTestDesktopPanel.this
.getModelItem(), "Setup");
}
public String getScript() {
return SecurityTestDesktopPanel.this.getModelItem().getStartupScript();
}
public void setScript(String text) {
SecurityTestDesktopPanel.this.getModelItem().setStartupScript(text);
}
}
private class TearDownScriptGroovyEditorModel extends AbstractGroovyEditorModel {
@Override
public Action createRunAction() {
return new AbstractAction() {
public void actionPerformed(ActionEvent e) {
try {
MockSecurityTestRunner securityTestRunner = new MockSecurityTestRunner(SecurityTestDesktopPanel.this
.getModelItem());
SecurityTestDesktopPanel.this.getModelItem().runTearDownScript(
(SecurityTestRunContext) securityTestRunner.getRunContext(), securityTestRunner);
} catch (Exception e1) {
UISupport.showErrorMessage(e1);
}
}
};
}
public TearDownScriptGroovyEditorModel() {
super(new String[]{"log", "securityTest", "context", "testRunner"}, SecurityTestDesktopPanel.this
.getModelItem(), "TearDown");
}
public String getScript() {
return SecurityTestDesktopPanel.this.getModelItem().getTearDownScript();
}
public void setScript(String text) {
SecurityTestDesktopPanel.this.getModelItem().setTearDownScript(text);
}
}
public static class ModelItemListDragAndDropable extends JListDragAndDropable<JList> {
public ModelItemListDragAndDropable(JList list, WsdlTestCase testCase) {
super(list, testCase);
}
@Override
public ModelItem getModelItemAtRow(int row) {
return (ModelItem) getList().getModel().getElementAt(row);
}
@Override
public int getModelItemRow(ModelItem modelItem) {
ListModel model = getList().getModel();
for (int c = 0; c < model.getSize(); c++) {
if (model.getElementAt(c) == modelItem) {
return c;
}
}
return -1;
}
public Component getRenderer(ModelItem modelItem) {
return getList().getCellRenderer().getListCellRendererComponent(getList(), modelItem,
getModelItemRow(modelItem), true, true);
}
@Override
public void setDragInfo(String dropInfo) {
super.setDragInfo(dropInfo == null || dropInfo.length() == 0 ? null : dropInfo);
}
}
public SecurityTestRunner getSecurityTestRunner() {
return runner == null ? lastRunner : runner;
}
public boolean dependsOn(ModelItem modelItem) {
SecurityTest securityTest = getModelItem();
return modelItem == securityTest || modelItem == securityTest.getTestCase()
|| modelItem == securityTest.getTestCase().getTestSuite()
|| modelItem == securityTest.getTestCase().getTestSuite().getProject();
}
protected SecurityTest getSecurityTest() {
return securityTest;
}
public class InternalSecurityTestRunListener extends SecurityTestRunListenerAdapter {
public InternalSecurityTestRunListener() {
}
public void beforeRun(TestCaseRunner testRunner, SecurityTestRunContext runContext) {
securityTestLog.clear();
functionalTestLog.clear();
runButton.setEnabled(false);
cancelButton.setEnabled(true);
testStepList.setEnabled(false);
// testStepList.setSelectedIndex( -1 );
String start = DateUtil.formatExtraFull(new Date());
securityTestLog.addText("SecurityTest started at " + start);
functionalTestLog.addText("Test started at " + start);
SecurityTestDesktopPanel.this.beforeRun();
progressBar.setValue(0);
progressBar.setString("");
if (runner == null) {
runner = (SecurityTestRunnerImpl) testRunner;
}
securityStatus = ResultStatus.UNKNOWN;
}
public void afterRun(TestCaseRunner testRunner, SecurityTestRunContext runContext) {
SecurityTestRunnerImpl securityRunner = (SecurityTestRunnerImpl) testRunner;
if (testRunner.getStatus() == SecurityTestRunner.Status.CANCELED) {
securityTestLog.addText("SecurityTest canceled [" + testRunner.getReason() + "], time taken = "
+ securityRunner.getTimeTaken());
functionalTestLog.addText("FunctionalTest canceled [" + testRunner.getReason() + "], time taken = "
+ securityRunner.getFunctionalTimeTaken());
} else if (testRunner.getStatus() == SecurityTestRunner.Status.FAILED) {
String msg = securityRunner.getReason();
if (securityRunner.getError() != null) {
if (msg != null) {
msg += ":";
}
msg += securityRunner.getError();
}
securityTestLog
.addText("SecurityTest failed [" + msg + "], time taken = " + securityRunner.getTimeTaken());
if (functionalStatus == ResultStatus.OK) {
functionalTestLog.addText("FunctionalTest finished with status [" + functionalStatus
+ "], time taken = " + securityRunner.getFunctionalTimeTaken());
} else if (functionalStatus == ResultStatus.FAILED) {
functionalTestLog.addText("FunctionalTest failed [Failing due to failed test step], time taken = "
+ securityRunner.getFunctionalTimeTaken());
}
} else {
securityTestLog.addText("SecurityTest finished with status [" + testRunner.getStatus()
+ "], time taken = " + securityRunner.getTimeTaken());
if (functionalStatus == ResultStatus.OK) {
functionalTestLog.addText("FunctionalTest finished with status [" + functionalStatus
+ "], time taken = " + securityRunner.getFunctionalTimeTaken());
} else if (functionalStatus == ResultStatus.FAILED) {
functionalTestLog.addText("FunctionalTest failed [Failing due to failed test step], time taken = "
+ securityRunner.getFunctionalTimeTaken());
}
}
lastRunner = runner;
runner = null;
// JToggleButton loopButton = ( JToggleButton )runContext.getProperty(
// "loopButton" );
// if( loopButton != null && loopButton.isSelected()
// && testRunner.getStatus() == SecurityTestRunner.Status.FINISHED )
// {
// SwingUtilities.invokeLater( new Runnable()
// {
// public void run()
// {
// runSecurityTest();
// }
// } );
// }
// else
// {
SecurityTestDesktopPanel.this.afterRun();
// }
if (testRunner.getStatus() == Status.FAILED) {
securityStatus = ResultStatus.FAILED;
} else if (testRunner.getStatus() == Status.FINISHED || testRunner.getStatus() == Status.CANCELED) {
if (securityStatus != ResultStatus.FAILED) {
securityStatus = ResultStatus.OK;
}
}
updateStatusIcon(securityStatus, securityLogInspector);
updateStatusIcon(functionalStatus, functionalLogInspector);
}
@Override
public void beforeSecurityScan(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityScan securityCheck) {
securityTestLog.addSecurityScanResult(securityCheck);
}
@Override
public void afterSecurityScan(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityScanResult securityCheckResult) {
securityTestLog.updateSecurityScanResult(securityCheckResult);
if (securityCheckResult.getStatus() == ResultStatus.CANCELED
&& securityCheckResult.isHasRequestsWithWarnings()) {
securityStatus = ResultStatus.FAILED;
} else if (securityCheckResult.getStatus() == ResultStatus.FAILED) {
securityStatus = ResultStatus.FAILED;
} else if (securityCheckResult.getStatus() == ResultStatus.OK) {
if (securityStatus != ResultStatus.FAILED) {
securityStatus = ResultStatus.OK;
}
}
}
@Override
public void afterOriginalStep(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityTestStepResult result) {
functionalTestLog.addSecurityTestFunctionalStepResult(result.getOriginalTestStepResult());
if (result.getOriginalTestStepResult().getStatus() == TestStepStatus.FAILED) {
functionalStatus = ResultStatus.FAILED;
} else if (result.getOriginalTestStepResult().getStatus() == TestStepStatus.OK
&& functionalStatus != ResultStatus.FAILED) {
functionalStatus = ResultStatus.OK;
}
}
@Override
public void afterSecurityScanRequest(TestCaseRunner testRunner, SecurityTestRunContext runContext,
SecurityScanRequestResult securityCheckReqResult) {
securityTestLog.addSecurityScanRequestResult(securityCheckReqResult);
}
@Override
public void beforeStep(TestCaseRunner testRunner, SecurityTestRunContext runContext,
TestStepResult testStepResult) {
startStepLogEntryAdded = securityTestLog.addSecurityTestStepResult(testStepResult.getTestStep());
}
@Override
public void afterStep(TestCaseRunner testRunner, SecurityTestRunContext runContext, SecurityTestStepResult result) {
boolean hasChecksToProcess = securityTest.getTestStepSecurityScansCount(result.getTestStep().getId()) > 0;
securityTestLog.updateSecurityTestStepResult(result, hasChecksToProcess, startStepLogEntryAdded);
if (result.getStatus() == ResultStatus.FAILED) {
securityStatus = ResultStatus.FAILED;
} else if (result.getStatus() == ResultStatus.OK) {
if (securityStatus != ResultStatus.FAILED) {
securityStatus = ResultStatus.OK;
}
}
}
}
@Override
protected void renameModelItem() {
SoapUI.getActionRegistry().performAction("RenameSecurityTestAction", getModelItem(), null);
}
@Override
protected void cloneModelItem() {
SoapUI.getActionRegistry().performAction("CloneSecurityTestAction", getModelItem(), null);
}
}