/**
* 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.yoko.bindings.corba.interceptors;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import junit.framework.TestCase;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.binding.BindingFactory;
import org.apache.cxf.binding.BindingFactoryManager;
import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointImpl;
import org.apache.cxf.jaxb.io.EventDataReader;
import org.apache.cxf.jaxb.io.EventDataWriter;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.ExchangeImpl;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.ServiceImpl;
import org.apache.cxf.service.model.AbstractMessageContainer;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.service.model.InterfaceInfo;
import org.apache.cxf.service.model.MessageInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.service.model.ServiceModelUtil;
import org.apache.cxf.transport.MessageObserver;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.wsdl11.WSDLServiceFactory;
import org.omg.CORBA.ORB;
import org.omg.CORBA.TypeCode;
import org.apache.schemas.yoko.bindings.corba.ArgType;
import org.apache.schemas.yoko.bindings.corba.OperationType;
import org.apache.schemas.yoko.bindings.corba.ParamType;
import org.apache.schemas.yoko.bindings.corba.TypeMappingType;
import org.apache.yoko.bindings.corba.ContextUtils;
import org.apache.yoko.bindings.corba.CorbaBindingFactory;
import org.apache.yoko.bindings.corba.CorbaConduit;
import org.apache.yoko.bindings.corba.CorbaDestination;
import org.apache.yoko.bindings.corba.CorbaMessage;
import org.apache.yoko.bindings.corba.CorbaStaxObject;
import org.apache.yoko.bindings.corba.CorbaStreamable;
import org.apache.yoko.bindings.corba.CorbaTypeMap;
import org.apache.yoko.bindings.corba.CorbaUtils;
import org.apache.yoko.bindings.corba.TestUtils;
import org.apache.yoko.bindings.corba.types.CorbaHandlerUtils;
import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
import org.apache.yoko.bindings.corba.CorbaBinding;
import org.apache.yoko.wsdl.CorbaConstants;
import org.easymock.classextension.EasyMock;
import org.easymock.classextension.IMocksControl;
public class CorbaOutInterceptorTest extends TestCase {
private static IMocksControl control;
protected Bus bus;
protected EndpointInfo endpointInfo;
protected EndpointReferenceType target;
protected MessageObserver observer;
protected Message inMessage;
TestUtils testUtils;
BindingFactory factory;
ORB orb;
public CorbaOutInterceptorTest(String arg0) {
super(arg0);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(CorbaInInterceptorTest.class);
}
protected void setUp() throws Exception {
super.setUp();
control = EasyMock.createNiceControl();
bus = BusFactory.newInstance().getDefaultBus();
BindingFactoryManager bfm = bus.getExtension(BindingFactoryManager.class);
factory = (BindingFactory)bfm.getBindingFactory("http://schemas.apache.org/yoko/bindings/corba");
bfm.registerBindingFactory(CorbaConstants.NU_WSDL_CORBA, factory);
testUtils = new TestUtils();
}
public void tearDown() {
bus.shutdown(true);
if (orb != null) {
try {
orb.destroy();
} catch (Exception ex) {
// Do nothing. Throw an Exception?
}
}
}
/*
public void testHandleMessage() throws Exception {
Method m = CorbaOutInterceptor.class.getDeclaredMethod("handleInBoundMessage",
new Class[] {CorbaMessage.class, OperationType.class});
Method m2 = CorbaOutInterceptor.class.getDeclaredMethod("getDataWriter",
new Class[] {CorbaMessage.class});
CorbaOutInterceptor outInterceptor = EasyMock.createMock(CorbaOutInterceptor.class, new Method[] {m, m2});
CorbaMessage msg = control.createMock(CorbaMessage.class);
ORB mOrb = control.createMock(ORB.class);
EasyMock.expect(msg.get("orb")).andReturn(mOrb);
Exchange exg = control.createMock(Exchange.class);
EasyMock.expect(msg.getExchange()).andReturn(exg);
ServiceInfo service = control.createMock(ServiceInfo.class);
EasyMock.expect(exg.get(ServiceInfo.class)).andReturn(service);
BindingOperationInfo bInfo = control.createMock(BindingOperationInfo.class);
OperationType opType = control.createMock(OperationType.class);
OperationInfo opInfo = control.createMock(OperationInfo.class);
EasyMock.expect(exg.get(BindingOperationInfo.class)).andReturn(bInfo);
EasyMock.expect(bInfo.getExtensor(OperationType.class)).andReturn(opType);
outInterceptor.handleInBoundMessage(msg, opType, opInfo);
EasyMock.expectLastCall();
control.replay();
outInterceptor.handleMessage(msg);
control.verify();
}
public void testHandleMessage2() throws Exception {
Method m = CorbaOutInterceptor.class.getDeclaredMethod("handleOutBoundMessage",
new Class[] {CorbaMessage.class, OperationType.class});
Method m2 = CorbaOutInterceptor.class.getDeclaredMethod("getDataWriter",
new Class[] {CorbaMessage.class});
CorbaOutInterceptor outInterceptor = EasyMock.createMock(CorbaOutInterceptor.class, new Method[] {m, m2});
CorbaMessage msg = control.createMock(CorbaMessage.class);
EasyMock.expect(msg.containsKey(Message.REQUESTOR_ROLE)).andReturn(true);
ORB mOrb = control.createMock(ORB.class);
EasyMock.expect(msg.get("orb")).andReturn(mOrb);
Exchange exg = control.createMock(Exchange.class);
EasyMock.expect(msg.getExchange()).andReturn(exg);
ServiceInfo service = control.createMock(ServiceInfo.class);
EasyMock.expect(exg.get(ServiceInfo.class)).andReturn(service);
BindingOperationInfo bInfo = control.createMock(BindingOperationInfo.class);
OperationType opType = control.createMock(OperationType.class);
OperationInfo opInfo = control.createMock(OperationInfo.class);
EasyMock.expect(exg.get(BindingOperationInfo.class)).andReturn(bInfo);
EasyMock.expect(bInfo.getExtensor(OperationType.class)).andReturn(opType);
outInterceptor.handleOutBoundMessage(msg, opType, opInfo);
EasyMock.expectLastCall();
control.replay();
outInterceptor.handleMessage(msg);
control.verify();
}
*/
// NEED TO REVISIT
/*public void testHandleOutBoundMessage() throws Exception {
Method m = CorbaOutInterceptor.class.getDeclaredMethod("getDataWriter",
new Class[] {CorbaMessage.class});
Method m1 = CorbaOutInterceptor.class.getDeclaredMethod("addMarshalParams",
new Class[] {CorbaMessage.class, List.class,
MessageInfo.class, List.class,
XMLInputFactory.class, XMLOutputFactory.class,
EventDataWriter.class});
CorbaOutInterceptor outInterceptor =
EasyMock.createMock(CorbaOutInterceptor.class, new Method[] {m, m1});
CorbaMessage message = control.createMock(CorbaMessage.class);
EventDataWriter writer = control.createMock(EventDataWriter.class);
outInterceptor.getDataWriter(message);
EasyMock.expectLastCall().andReturn(writer);
OperationType opType = control.createMock(OperationType.class);
OperationInfo opInfo = control.createMock(OperationInfo.class);
List<ParamType> paramTypes = control.createMock(List.class);
EasyMock.expect(opType.getParam()).andReturn(paramTypes);
Exchange exchange = control.createMock(Exchange.class);
Service service = control.createMock(Service.class);
DataBinding databinding = control.createMock(DataBinding.class);
EasyMock.expect(message.getExchange()).andReturn(exchange);
EasyMock.expect(ServiceModelUtil.getService(exchange)).andReturn(service);
EasyMock.expect(service.getDataBinding()).andReturn(databinding);
EasyMock.expect(databinding.getDataWriterFactory()).andReturn(null);
List<Object> args = control.createMock(List.class);
MessageInfo msgInfo = control.createMock(MessageInfo.class);
XMLInputFactory xif = control.createMock(XMLInputFactory.class);
XMLOutputFactory xof = control.createMock(XMLOutputFactory.class);
EasyMock.expect(message.getContent(List.class)).andReturn(args);
EasyMock.expect(message.get(MessageInfo.class)).andReturn(msgInfo);
outInterceptor.addMarshalParams(message, args, msgInfo, paramTypes, xif, xof, writer);
EasyMock.expectLastCall();
ArgType returnParam = EasyMock.createMock(ArgType.class);
EasyMock.expect(opType.getReturn()).andReturn(returnParam);
QName name = new QName("", "reason", "");
EasyMock.expect(returnParam.getName()).andReturn("reason");
EasyMock.expect(returnParam.getIdltype()).andReturn(name);
List<CorbaTypeMap> typeMaps = control.createMock(List.class);
//CorbaObjectHandler obj = CorbaHandlerUtils
// .initializeObjectHandler(orb, name, name, typeMaps);
CorbaStreamable streamable = EasyMock.createMock(CorbaStreamable.class);
message.setStreamableReturn(streamable);
EasyMock.expectLastCall();
control.replay();
outInterceptor.handleOutBoundMessage(message, opType, opInfo);
control.verify();
}
public void testHandleOutBoundMessage2() throws Exception {
CorbaOutInterceptor outInterceptor = new CorbaOutInterceptor();
CorbaDestination destination = testUtils.getSimpleTypesTestDestination();
endpointInfo = destination.getEndPointInfo();
Message msg = new MessageImpl();
Exchange exg = new ExchangeImpl();
exg.setDestination(destination);
Service service = new ServiceImpl(endpointInfo.getBinding().getService());
Service ser = (Service)service;
Endpoint endpoint = new EndpointImpl(bus, null, endpointInfo);
//exg.put("Service.class", service);
exg.put("org.apache.cxf.service.Service", ser);
exg.put("Endpoint.class", endpoint);
msg.setExchange(exg);
CorbaMessage message = new CorbaMessage(msg);
EventDataWriter writer = (EventDataWriter)outInterceptor.getDataWriter(message);
}*/
/* NEED TO DO
public void testHandleInBoundMessage() throws Exception {
}
public void testAddMarshalParams() throws Exception {
}*/
public void testgetDataWriter() throws Exception {
CorbaOutInterceptor outInterceptor = new CorbaOutInterceptor();
CorbaMessage message = control.createMock(CorbaMessage.class);
Exchange exchange = control.createMock(Exchange.class);
Service service = control.createMock(Service.class);
DataBinding databinding = control.createMock(DataBinding.class);
EasyMock.expect(message.getExchange()).andReturn(exchange);
EasyMock.expect(ServiceModelUtil.getService(exchange)).andReturn(service);
EasyMock.expect(service.getDataBinding()).andReturn(databinding);
control.replay();
outInterceptor.getDataWriter(message);
control.verify();
}
}