View Javadoc

1   /*
2    * soapUI, copyright (C) 2004-2010 eviware.com
3    *
4    * soapUI is free software; you can redistribute it and/or modify it under the
5    * terms of version 2.1 of the GNU Lesser General Public License as published by
6    * the Free Software Foundation.
7    *
8    * soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
9    * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10   * See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.impl.wsdl.teststeps.assertions.soap;
14  
15  import org.apache.xmlbeans.XmlException;
16  import org.apache.xmlbeans.XmlObject;
17  
18  import com.eviware.soapui.SoapUI;
19  import com.eviware.soapui.config.TestAssertionConfig;
20  import com.eviware.soapui.impl.wsdl.WsdlRequest;
21  import com.eviware.soapui.impl.wsdl.panels.teststeps.support.WsaAssertionConfiguration;
22  import com.eviware.soapui.impl.wsdl.submit.WsdlMessageExchange;
23  import com.eviware.soapui.impl.wsdl.support.HelpUrls;
24  import com.eviware.soapui.impl.wsdl.support.wsa.WsaValidator;
25  import com.eviware.soapui.impl.wsdl.teststeps.WsdlMessageAssertion;
26  import com.eviware.soapui.impl.wsdl.teststeps.assertions.AbstractTestAssertionFactory;
27  import com.eviware.soapui.model.iface.MessageExchange;
28  import com.eviware.soapui.model.iface.SubmitContext;
29  import com.eviware.soapui.model.testsuite.Assertable;
30  import com.eviware.soapui.model.testsuite.AssertionError;
31  import com.eviware.soapui.model.testsuite.AssertionException;
32  import com.eviware.soapui.model.testsuite.RequestAssertion;
33  import com.eviware.soapui.model.testsuite.ResponseAssertion;
34  import com.eviware.soapui.support.UISupport;
35  import com.eviware.soapui.support.types.StringToStringMap;
36  import com.eviware.soapui.support.xml.XmlObjectConfigurationBuilder;
37  import com.eviware.soapui.support.xml.XmlObjectConfigurationReader;
38  import com.eviware.x.form.XForm;
39  import com.eviware.x.form.XFormDialog;
40  import com.eviware.x.form.XFormDialogBuilder;
41  import com.eviware.x.form.XFormFactory;
42  
43  /***
44   * Assertion for verifying that WS-Addressing processing was ok
45   * 
46   * @author dragica.soldo
47   */
48  
49  public class WSAResponseAssertion extends WsdlMessageAssertion implements RequestAssertion, ResponseAssertion
50  {
51  	public static final String ID = "WS-A Response Assertion";
52  	public static final String LABEL = "WS-Addressing Response";
53  	private WsaAssertionConfiguration wsaAssertionConfiguration;
54  	private boolean assertWsaAction;
55  	private boolean assertWsaTo;
56  	// private boolean assertWsaReplyTo;
57  	// private boolean assertWsaMessageId;
58  	private boolean assertWsaRelatesTo;
59  	private boolean assertReplyToRefParams;
60  	private boolean assertFaultToRefParams;
61  	private XFormDialog dialog;
62  	private static final String ASSERT_ACTION = "wsa:Action";
63  	private static final String ASSERT_TO = "wsa:To";
64  	// private static final String ASSERT_REPLY_TO = "wsa:ReplyTo";
65  	// private static final String ASSERT_MESSAGE_ID = "wsa:MessageId";
66  	private static final String ASSERT_RELATES_TO = "wsa:RelatesTo";
67  	private static final String ASSERT_REPLY_TO_REF_PARAMS = "wsa:ReplyTo ReferenceParameters";
68  	private static final String ASSERT_FAULT_TO_REF_PARAMS = "wsa:FaultTo ReferenceParameters";
69  
70  	/***
71  	 * Constructor for our assertion.
72  	 * 
73  	 * @param assertionConfig
74  	 * @param modelItem
75  	 */
76  	public WSAResponseAssertion( TestAssertionConfig assertionConfig, Assertable modelItem )
77  	{
78  		super( assertionConfig, modelItem, false, true, false, true );
79  
80  		XmlObjectConfigurationReader reader = new XmlObjectConfigurationReader( getConfiguration() );
81  		assertWsaAction = reader.readBoolean( "asertWsaAction", true );
82  		assertWsaTo = reader.readBoolean( "asertWsaTo", false );
83  		// assertWsaReplyTo = reader.readBoolean("assertWsaReplyTo", false);
84  		// assertWsaMessageId = reader.readBoolean("assertWsaMessageId", false);
85  		assertWsaRelatesTo = reader.readBoolean( "asertWsaRelatesTo", false );
86  		assertReplyToRefParams = reader.readBoolean( "assertReplyToRefParams", false );
87  		assertFaultToRefParams = reader.readBoolean( "assertFaultToRefParams", false );
88  		wsaAssertionConfiguration = new WsaAssertionConfiguration( assertWsaAction, assertWsaTo, false, false,
89  				assertWsaRelatesTo, assertReplyToRefParams, assertFaultToRefParams );
90  	}
91  
92  	public static class Factory extends AbstractTestAssertionFactory
93  	{
94  		public Factory()
95  		{
96  			super( WSAResponseAssertion.ID, WSAResponseAssertion.LABEL, WSAResponseAssertion.class, WsdlRequest.class );
97  		}
98  
99  		@Override
100 		public Class<? extends WsdlMessageAssertion> getAssertionClassType()
101 		{
102 			return WSAResponseAssertion.class;
103 		}
104 	}
105 
106 	@Override
107 	protected String internalAssertRequest( MessageExchange messageExchange, SubmitContext context )
108 			throws AssertionException
109 	{
110 		// try
111 		// {
112 		// new WsaValidator( (WsdlMessageExchange) messageExchange,
113 		// wsaAssertionConfiguration ).validateWsAddressingResponse();
114 		// }
115 		// catch( AssertionException e )
116 		// {
117 		// throw new AssertionException( new AssertionError( e.getMessage() ) );
118 		// }
119 		// catch( XmlException e )
120 		// {
121 		// SoapUI.logError( e );
122 		// throw new AssertionException(
123 		// new AssertionError(
124 		// "There has been some XmlException, ws-a couldn't be validated properly."
125 		// ) );
126 		// }
127 		//
128 		// return "Request WS-Addressing is valid";
129 		return null;
130 	}
131 
132 	@Override
133 	protected String internalAssertResponse( MessageExchange messageExchange, SubmitContext context )
134 			throws AssertionException
135 	{
136 		try
137 		{
138 			new WsaValidator( ( WsdlMessageExchange )messageExchange, wsaAssertionConfiguration )
139 					.validateWsAddressingResponse();
140 		}
141 		catch( AssertionException e )
142 		{
143 			throw new AssertionException( new AssertionError( e.getMessage() ) );
144 		}
145 		catch( XmlException e )
146 		{
147 			SoapUI.logError( e );
148 			throw new AssertionException( new AssertionError(
149 					"There has been some XmlException, WS-A couldn't be validated properly." ) );
150 		}
151 
152 		return "Response WS-Addressing is valid";
153 	}
154 
155 	public boolean configure()
156 	{
157 		if( dialog == null )
158 			buildDialog();
159 
160 		StringToStringMap values = new StringToStringMap();
161 		values.put( ASSERT_ACTION, assertWsaAction );
162 		values.put( ASSERT_TO, assertWsaTo );
163 		// values.put(ASSERT_REPLY_TO, assertWsaReplyTo);
164 		// values.put(ASSERT_MESSAGE_ID, assertWsaMessageId);
165 		values.put( ASSERT_RELATES_TO, assertWsaRelatesTo );
166 		values.put( ASSERT_REPLY_TO_REF_PARAMS, assertReplyToRefParams );
167 		values.put( ASSERT_FAULT_TO_REF_PARAMS, assertFaultToRefParams );
168 
169 		values = dialog.show( values );
170 		if( dialog.getReturnValue() == XFormDialog.OK_OPTION )
171 		{
172 			assertWsaAction = values.getBoolean( ASSERT_ACTION );
173 			assertWsaTo = values.getBoolean( ASSERT_TO );
174 			// assertWsaReplyTo = values.getBoolean(ASSERT_REPLY_TO);
175 			// assertWsaMessageId = values.getBoolean(ASSERT_MESSAGE_ID);
176 			assertWsaRelatesTo = values.getBoolean( ASSERT_RELATES_TO );
177 			assertReplyToRefParams = values.getBoolean( ASSERT_REPLY_TO_REF_PARAMS );
178 			assertFaultToRefParams = values.getBoolean( ASSERT_FAULT_TO_REF_PARAMS );
179 		}
180 
181 		wsaAssertionConfiguration = new WsaAssertionConfiguration( assertWsaAction, assertWsaTo, false, false,
182 				assertWsaRelatesTo, assertReplyToRefParams, assertFaultToRefParams );
183 		setConfiguration( createConfiguration() );
184 		return true;
185 	}
186 
187 	private void buildDialog()
188 	{
189 		XFormDialogBuilder builder = XFormFactory.createDialogBuilder( "WS-A properties to assert" );
190 		XForm mainForm = builder.createForm( "Basic" );
191 		mainForm.addCheckBox( ASSERT_ACTION, "Check if 'wsa:Action' exists and has the right value" );
192 		mainForm.addCheckBox( ASSERT_TO, "Check if 'wsa:To' exists" );
193 		// mainForm.addCheckBox(ASSERT_REPLY_TO, "Check if 'wsa:ReplyTo' exists");
194 		// mainForm.addCheckBox(ASSERT_MESSAGE_ID,
195 		// "Check if 'wsa:MessageId' exists");
196 		mainForm.addCheckBox( ASSERT_RELATES_TO, "Check if 'wsa:RelatesTo' exists and is equal to request MessageID" );
197 		mainForm.addCheckBox( ASSERT_REPLY_TO_REF_PARAMS, "Check if 'wsa:ReplyTo' ReferenceParameters exist" );
198 		mainForm.addCheckBox( ASSERT_FAULT_TO_REF_PARAMS, "Check if 'wsa:FaultTo' ReferenceParameters exist" );
199 
200 		dialog = builder.buildDialog( builder.buildOkCancelHelpActions( HelpUrls.SIMPLE_CONTAINS_HELP_URL ),
201 				"Specify options", UISupport.OPTIONS_ICON );
202 	}
203 
204 	protected XmlObject createConfiguration()
205 	{
206 		XmlObjectConfigurationBuilder builder = new XmlObjectConfigurationBuilder();
207 		builder.add( "asertWsaAction", assertWsaAction );
208 		builder.add( "asertWsaTo", assertWsaTo );
209 		// builder.add("assertWsaReplyTo", assertWsaReplyTo);
210 		// builder.add("assertWsaMessageId", assertWsaMessageId);
211 		builder.add( "asertWsaRelatesTo", assertWsaRelatesTo );
212 		builder.add( "assertReplyToRefParams", assertReplyToRefParams );
213 		builder.add( "assertFaultToRefParams", assertFaultToRefParams );
214 		return builder.finish();
215 	}
216 
217 }