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.panels.teststeps.support.WsaAssertionConfiguration;
21  import com.eviware.soapui.impl.wsdl.submit.WsdlMessageExchange;
22  import com.eviware.soapui.impl.wsdl.support.HelpUrls;
23  import com.eviware.soapui.impl.wsdl.support.wsa.WsaValidator;
24  import com.eviware.soapui.impl.wsdl.teststeps.WsdlMessageAssertion;
25  import com.eviware.soapui.impl.wsdl.teststeps.WsdlMockResponseTestStep;
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 WSARequestAssertion extends WsdlMessageAssertion implements RequestAssertion, ResponseAssertion
50  {
51  	public static final String ID = "WS-A Request Assertion";
52  	public static final String LABEL = "WS-Addressing Request";
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  
67  	// private static final String ASSERT_RELATES_TO = "wsa:RelatesTo";
68  	// private static final String ASSERT_REPLY_TO_REF_PARAMS =
69  	// "wsa:ReplyTo ReferenceParameters";
70  	// private static final String ASSERT_FAULT_TO_REF_PARAMS =
71  	// "wsa:FaultTo ReferenceParameters";
72  
73  	/***
74  	 * Constructor for our assertion.
75  	 * 
76  	 * @param assertionConfig
77  	 * @param modelItem
78  	 */
79  	public WSARequestAssertion( TestAssertionConfig assertionConfig, Assertable modelItem )
80  	{
81  		super( assertionConfig, modelItem, false, true, false, true );
82  
83  		XmlObjectConfigurationReader reader = new XmlObjectConfigurationReader( getConfiguration() );
84  		assertWsaAction = reader.readBoolean( "asertWsaAction", true );
85  		assertWsaTo = reader.readBoolean( "asertWsaTo", false );
86  		assertWsaReplyTo = reader.readBoolean( "assertWsaReplyTo", false );
87  		assertWsaMessageId = reader.readBoolean( "assertWsaMessageId", false );
88  		// assertWsaRelatesTo = reader.readBoolean("asertWsaRelatesTo", false);
89  		// assertReplyToRefParams = reader.readBoolean("assertReplyToRefParams",
90  		// false);
91  		// assertFaultToRefParams = reader.readBoolean("assertFaultToRefParams",
92  		// false);
93  		wsaAssertionConfiguration = new WsaAssertionConfiguration( assertWsaAction, assertWsaTo, assertWsaReplyTo,
94  				assertWsaMessageId, false, false, false );
95  	}
96  
97  	public static class Factory extends AbstractTestAssertionFactory
98  	{
99  		public Factory()
100 		{
101 			super( WSARequestAssertion.ID, WSARequestAssertion.LABEL, WSARequestAssertion.class,
102 					WsdlMockResponseTestStep.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, wsaAssertionConfiguration )
113 					.validateWsAddressingRequest();
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( new AssertionError(
123 					"There has been some XmlException, ws-a couldn't be validated properly." ) );
124 		}
125 
126 		return "Request WS-Addressing is valid";
127 	}
128 
129 	@Override
130 	protected String internalAssertResponse( MessageExchange messageExchange, SubmitContext context )
131 			throws AssertionException
132 	{
133 		// try
134 		// {
135 		// new WsaValidator( (WsdlMessageExchange) messageExchange,
136 		// wsaAssertionConfiguration ).validateWsAddressingResponse();
137 		// }
138 		// catch( AssertionException e )
139 		// {
140 		// throw new AssertionException( new AssertionError( e.getMessage() ) );
141 		// }
142 		// catch( XmlException e )
143 		// {
144 		// SoapUI.logError( e );
145 		// throw new AssertionException(
146 		// new AssertionError(
147 		// "There has been some XmlException, ws-a couldn't be validated properly."
148 		// ) );
149 		// }
150 
151 		// return "Response WS-Addressing is valid";
152 		return null;
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
178 			// .getBoolean(ASSERT_REPLY_TO_REF_PARAMS);
179 			// assertFaultToRefParams = values
180 			// .getBoolean(ASSERT_FAULT_TO_REF_PARAMS);
181 		}
182 
183 		wsaAssertionConfiguration = new WsaAssertionConfiguration( assertWsaAction, assertWsaTo, assertWsaReplyTo,
184 				assertWsaMessageId, false, false, false );
185 		setConfiguration( createConfiguration() );
186 		return true;
187 	}
188 
189 	private void buildDialog()
190 	{
191 		XFormDialogBuilder builder = XFormFactory.createDialogBuilder( "Ws-a properties to assert" );
192 		XForm mainForm = builder.createForm( "Basic" );
193 		mainForm.addCheckBox( ASSERT_ACTION, "Check if 'wsa:Action' exists" );
194 		mainForm.addCheckBox( ASSERT_TO, "Check if 'wsa:To' exists" );
195 		mainForm.addCheckBox( ASSERT_REPLY_TO, "Check if 'wsa:ReplyTo' exists" );
196 		mainForm.addCheckBox( ASSERT_MESSAGE_ID, "Check if 'wsa:MessageId' exists" );
197 		// mainForm.addCheckBox(ASSERT_RELATES_TO,
198 		// "Check if 'wsa:RelatesTo' exists");
199 		// mainForm.addCheckBox(ASSERT_REPLY_TO_REF_PARAMS,
200 		// "Check if 'wsa:ReplyTo' ReferenceParameters exist");
201 		// mainForm.addCheckBox(ASSERT_FAULT_TO_REF_PARAMS,
202 		// "Check if 'wsa:FaultTo' ReferenceParameters exist");
203 
204 		dialog = builder.buildDialog( builder.buildOkCancelHelpActions( HelpUrls.SIMPLE_CONTAINS_HELP_URL ),
205 				"Specify options", UISupport.OPTIONS_ICON );
206 	}
207 
208 	protected XmlObject createConfiguration()
209 	{
210 		XmlObjectConfigurationBuilder builder = new XmlObjectConfigurationBuilder();
211 		builder.add( "asertWsaAction", assertWsaAction );
212 		builder.add( "asertWsaTo", assertWsaTo );
213 		builder.add( "assertWsaReplyTo", assertWsaReplyTo );
214 		builder.add( "assertWsaMessageId", assertWsaMessageId );
215 		// builder.add("asertWsaRelatesTo", assertWsaRelatesTo);
216 		// builder.add("assertReplyToRefParams", assertReplyToRefParams);
217 		// builder.add("assertFaultToRefParams", assertFaultToRefParams);
218 		return builder.finish();
219 	}
220 
221 }