- Timestamp:
- 07/08/15 13:09:44 (9 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/SOAPUtils.java
r1992 r1993 40 40 import de.ugoe.cs.autoquest.plugin.http.eventcore.SOAPEventType; 41 41 import de.ugoe.cs.autoquest.plugin.http.eventcore.SimpleSOAPEventType; 42 import de.ugoe.cs.autoquest.plugin.http.eventcore.SimpleSOAPEventType.CallType; 42 43 43 44 /** … … 220 221 * @return body of the SOAP event 221 222 */ 222 public static Element getSoap RequestBodyFromEvent(Event event) {223 return getSoap RequestBodyFromEvent(event, false);223 public static Element getSoapBodyFromEvent(Event event) { 224 return getSoapBodyFromEvent(event, false); 224 225 } 225 226 … … 235 236 * @return body of the SOAP event 236 237 */ 237 public static Element getSoap RequestBodyFromEvent(Event event, boolean useRandomRequestBodies) {238 public static Element getSoapBodyFromEvent(Event event, boolean useRandomRequestBodies) { 238 239 Element requestBody = null; 239 240 if (event.getType() instanceof SOAPEventType) { … … 242 243 else if (event.getType() instanceof SimpleSOAPEventType) { 243 244 if (useRandomRequestBodies) { 244 requestBody = ((SimpleSOAPEventType) event.getType()).getRandomSoap RequestBody();245 requestBody = ((SimpleSOAPEventType) event.getType()).getRandomSoapMsgBody(); 245 246 } 246 247 else { 247 requestBody = ((SimpleSOAPEventType) event.getType()).getSoap RequestBody();248 requestBody = ((SimpleSOAPEventType) event.getType()).getSoapMsgBody(); 248 249 } 249 250 } … … 382 383 new Event(new SimpleSOAPEventType(methodName, eventType.getServiceName(), 383 384 eventType.getClientName(), 384 eventType.getSoap RequestBody(),385 eventType.getSoapMsgBody(), 385 386 eventType.getEqualSOAPDataMap()), 386 387 event.getTarget()); … … 457 458 return sortedSequences; 458 459 } 459 460 461 /** 462 * <p> 463 * Sorts the sequences by the orderingId of the requests/responses. This function only supports 464 * the ordering of {@link Event}s with a {@link SOAPEventType}. 465 * </p> 466 * 467 * @param sequences 468 * sequences to be order 469 * @param orderType 470 * determines if sequences are ordered by request or response 471 * @return sorted sequences 472 */ 473 public static Collection<List<Event>> sortAndConvertSequences(Collection<List<Event>> sequences, 474 boolean keepRequests, 475 boolean keepResponse) 476 { 477 Collection<List<Event>> sortedSequences = new LinkedList<>(); 478 EqualSOAPDataMap equalSOAPDataMap = new EqualSOAPDataMap(); 479 for (List<Event> sequence : sequences) { 480 // use insertion sort 481 List<Event> sortedSequence = new LinkedList<>(); 482 long lastOrderId = Long.MIN_VALUE; 483 long selectedOrderId; 484 Event selectedEvent; 485 CallType selectedCallType = CallType.RESPONSE; 486 do { 487 selectedEvent = null; 488 selectedOrderId = Long.MAX_VALUE; 489 for (Event event : sequence) { 490 if (!(event.getType() instanceof SOAPEventType)) { 491 throw new RuntimeException( 492 "Can only order SOAPEventTypes. SimpleSOAPEvent is also not supported. Event type found: " + 493 event.getType().getClass().getName()); 494 } 495 SOAPEventType soapEventType = (SOAPEventType) event.getType(); 496 long requestOrderId = soapEventType.getExchange().getRequest().getOrderingId(); 497 long responseOrderId = 498 soapEventType.getExchange().getResponse().getOrderingId(); 499 500 if (requestOrderId > lastOrderId && requestOrderId < selectedOrderId) { 501 selectedOrderId = requestOrderId; 502 selectedEvent = event; 503 selectedCallType = CallType.REQUEST; 504 } 505 if (responseOrderId > lastOrderId && responseOrderId < selectedOrderId) { 506 selectedOrderId = responseOrderId; 507 selectedEvent = event; 508 selectedCallType = CallType.RESPONSE; 509 } 510 } 511 if (selectedEvent != null) { 512 SOAPEventType eventType = (SOAPEventType) selectedEvent.getType(); 513 Element soapMsgBody; 514 switch (selectedCallType) 515 { 516 case REQUEST: 517 soapMsgBody = eventType.getSoapRequestBody(); 518 break; 519 case RESPONSE: 520 soapMsgBody = eventType.getSoapResponseBody(); 521 break; 522 default: 523 throw new RuntimeException("unsupported call type: " + selectedCallType); 524 } 525 if ((keepRequests && selectedCallType == CallType.REQUEST) || 526 (keepResponse && selectedCallType == CallType.RESPONSE)) 527 { 528 sortedSequence.add(new Event(new SimpleSOAPEventType(eventType 529 .getCalledMethod(), eventType.getServiceName(), eventType 530 .getClientName(), soapMsgBody, equalSOAPDataMap, selectedCallType))); 531 } 532 lastOrderId = selectedOrderId; 533 } 534 535 } while(selectedEvent!=null); 536 sortedSequences.add(sortedSequence); 537 } 538 return sortedSequences; 539 } 540 460 541 /** 461 542 * <p> 462 543 * Removes calls to and from all ignored services from the sequences. 463 544 * </p> 464 * 465 * @param sequences sequences where the ignored services are removed 466 * @param ignoredServicesString comma separted string that defines the ignored services 545 * 546 * @param sequences 547 * sequences where the ignored services are removed 548 * @param ignoredServicesString 549 * comma separted string that defines the ignored services 467 550 * @return sequences without events that reference the ignored services 468 551 */ 469 public static Collection<List<Event>> removeCallsToIgnoredServices(Collection<List<Event>> sequences, String ignoredServicesString) { 552 public static Collection<List<Event>> removeCallsToIgnoredServices(Collection<List<Event>> sequences, 553 String ignoredServicesString) 554 { 470 555 Set<String> ignoredServices = new HashSet<>(); 471 556 if (ignoredServicesString != null) { … … 476 561 return removeCallsToIgnoredServices(sequences, ignoredServices); 477 562 } 478 563 479 564 /** 480 565 * <p> 481 566 * Removes calls to and from all ignored services from the sequences. 482 567 * </p> 483 * 484 * @param sequences sequences where the ignored services are removed 485 * @param ignoredServices set with all ignored service names 568 * 569 * @param sequences 570 * sequences where the ignored services are removed 571 * @param ignoredServices 572 * set with all ignored service names 486 573 * @return sequences without events that reference the ignored services 487 574 */ 488 public static Collection<List<Event>> removeCallsToIgnoredServices(Collection<List<Event>> sequences, Set<String> ignoredServices) { 575 public static Collection<List<Event>> removeCallsToIgnoredServices(Collection<List<Event>> sequences, 576 Set<String> ignoredServices) 577 { 489 578 Collection<List<Event>> onlyAcceptedServicesSequences = new LinkedList<>(); 490 579 for (List<Event> sequence : sequences) { … … 493 582 SimpleSOAPEventType eventType = (SimpleSOAPEventType) event.getType(); 494 583 if (!ignoredServices.contains(eventType.getServiceName()) && 495 !ignoredServices.contains(eventType.getClientName()) ) { 584 !ignoredServices.contains(eventType.getClientName())) 585 { 496 586 onlyAcceptedServicesSequence.add(event); 497 587 } -
trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/eventcore/SOAPEventType.java
r1924 r1993 270 270 } 271 271 } 272 273 /** 274 * @return the body of the soapResponse 275 */ 276 public Element getSoapResponseBody() { 277 try { 278 return soapResponse.getSOAPBody(); 279 } 280 catch (SOAPException e) { 281 return null; 282 } 283 } 272 284 273 285 /* (non-Javadoc) -
trunk/autoquest-plugin-http/src/main/java/de/ugoe/cs/autoquest/plugin/http/eventcore/SimpleSOAPEventType.java
r1988 r1993 38 38 public class SimpleSOAPEventType implements IEventType { 39 39 40 /** 41 * <p> 42 * Defines if this event represents an request or an response. 43 * </p> 44 * 45 * @author Steffen Herbold 46 */ 47 public enum CallType { 48 REQUEST, RESPONSE 49 } 50 40 51 /** */ 41 52 private static final long serialVersionUID = 1L; … … 65 76 /** 66 77 * <p> 67 * the body of the SOAP request; storage as serialized XML string to allow object serialization 68 * </p> 69 */ 70 private final String soapRequestBody; 71 72 /** 73 * TODO 74 */ 75 private final EqualSOAPDataMap equalRequestsMap; 78 * the body of the SOAP message; storage as serialized XML string to allow object serialization 79 * </p> 80 */ 81 private final String soapMsgBody; 82 83 /** 84 * <p> 85 * defines whether this event represents a request or a response 86 * </p> 87 */ 88 private final CallType callType; 89 90 /** 91 * reference to the {@link EqualSOAPDataMap} associated with the sequence this event belongs to. 92 */ 93 private final EqualSOAPDataMap equalBodyMap; 76 94 77 95 /** … … 84 102 String serviceName, 85 103 String clientName, 86 Element soap RequestBody)104 Element soapMsgBody) 87 105 { 88 this(calledMethod, serviceName, clientName, soap RequestBody, null);89 } 90 91 /** 92 * <p> 93 * Constructor. Creates a new SimpleSOAPEventType with a EqualSOAPDATAMap. 106 this(calledMethod, serviceName, clientName, soapMsgBody, null, CallType.REQUEST); 107 } 108 109 /** 110 * <p> 111 * Constructor. Creates a new SimpleSOAPEventType with a EqualSOAPDATAMap. 94 112 * </p> 95 113 * … … 98 116 String serviceName, 99 117 String clientName, 100 Element soap RequestBody,118 Element soapMsgBody, 101 119 EqualSOAPDataMap equalRequestsMap) 120 { 121 this(calledMethod, serviceName, clientName, soapMsgBody, equalRequestsMap, 122 CallType.REQUEST); 123 } 124 125 /** 126 * <p> 127 * Constructor. Creates a new SimpleSOAPEventType with a EqualSOAPDATAMap. 128 * </p> 129 * 130 */ 131 public SimpleSOAPEventType(String calledMethod, 132 String serviceName, 133 String clientName, 134 Element soapMsgBody, 135 EqualSOAPDataMap equalRequestsMap, 136 CallType callType) 102 137 { 103 138 if (calledMethod == null) { … … 113 148 this.serviceName = serviceName; 114 149 this.clientName = clientName; 115 this.soapRequestBody = SOAPUtils.getSerialization(soapRequestBody); 116 this.equalRequestsMap = equalRequestsMap; 117 if( equalRequestsMap!=null ) { 118 equalRequestsMap.add(this, this.soapRequestBody); 150 this.equalBodyMap = equalRequestsMap; 151 this.soapMsgBody = SOAPUtils.getSerialization(soapMsgBody); 152 this.callType = callType; 153 154 // this must be the last part of the constructor and only be called after all variables are 155 // initialized 156 if (equalRequestsMap != null) { 157 equalRequestsMap.add(this, this.soapMsgBody); 119 158 } 120 159 } … … 161 200 * @return body of the SOAP request 162 201 */ 163 public Element getSoapRequestBody() { 164 return createDOMElement(soapRequestBody); 165 } 166 167 /** 168 * <p> 169 * returns a randomly draw request body for the called method using {@link EqualSOAPDataMap#getRandom(SimpleSOAPEventType)} 170 * </p> 171 * 202 public Element getSoapMsgBody() { 203 return createDOMElement(soapMsgBody); 204 } 205 206 /** 207 * <p> 208 * returns a randomly draw request body for the called method using 209 * {@link EqualSOAPDataMap#getRandom(SimpleSOAPEventType)} 210 * </p> 211 * 172 212 * @return randomly drawn body of the SOAP request 173 213 */ 174 public Element getRandomSoapRequestBody() { 175 if( equalRequestsMap==null ) { 176 throw new RuntimeException("cannot use random mode is no request map is available; different data missing"); 177 } 178 return createDOMElement(equalRequestsMap.getRandom(this)); 179 } 180 214 public Element getRandomSoapMsgBody() { 215 if (equalBodyMap == null) { 216 throw new RuntimeException( 217 "cannot use random mode is no request map is available; different data missing"); 218 } 219 return createDOMElement(equalBodyMap.getRandom(this)); 220 } 221 222 /** 223 * <p> 224 * returns the {@link EqualSOAPDataMap} associated with this event 225 * </p> 226 * 227 * @return the {@link EqualSOAPDataMap} 228 */ 181 229 public EqualSOAPDataMap getEqualSOAPDataMap() { 182 return equalRequestsMap; 230 return equalBodyMap; 231 } 232 233 public CallType getCallType() { 234 return callType; 183 235 } 184 236 … … 190 242 @Override 191 243 public String getName() { 192 return "(" + serviceName + ", " + calledMethod + ")";244 return "(" + callType + ":" + clientName + "->" + serviceName + ", " + calledMethod + ")"; 193 245 } 194 246 … … 204 256 } 205 257 else if (obj instanceof SimpleSOAPEventType) { 206 return HTTPUtils.equals(calledMethod, ((SimpleSOAPEventType) obj).calledMethod) && 258 return callType.equals(((SimpleSOAPEventType) obj).callType) && 259 HTTPUtils.equals(calledMethod, ((SimpleSOAPEventType) obj).calledMethod) && 207 260 HTTPUtils.equals(serviceName, ((SimpleSOAPEventType) obj).serviceName) && 208 261 HTTPUtils.equals(clientName, ((SimpleSOAPEventType) obj).clientName); … … 220 273 @Override 221 274 public int hashCode() { 222 int hashCode = calledMethod.hashCode() + serviceName.hashCode() + clientName.hashCode();223 return hashCode;275 return callType.hashCode() + calledMethod.hashCode() + serviceName.hashCode() + 276 clientName.hashCode(); 224 277 } 225 278 … … 231 284 @Override 232 285 public String toString() { 233 return "SimpleSOAPEventType (" + serviceName + ", " + calledMethod + ")";286 return "SimpleSOAPEventType" + getName(); 234 287 } 235 288 … … 243 296 } 244 297 } 245 //246 // /**247 // * <p>248 // * Determines how getSoapRequestBody works.249 // * <ul>250 // * <li>LOCALEVENT: returns the request body of the event type itself</li>251 // * <li>RANDOM: returns a randomly draw request body for the called method using252 // * {@link EqualSOAPDataMap#getRandom(SimpleSOAPEventType)}.253 // * </ul>254 // * </p>255 // *256 // * @author Steffen Herbold257 // */258 // public static enum RequestBodyMode {259 // LOCALEVENT, RANDOM260 // }261 298 } -
trunk/autoquest-plugin-uml-test/src/test/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtilsTest.java
r1992 r1993 385 385 386 386 sequences = SOAPUtils.removeNonSOAPEvents(sequences); 387 sequences = SOAPUtils.sortSequences(sequences, SequenceOrder.REQUEST); 388 sequences = SOAPUtils.convertToSimpleSOAPEvent(sequences, true); 387 sequences = SOAPUtils.sortAndConvertSequences(sequences, true, true); 389 388 sequences = SOAPUtils.normalizeOperationNames(sequences, properties 390 389 .getProperty("methodName.prefixToRemove"), properties -
trunk/autoquest-plugin-uml-test/src/test/resources/ita_imported_properties.prop
r1979 r1993 24 24 testcases.minlenght = 1 25 25 testcases.maxlength = 1 26 testcases.data.random = false 26 27 -
trunk/autoquest-plugin-uml/src/main/java/de/ugoe/cs/autoquest/plugin/uml/UMLUtils.java
r1988 r1993 1039 1039 String prefix) 1040 1040 { 1041 org.w3c.dom.Element requestBody = SOAPUtils.getSoap RequestBodyFromEvent(event, useRandomRequestBodies);1041 org.w3c.dom.Element requestBody = SOAPUtils.getSoapBodyFromEvent(event, useRandomRequestBodies); 1042 1042 Package instSpecPkg = null; 1043 1043
Note: See TracChangeset
for help on using the changeset viewer.