/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cxf.ws.policy;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.namespace.QName;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.extension.ExtensionManagerBus;
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.phase.PhaseInterceptor;
import org.apache.cxf.service.model.BindingFaultInfo;
import org.apache.cxf.service.model.BindingMessageInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.transport.Destination;
import org.apache.cxf.ws.policy.builder.primitive.PrimitiveAssertion;
import org.apache.neethi.Assertion;
import org.apache.neethi.Constants;
import org.apache.neethi.Policy;
import org.apache.neethi.PolicyComponent;
import org.apache.neethi.PolicyReference;
import org.apache.neethi.PolicyRegistry;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
*
*/
public class PolicyEngineTest extends Assert {
private IMocksControl control;
private PolicyEngineImpl engine;
private Message msg = new MessageImpl();
@Before
public void setUp() {
control = EasyMock.createNiceControl();
}
private EndpointInfo createMockEndpointInfo() throws Exception {
EndpointInfo ei = new EndpointInfo();
ei.setName(new QName("mock", "mock"));
return ei;
}
private BindingOperationInfo createMockBindingOperationInfo() throws Exception {
OperationInfo info = new OperationInfo();
return new BindingOperationInfo(null, info) {
public boolean isUnwrapped() {
return false;
}
};
}
@Test
public void testAccessors() throws Exception {
engine = new PolicyEngineImpl(false);
assertNotNull(engine.getRegistry());
assertNull(engine.getBus());
assertNotNull(engine.getPolicyProviders());
assertNull(engine.getAlternativeSelector());
assertTrue(!engine.isEnabled());
Bus bus = new ExtensionManagerBus();
engine.setBus(bus);
List<PolicyProvider> providers = CastUtils.cast(Collections.EMPTY_LIST, PolicyProvider.class);
engine.setPolicyProviders(providers);
PolicyRegistry reg = control.createMock(PolicyRegistry.class);
engine.setRegistry(reg);
engine.setEnabled(true);
AlternativeSelector selector = control.createMock(AlternativeSelector.class);
engine.setAlternativeSelector(selector);
assertSame(bus, engine.getBus());
assertSame(reg, engine.getRegistry());
assertTrue(engine.isEnabled());
assertSame(selector, engine.getAlternativeSelector());
assertNotNull(engine.createOutPolicyInfo());
bus.shutdown(true);
}
@Test
public void testGetEffectiveClientRequestPolicy() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
AssertingConduit conduit = control.createMock(AssertingConduit.class);
EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class);
EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi);
epi.initialise(ei, boi, engine, conduit, true, true, msg);
EasyMock.expectLastCall();
control.replay();
assertSame(epi, engine.getEffectiveClientRequestPolicy(ei, boi, conduit, msg));
assertSame(epi, engine.getEffectiveClientRequestPolicy(ei, boi, conduit, msg));
control.verify();
}
@Test
public void testSetEffectiveClientRequestPolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
EffectivePolicy effectivePolicy = control.createMock(EffectivePolicy.class);
control.replay();
engine.setEffectiveClientRequestPolicy(ei, boi, effectivePolicy);
assertSame(effectivePolicy,
engine.getEffectiveClientRequestPolicy(ei, boi, (Conduit)null, msg));
control.verify();
}
@Test
public void testGetEffectiveServerResponsePolicy() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
AssertingDestination destination = control.createMock(AssertingDestination.class);
EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class);
EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi);
epi.initialise(ei, boi, engine, destination, false, false, null);
EasyMock.expectLastCall();
control.replay();
assertSame(epi, engine.getEffectiveServerResponsePolicy(ei, boi, destination, null, msg));
assertSame(epi, engine.getEffectiveServerResponsePolicy(ei, boi, destination, null, msg));
control.verify();
}
@Test
public void testSetEffectiveServerResponsePolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
EffectivePolicy effectivePolicy = control.createMock(EffectivePolicy.class);
control.replay();
engine.setEffectiveServerResponsePolicy(ei, boi, effectivePolicy);
assertSame(effectivePolicy,
engine.getEffectiveServerResponsePolicy(ei, boi, (Destination)null, null, msg));
control.verify();
}
@Test
public void testGetEffectiveServerFaultPolicy() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
BindingFaultInfo bfi = new BindingFaultInfo(null, null);
AssertingDestination destination = control.createMock(AssertingDestination.class);
EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class);
EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi);
epi.initialise(ei, null, bfi, engine, destination, msg);
EasyMock.expectLastCall();
control.replay();
assertSame(epi, engine.getEffectiveServerFaultPolicy(ei, null, bfi, destination, msg));
assertSame(epi, engine.getEffectiveServerFaultPolicy(ei, null, bfi, destination, msg));
control.verify();
}
@Test
public void testSetEffectiveServerFaultPolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
BindingFaultInfo bfi = new BindingFaultInfo(null, null);
EffectivePolicy epi = control.createMock(EffectivePolicy.class);
engine.setEffectiveServerFaultPolicy(ei, bfi, epi);
assertSame(epi, engine.getEffectiveServerFaultPolicy(ei, null, bfi, (Destination)null, msg));
}
@Test
public void testGetEffectiveServerRequestPolicyInfo() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class);
EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi);
epi.initialise(ei, boi, engine, false, true, msg);
EasyMock.expectLastCall();
control.replay();
assertSame(epi, engine.getEffectiveServerRequestPolicy(ei, boi, msg));
assertSame(epi, engine.getEffectiveServerRequestPolicy(ei, boi, msg));
control.verify();
}
@Test
public void testSetEffectiveServerRequestPolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
EffectivePolicy effectivePolicy = control.createMock(EffectivePolicy.class);
control.replay();
engine.setEffectiveServerRequestPolicy(ei, boi, effectivePolicy);
assertSame(effectivePolicy, engine.getEffectiveServerRequestPolicy(ei, boi, msg));
control.verify();
}
@Test
public void testGetEffectiveClientResponsePolicy() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class);
EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi);
epi.initialise(ei, boi, engine, true, false, msg);
EasyMock.expectLastCall();
control.replay();
assertSame(epi, engine.getEffectiveClientResponsePolicy(ei, boi, msg));
assertSame(epi, engine.getEffectiveClientResponsePolicy(ei, boi, msg));
control.verify();
}
@Test
public void testSetEffectiveClientResponsePolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
BindingOperationInfo boi = createMockBindingOperationInfo();
EffectivePolicy epi = control.createMock(EffectivePolicy.class);
control.replay();
engine.setEffectiveClientResponsePolicy(ei, boi, epi);
assertSame(epi, engine.getEffectiveClientResponsePolicy(ei, boi, msg));
control.verify();
}
@Test
public void testGetEffectiveClientFaultPolicy() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createOutPolicyInfo", new Class[] {});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
BindingFaultInfo bfi = new BindingFaultInfo(null, null);
EffectivePolicyImpl epi = control.createMock(EffectivePolicyImpl.class);
EasyMock.expect(engine.createOutPolicyInfo()).andReturn(epi);
epi.initialisePolicy(ei, null, bfi, engine, msg);
EasyMock.expectLastCall();
control.replay();
assertSame(epi, engine.getEffectiveClientFaultPolicy(ei, null, bfi, msg));
assertSame(epi, engine.getEffectiveClientFaultPolicy(ei, null, bfi, msg));
control.verify();
}
@Test
public void testSetEffectiveClientFaultPolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
BindingFaultInfo bfi = new BindingFaultInfo(null, null);
EffectivePolicy epi = control.createMock(EffectivePolicy.class);
engine.setEffectiveClientFaultPolicy(ei, bfi, epi);
assertSame(epi, engine.getEffectiveClientFaultPolicy(ei, null, bfi, msg));
}
@Test
public void testGetEndpointPolicyClientSide() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createEndpointPolicyInfo",
new Class[] {EndpointInfo.class, boolean.class, Assertor.class, Message.class});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
AssertingConduit conduit = control.createMock(AssertingConduit.class);
EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class);
EasyMock.expect(engine.createEndpointPolicyInfo(ei, true, conduit, msg)).andReturn(epi);
control.replay();
assertSame(epi, engine.getClientEndpointPolicy(ei, conduit, msg));
control.verify();
}
@Test
public void testGetEndpointPolicyServerSide() throws Exception {
Method m = PolicyEngineImpl.class.getDeclaredMethod("createEndpointPolicyInfo",
new Class[] {EndpointInfo.class, boolean.class, Assertor.class, Message.class});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
AssertingDestination destination = control.createMock(AssertingDestination.class);
EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class);
EasyMock.expect(engine.createEndpointPolicyInfo(ei, false, destination, msg)).andReturn(epi);
control.replay();
assertSame(epi, engine.getServerEndpointPolicy(ei, destination, msg));
control.verify();
}
@Test
public void testCreateEndpointPolicyInfo() throws Exception {
Method m1 = PolicyEngineImpl.class.getDeclaredMethod("createEndpointPolicyInfo",
new Class[] {EndpointInfo.class, boolean.class, Assertor.class, Message.class});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m1).createMock(control);
engine.init();
EndpointInfo ei = createMockEndpointInfo();
Assertor assertor = control.createMock(Assertor.class);
EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class);
EasyMock.expect(engine.createEndpointPolicyInfo(ei, false, assertor, msg)).andReturn(epi);
control.replay();
assertSame(epi, engine.createEndpointPolicyInfo(ei, false, assertor, msg));
control.verify();
}
@Test
public void testEndpointPolicyWithEqualPolicies() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
ServiceInfo si = control.createMock(ServiceInfo.class);
ei.setService(si);
si.getExtensor(Policy.class);
EasyMock.expectLastCall().andReturn(null).times(2);
EndpointPolicyImpl epi = control.createMock(EndpointPolicyImpl.class);
control.replay();
engine.setServerEndpointPolicy(ei, epi);
engine.setClientEndpointPolicy(ei, epi);
assertSame(epi, engine.getClientEndpointPolicy(ei, (Conduit)null, msg));
assertSame(epi, engine.getServerEndpointPolicy(ei, (Destination)null, msg));
control.reset();
ei.setService(si);
Policy p = new Policy();
si.getExtensor(Policy.class);
EasyMock.expectLastCall().andReturn(p).times(2);
epi.getPolicy();
EasyMock.expectLastCall().andReturn(p).times(2);
control.replay();
assertSame(epi, engine.getServerEndpointPolicy(ei, (Destination)null, msg));
}
@Test
public void testDontAddBusInterceptors() {
doTestAddBusInterceptors(false);
}
@Test
public void testAddBusInterceptors() {
doTestAddBusInterceptors(true);
}
private void doTestAddBusInterceptors(boolean enabled) {
engine = new PolicyEngineImpl(enabled);
Bus bus = control.createMock(Bus.class);
List<Interceptor<? extends Message>> out = new ArrayList<Interceptor<? extends Message>>();
List<Interceptor<? extends Message>> in = new ArrayList<Interceptor<? extends Message>>();
List<Interceptor<? extends Message>> inFault = new ArrayList<Interceptor<? extends Message>>();
List<Interceptor<? extends Message>> outFault = new ArrayList<Interceptor<? extends Message>>();
if (enabled) {
EasyMock.expect(bus.getOutInterceptors()).andReturn(out).times(1);
EasyMock.expect(bus.getInInterceptors()).andReturn(in).times(1);
EasyMock.expect(bus.getInFaultInterceptors()).andReturn(inFault).times(2);
EasyMock.expect(bus.getOutFaultInterceptors()).andReturn(outFault);
control.replay();
}
engine.setBus(bus);
if (enabled) {
Set<String> idsOut = getInterceptorIds(out);
Set<String> idsIn = getInterceptorIds(in);
Set<String> idsInFault = getInterceptorIds(inFault);
Set<String> idsOutFault = getInterceptorIds(outFault);
assertEquals(1, out.size());
assertTrue(idsOut.contains(PolicyConstants.POLICY_OUT_INTERCEPTOR_ID));
assertEquals(1, in.size());
assertTrue(idsIn.contains(PolicyConstants.POLICY_IN_INTERCEPTOR_ID));
assertEquals(2, inFault.size());
assertTrue(idsInFault.contains(PolicyConstants.CLIENT_POLICY_IN_FAULT_INTERCEPTOR_ID));
assertTrue(idsInFault.contains(PolicyVerificationInFaultInterceptor.class.getName()));
assertEquals(1, outFault.size());
assertTrue(idsOutFault.contains(PolicyConstants.SERVER_POLICY_OUT_FAULT_INTERCEPTOR_ID));
} else {
assertEquals(0, out.size());
assertEquals(0, in.size());
assertEquals(0, inFault.size());
assertEquals(0, outFault.size());
}
if (enabled) {
control.verify();
assertNotNull(engine.getAlternativeSelector());
}
}
@Test
public void testGetAggregatedServicePolicy() {
engine = new PolicyEngineImpl();
ServiceInfo si = control.createMock(ServiceInfo.class);
control.replay();
Policy p = engine.getAggregatedServicePolicy(si, null);
assertTrue(p.isEmpty());
control.verify();
control.reset();
PolicyProvider provider1 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider1);
Policy p1 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(si, null)).andReturn(p1);
control.replay();
assertSame(p1, engine.getAggregatedServicePolicy(si, null));
control.verify();
control.reset();
PolicyProvider provider2 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider2);
Policy p2 = control.createMock(Policy.class);
Policy p3 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(si, null)).andReturn(p1);
EasyMock.expect(provider2.getEffectivePolicy(si, null)).andReturn(p2);
EasyMock.expect(p1.merge(p2)).andReturn(p3);
control.replay();
assertSame(p3, engine.getAggregatedServicePolicy(si, null));
control.verify();
}
@Test
public void testGetAggregatedEndpointPolicy() throws Exception {
engine = new PolicyEngineImpl();
EndpointInfo ei = createMockEndpointInfo();
control.replay();
Policy p = engine.getAggregatedEndpointPolicy(ei, null);
assertTrue(p.isEmpty());
control.verify();
control.reset();
PolicyProvider provider1 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider1);
Policy p1 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(ei, null)).andReturn(p1);
control.replay();
assertSame(p1, engine.getAggregatedEndpointPolicy(ei, null));
control.verify();
control.reset();
PolicyProvider provider2 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider2);
Policy p2 = control.createMock(Policy.class);
Policy p3 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(ei, null)).andReturn(p1);
EasyMock.expect(provider2.getEffectivePolicy(ei, null)).andReturn(p2);
EasyMock.expect(p1.merge(p2)).andReturn(p3);
control.replay();
assertSame(p3, engine.getAggregatedEndpointPolicy(ei, null));
control.verify();
}
@Test
public void testGetAggregatedOperationPolicy() throws Exception {
engine = new PolicyEngineImpl();
BindingOperationInfo boi = createMockBindingOperationInfo();
control.replay();
Policy p = engine.getAggregatedOperationPolicy(boi, null);
assertTrue(p.isEmpty());
control.verify();
control.reset();
PolicyProvider provider1 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider1);
Policy p1 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(boi, null)).andReturn(p1);
control.replay();
assertSame(p1, engine.getAggregatedOperationPolicy(boi, null));
control.verify();
control.reset();
PolicyProvider provider2 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider2);
Policy p2 = control.createMock(Policy.class);
Policy p3 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(boi, null)).andReturn(p1);
EasyMock.expect(provider2.getEffectivePolicy(boi, null)).andReturn(p2);
EasyMock.expect(p1.merge(p2)).andReturn(p3);
control.replay();
assertSame(p3, engine.getAggregatedOperationPolicy(boi, null));
control.verify();
}
@Test
public void testGetAggregatedMessagePolicy() {
engine = new PolicyEngineImpl();
BindingMessageInfo bmi = control.createMock(BindingMessageInfo.class);
control.replay();
Policy p = engine.getAggregatedMessagePolicy(bmi, null);
assertTrue(p.isEmpty());
control.verify();
control.reset();
PolicyProvider provider1 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider1);
Policy p1 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(bmi, null)).andReturn(p1);
control.replay();
assertSame(p1, engine.getAggregatedMessagePolicy(bmi, null));
control.verify();
control.reset();
PolicyProvider provider2 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider2);
Policy p2 = control.createMock(Policy.class);
Policy p3 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(bmi, null)).andReturn(p1);
EasyMock.expect(provider2.getEffectivePolicy(bmi, null)).andReturn(p2);
EasyMock.expect(p1.merge(p2)).andReturn(p3);
control.replay();
assertSame(p3, engine.getAggregatedMessagePolicy(bmi, null));
control.verify();
}
@Test
public void testGetAggregatedFaultPolicy() {
engine = new PolicyEngineImpl();
BindingFaultInfo bfi = control.createMock(BindingFaultInfo.class);
control.replay();
Policy p = engine.getAggregatedFaultPolicy(bfi, null);
assertTrue(p.isEmpty());
control.verify();
control.reset();
PolicyProvider provider1 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider1);
Policy p1 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(bfi, null)).andReturn(p1);
control.replay();
assertSame(p1, engine.getAggregatedFaultPolicy(bfi, null));
control.verify();
control.reset();
PolicyProvider provider2 = control.createMock(PolicyProvider.class);
engine.getPolicyProviders().add(provider2);
Policy p2 = control.createMock(Policy.class);
Policy p3 = control.createMock(Policy.class);
EasyMock.expect(provider1.getEffectivePolicy(bfi, null)).andReturn(p1);
EasyMock.expect(provider2.getEffectivePolicy(bfi, null)).andReturn(p2);
EasyMock.expect(p1.merge(p2)).andReturn(p3);
control.replay();
assertSame(p3, engine.getAggregatedFaultPolicy(bfi, null));
control.verify();
}
@Test
public void testGetAssertions() throws NoSuchMethodException {
Method m = PolicyEngineImpl.class.getDeclaredMethod("addAssertions",
new Class[] {PolicyComponent.class, boolean.class, Collection.class});
engine = EasyMock.createMockBuilder(PolicyEngineImpl.class)
.addMockedMethod(m).createMock(control);
PolicyAssertion a = control.createMock(PolicyAssertion.class);
EasyMock.expect(a.getType()).andReturn(Constants.TYPE_ASSERTION);
EasyMock.expect(a.isOptional()).andReturn(true);
control.replay();
assertTrue(engine.getAssertions(a, false).isEmpty());
control.verify();
control.reset();
EasyMock.expect(a.getType()).andReturn(Constants.TYPE_ASSERTION);
// EasyMock.expect(a.isOptional()).andReturn(false);
control.replay();
Collection<Assertion> ca = engine.getAssertions(a, true);
assertEquals(1, ca.size());
assertSame(a, ca.iterator().next());
control.verify();
control.reset();
Policy p = control.createMock(Policy.class);
EasyMock.expect(p.getType()).andReturn(Constants.TYPE_POLICY);
engine.addAssertions(EasyMock.eq(p), EasyMock.eq(false),
CastUtils.cast(EasyMock.isA(Collection.class), Assertion.class));
EasyMock.expectLastCall();
control.replay();
assertTrue(engine.getAssertions(p, false).isEmpty());
control.verify();
}
@Test
public void testAddAssertions() {
engine = new PolicyEngineImpl();
Collection<Assertion> assertions = new ArrayList<>();
Assertion a = control.createMock(Assertion.class);
EasyMock.expect(a.getType()).andReturn(Constants.TYPE_ASSERTION);
EasyMock.expect(a.isOptional()).andReturn(true);
control.replay();
engine.addAssertions(a, false, assertions);
assertTrue(assertions.isEmpty());
control.verify();
control.reset();
EasyMock.expect(a.getType()).andReturn(Constants.TYPE_ASSERTION);
control.replay();
engine.addAssertions(a, true, assertions);
assertEquals(1, assertions.size());
assertSame(a, assertions.iterator().next());
control.verify();
assertions.clear();
Policy p = new Policy();
a = new PrimitiveAssertion(new QName("http://x.y.z", "a"));
p.addAssertion(a);
// id has no #
engine.getRegistry().register("ab", p);
// local reference is an id + #
PolicyReference pr = new PolicyReference();
pr.setURI("#ab");
engine.addAssertions(pr, false, assertions);
assertEquals(1, assertions.size());
assertSame(a, assertions.iterator().next());
}
private Set<String> getInterceptorIds(List<Interceptor<? extends Message>> interceptors) {
Set<String> ids = new HashSet<>();
for (Interceptor<? extends Message> i : interceptors) {
ids.add(((PhaseInterceptor<? extends Message>)i).getId());
}
return ids;
}
interface AssertingConduit extends Assertor, Conduit {
}
interface AssertingDestination extends Assertor, Destination {
}
}