001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */package org.apache.cxf.systest.ws.policy;
019:
020: import java.util.logging.Logger;
021:
022: import javax.xml.ws.Endpoint;
023:
024: import org.apache.cxf.Bus;
025: import org.apache.cxf.BusFactory;
026: import org.apache.cxf.bus.spring.SpringBusFactory;
027: import org.apache.cxf.greeter_control.BasicGreeterService;
028: import org.apache.cxf.greeter_control.Greeter;
029: import org.apache.cxf.greeter_control.PingMeFault;
030: import org.apache.cxf.interceptor.LoggingInInterceptor;
031: import org.apache.cxf.interceptor.LoggingOutInterceptor;
032: import org.apache.cxf.systest.ws.util.ConnectionHelper;
033: import org.apache.cxf.systest.ws.util.InMessageRecorder;
034: import org.apache.cxf.systest.ws.util.MessageFlow;
035: import org.apache.cxf.systest.ws.util.MessageRecorder;
036: import org.apache.cxf.systest.ws.util.OutMessageRecorder;
037: import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
038: import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
039: import org.apache.cxf.ws.addressing.Names;
040: import org.apache.cxf.ws.rm.RMConstants;
041:
042: import org.junit.BeforeClass;
043: import org.junit.Test;
044:
045: /**
046: * Tests the use of the WS-Policy Framework to automatically engage WS-RM
047: * in response to Policies defined for the endpoint via an external policy attachment.
048: */
049: public class RMPolicyTest extends AbstractBusClientServerTestBase {
050:
051: private static final Logger LOG = Logger
052: .getLogger(RMPolicyTest.class.getName());
053: private static final String GREETMEONEWAY_ACTION = null;
054: private static final String GREETME_ACTION = null;
055: private static final String GREETME_RESPONSE_ACTION = null;
056: private static final String PINGME_ACTION = null;
057: private static final String PINGME_RESPONSE_ACTION = Names.WSA_DEFAULT_FAULT_ACTION;
058:
059: public static class Server extends AbstractBusTestServerBase {
060:
061: protected void run() {
062: SpringBusFactory bf = new SpringBusFactory();
063: Bus bus = bf
064: .createBus("org/apache/cxf/systest/ws/policy/rm.xml");
065: BusFactory.setDefaultBus(bus);
066: LoggingInInterceptor in = new LoggingInInterceptor();
067: bus.getInInterceptors().add(in);
068: LoggingOutInterceptor out = new LoggingOutInterceptor();
069: bus.getOutInterceptors().add(out);
070: bus.getOutFaultInterceptors().add(out);
071:
072: GreeterImpl implementor = new GreeterImpl();
073: String address = "http://localhost:9020/SoapContext/GreeterPort";
074: Endpoint.publish(address, implementor);
075: LOG.info("Published greeter endpoint.");
076: }
077:
078: public static void main(String[] args) {
079: try {
080: Server s = new Server();
081: s.start();
082: } catch (Exception ex) {
083: ex.printStackTrace();
084: System.exit(-1);
085: } finally {
086: System.out.println("done!");
087: }
088: }
089: }
090:
091: @BeforeClass
092: public static void startServers() throws Exception {
093: assertTrue("server did not launch correctly",
094: launchServer(Server.class));
095: }
096:
097: @Test
098: public void testUsingRM() throws Exception {
099: SpringBusFactory bf = new SpringBusFactory();
100: bus = bf.createBus("org/apache/cxf/systest/ws/policy/rm.xml");
101: BusFactory.setDefaultBus(bus);
102: OutMessageRecorder outRecorder = new OutMessageRecorder();
103: bus.getOutInterceptors().add(outRecorder);
104: InMessageRecorder inRecorder = new InMessageRecorder();
105: bus.getInInterceptors().add(inRecorder);
106:
107: BasicGreeterService gs = new BasicGreeterService();
108: final Greeter greeter = gs.getGreeterPort();
109: LOG.fine("Created greeter client.");
110:
111: ConnectionHelper.setKeepAliveConnection(greeter, true);
112: // oneway
113:
114: greeter.greetMeOneWay("CXF");
115:
116: // two-way
117:
118: assertEquals("CXF", greeter.greetMe("cxf"));
119:
120: // exception
121:
122: try {
123: greeter.pingMe();
124: } catch (PingMeFault ex) {
125: fail("First invocation should have succeeded.");
126: }
127:
128: try {
129: greeter.pingMe();
130: fail("Expected PingMeFault not thrown.");
131: } catch (PingMeFault ex) {
132: assertEquals(2, (int) ex.getFaultInfo().getMajor());
133: assertEquals(1, (int) ex.getFaultInfo().getMinor());
134: }
135:
136: MessageRecorder mr = new MessageRecorder(outRecorder,
137: inRecorder);
138: mr.awaitMessages(5, 9, 5000);
139:
140: MessageFlow mf = new MessageFlow(outRecorder
141: .getOutboundMessages(), inRecorder.getInboundMessages());
142:
143: mf.verifyMessages(5, true);
144: String[] expectedActions = new String[] {
145: RMConstants.getCreateSequenceAction(),
146: GREETMEONEWAY_ACTION, GREETME_ACTION, PINGME_ACTION,
147: PINGME_ACTION };
148: mf.verifyActions(expectedActions, true);
149: mf.verifyMessageNumbers(
150: new String[] { null, "1", "2", "3", "4" }, true);
151: mf.verifyLastMessage(new boolean[] { false, false, false,
152: false, false }, true);
153: mf.verifyAcknowledgements(new boolean[] { false, false, false,
154: true, true }, true);
155:
156: mf.verifyMessages(9, false);
157: mf.verifyPartialResponses(5);
158: mf.purgePartialResponses();
159:
160: expectedActions = new String[] {
161: RMConstants.getCreateSequenceResponseAction(),
162: GREETME_RESPONSE_ACTION, GREETME_RESPONSE_ACTION,
163: PINGME_RESPONSE_ACTION };
164: mf.verifyActions(expectedActions, false);
165: mf.verifyMessageNumbers(new String[] { null, "1", "2", "3" },
166: false);
167: mf.verifyLastMessage(
168: new boolean[] { false, false, false, false }, false);
169: mf.verifyAcknowledgements(new boolean[] { false, true, true,
170: true }, false);
171:
172: }
173: }
|