/**
* 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.attachment.external;
import javax.xml.namespace.QName;
import org.apache.cxf.service.model.BindingFaultInfo;
import org.apache.cxf.service.model.BindingInfo;
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.FaultInfo;
import org.apache.cxf.service.model.InterfaceInfo;
import org.apache.cxf.service.model.MessageInfo;
import org.apache.cxf.service.model.MessageInfo.Type;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class URIDomainExpressionTest {
private static final String TARGET_NAMESPACE = "http://org.apache.cxf/targetNamespace";
private static final String SERVICE_NAME = "testService";
private static final QName SERVICE_QNAME = new QName(TARGET_NAMESPACE, SERVICE_NAME);
private static final String INTERFACE_NAME = "testPortType";
private static final QName INTERFACE_QNAME = new QName(TARGET_NAMESPACE, INTERFACE_NAME);
private static final String PORT_NAME = "testPort";
private static final QName PORT_QNAME = new QName(TARGET_NAMESPACE, PORT_NAME);
private static final String OPERATION_NAME = "testOperation";
private static final QName OPERATION_QNAME = new QName(TARGET_NAMESPACE, OPERATION_NAME);
private static final String BINDING_NAME = "testBinding";
private static final QName BINDING_QNAME = new QName(TARGET_NAMESPACE, BINDING_NAME);
private static final String MESSAGE_NAME = "testBinding";
private static final QName MESSAGE_QNAME = new QName(TARGET_NAMESPACE, MESSAGE_NAME);
private static final String FAULT_NAME = "testFault";
private static final QName FAULT_QNAME = new QName(TARGET_NAMESPACE, FAULT_NAME);
private IMocksControl control;
private ServiceInfo si;
private EndpointInfo ei;
private BindingOperationInfo boi;
private BindingMessageInfo bmi;
private BindingFaultInfo bfi;
private MessageInfo mi;
@Before
public void setUp() {
control = EasyMock.createNiceControl();
}
@Test
public void testServiceInfo() {
mockInfoObjects();
control.replay();
String expression = TARGET_NAMESPACE + "#wsdl11.definitions()";
URIDomainExpression ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(si));
expression = TARGET_NAMESPACE + "#wsdl11.service(" + SERVICE_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(si));
expression = TARGET_NAMESPACE + "#wsdl11.portType(" + INTERFACE_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(si));
expression = TARGET_NAMESPACE + "#wsdl11.portType(" + INTERFACE_NAME + "wrong" + ")";
ude = new URIDomainExpression(expression);
Assert.assertFalse("Expected false for expression: " + expression, ude.appliesTo(si));
expression = TARGET_NAMESPACE + "wrong" + "#wsdl11.portType(" + INTERFACE_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertFalse("Expected false for expression: " + expression, ude.appliesTo(si));
control.reset();
}
@Test
public void testEndpointInfo() {
mockInfoObjects();
control.replay();
String expression = TARGET_NAMESPACE + "#wsdl11.port(" + SERVICE_NAME + "/" + PORT_NAME + ")";
URIDomainExpression ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(ei));
expression = TARGET_NAMESPACE + "#wsdl11.port(" + SERVICE_NAME + "/" + PORT_NAME + "wrong" + ")";
ude = new URIDomainExpression(expression);
Assert.assertFalse("Expected false for expression: " + expression, ude.appliesTo(boi));
control.reset();
}
@Test
public void testBindingOperationInfo() {
mockInfoObjects();
control.replay();
String expression = TARGET_NAMESPACE + "#wsdl11.binding(" + BINDING_NAME + ")";
URIDomainExpression ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(boi));
expression = TARGET_NAMESPACE + "#wsdl11.bindingOperation(" + BINDING_NAME + "/" + OPERATION_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(boi));
expression = TARGET_NAMESPACE + "#wsdl11.portTypeOperation(" + INTERFACE_NAME + "/" + OPERATION_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(boi));
expression = TARGET_NAMESPACE + "#wsdl11.portTypeOperation(" + INTERFACE_NAME + "/"
+ OPERATION_NAME + "wrong" + ")";
ude = new URIDomainExpression(expression);
Assert.assertFalse("Expected false for expression: " + expression, ude.appliesTo(boi));
control.reset();
}
@Test
public void testBindingMessageInfo() {
mockInfoObjects();
control.replay();
String expression = TARGET_NAMESPACE + "#wsdl11.message(" + MESSAGE_NAME + ")";
URIDomainExpression ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bmi));
expression = TARGET_NAMESPACE + "#wsdl11.message(" + MESSAGE_NAME + "wrong" + ")";
ude = new URIDomainExpression(expression);
Assert.assertFalse("Expected false for expression: " + expression, ude.appliesTo(bmi));
control.reset();
mockInfoObjects();
EasyMock.expect(mi.getType()).andReturn(Type.INPUT).anyTimes();
control.replay();
expression = TARGET_NAMESPACE + "#wsdl11.bindingOperation.input(" + BINDING_NAME + "/" + OPERATION_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bmi));
expression = TARGET_NAMESPACE + "#wsdl11.portTypeOperation.input(" + INTERFACE_NAME + "/"
+ OPERATION_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bmi));
control.reset();
mockInfoObjects();
EasyMock.expect(mi.getType()).andReturn(Type.OUTPUT).anyTimes();
control.replay();
expression = TARGET_NAMESPACE + "#wsdl11.bindingOperation.output(" + BINDING_NAME + "/" + OPERATION_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bmi));
expression = TARGET_NAMESPACE + "#wsdl11.portTypeOperation.output(" + INTERFACE_NAME + "/"
+ OPERATION_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bmi));
control.reset();
}
@Test
public void testBindingOperationFault() {
mockInfoObjects();
control.replay();
String expression = TARGET_NAMESPACE + "#wsdl11.bindingOperation.fault(" + BINDING_NAME
+ "/" + OPERATION_NAME + "/" + FAULT_NAME + ")";
URIDomainExpression ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bfi));
expression = TARGET_NAMESPACE + "#wsdl11.portTypeOperation.fault(" + INTERFACE_NAME
+ "/" + OPERATION_NAME + "/" + FAULT_NAME + ")";
ude = new URIDomainExpression(expression);
Assert.assertTrue("Expected true for expression: " + expression, ude.appliesTo(bfi));
expression = TARGET_NAMESPACE + "#wsdl11.portTypeOperation.fault(" + INTERFACE_NAME
+ "/" + OPERATION_NAME + "/" + FAULT_NAME + "wrong" + ")";
ude = new URIDomainExpression(expression);
Assert.assertFalse("Expected false for expression: " + expression, ude.appliesTo(bfi));
control.reset();
}
private void mockInfoObjects() {
si = control.createMock(ServiceInfo.class);
ei = control.createMock(EndpointInfo.class);
boi = control.createMock(BindingOperationInfo.class);
bmi = control.createMock(BindingMessageInfo.class);
bfi = control.createMock(BindingFaultInfo.class);
InterfaceInfo ii = control.createMock(InterfaceInfo.class);
EasyMock.expect(si.getTargetNamespace()).andReturn(TARGET_NAMESPACE).anyTimes();
EasyMock.expect(si.getName()).andReturn(SERVICE_QNAME).anyTimes();
EasyMock.expect(si.getInterface()).andReturn(ii).anyTimes();
EasyMock.expect(ii.getName()).andReturn(INTERFACE_QNAME).anyTimes();
EasyMock.expect(ei.getName()).andReturn(PORT_QNAME).anyTimes();
EasyMock.expect(ei.getService()).andReturn(si).anyTimes();
BindingInfo bi = control.createMock(BindingInfo.class);
OperationInfo oi = control.createMock(OperationInfo.class);
EasyMock.expect(boi.getName()).andReturn(OPERATION_QNAME).anyTimes();
EasyMock.expect(boi.getBinding()).andReturn(bi).anyTimes();
EasyMock.expect(bi.getName()).andReturn(BINDING_QNAME).anyTimes();
EasyMock.expect(boi.getOperationInfo()).andReturn(oi).anyTimes();
EasyMock.expect(oi.getInterface()).andReturn(ii).anyTimes();
EasyMock.expect(oi.getName()).andReturn(OPERATION_QNAME).anyTimes();
mi = control.createMock(MessageInfo.class);
EasyMock.expect(bmi.getMessageInfo()).andReturn(mi).anyTimes();
EasyMock.expect(mi.getName()).andReturn(MESSAGE_QNAME).anyTimes();
EasyMock.expect(bmi.getBindingOperation()).andReturn(boi).anyTimes();
FaultInfo fi = control.createMock(FaultInfo.class);
bfi = control.createMock(BindingFaultInfo.class);
EasyMock.expect(bfi.getBindingOperation()).andReturn(boi).anyTimes();
EasyMock.expect(bfi.getFaultInfo()).andReturn(fi).anyTimes();
EasyMock.expect(fi.getFaultName()).andReturn(FAULT_QNAME).anyTimes();
}
}