package org.ow2.chameleon.fuchsia.importer.jaxws.test.base;
/*
* #%L
* OW2 Chameleon - Fuchsia Importer JAX-WS
* %%
* Copyright (C) 2009 - 2014 OW2 Chameleon
* %%
* Licensed 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.
* #L%
*/
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.junit.After;
import org.junit.Before;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.osgi.framework.Bundle;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.packageadmin.ExportedPackage;
import org.osgi.service.packageadmin.PackageAdmin;
import org.ow2.chameleon.fuchsia.importer.jaxws.JAXWSImporter;
import org.ow2.chameleon.fuchsia.importer.jaxws.test.ctd.ServiceForExportation;
import org.ow2.chameleon.fuchsia.importer.jaxws.test.ctd.ServiceForExportationimpl;
import java.util.Dictionary;
import static org.fest.reflect.core.Reflection.field;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
public abstract class JAXWSImporterAbstractTest {
protected static final Integer HTTP_PORT = 8043;
protected static final String ENDPOINT_URL = "http://localhost:" + HTTP_PORT + "/cxf/" + ServiceForExportation.class.getSimpleName();
protected Server httpServer;
@Mock
protected org.osgi.framework.BundleContext context;
@Mock
protected ServiceReference importerServiceRegistration;
@Mock
protected PackageAdmin packageAdminMock;
@Mock
protected ExportedPackage importPackageForClass;
@Mock
protected Bundle bundeToLoadClassFrom;
@Mock
protected ServiceRegistration proxyServiceRegistration;
protected ServiceForExportation id = spy(new ServiceForExportationimpl());
protected ServiceReference idServiceReference[] = new ServiceReference[]{id};
protected ServiceForExportation proxyRegisteredOSGi;
protected JAXWSImporter importer;
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
initializeImporter();
registerMockitoMockInterception();
startServer();
publishBean();
}
@After
public void setupClean() throws Exception {
if (httpServer != null) {
httpServer.stop();
}
importer.stop();
httpServer.stop();
}
private void registerMockitoMockInterception() {
when(context.getServiceReference(PackageAdmin.class.getName())).thenReturn(importerServiceRegistration);
when(packageAdminMock.getExportedPackage(ServiceForExportation.class.getName())).thenReturn(importPackageForClass);
when(context.getService(importerServiceRegistration)).thenReturn(packageAdminMock);
when(context.getBundle()).thenReturn(bundeToLoadClassFrom);
when(importerServiceRegistration.getProperty(org.osgi.framework.Constants.SERVICE_ID)).thenReturn(1l);
when(context.registerService(any(Class.class), any(ServiceForExportation.class), any(Dictionary.class))).thenReturn(proxyServiceRegistration);
try {
when(context.getAllServiceReferences(ServiceForExportation.class.getName(), null)).thenReturn(idServiceReference);
when(bundeToLoadClassFrom.loadClass(anyString())).thenAnswer(new Answer<Class>() {
public Class answer(InvocationOnMock invocation) throws Throwable {
return Thread.currentThread().getContextClassLoader().loadClass((String) invocation.getArguments()[0]);
}
});
} catch (InvalidSyntaxException e) {
} catch (ClassNotFoundException e) {
}
when(context.registerService(any(Class.class), any(ServiceForExportation.class), any(Dictionary.class))).thenAnswer(new Answer<ServiceRegistration>() {
public ServiceRegistration answer(InvocationOnMock invocation) throws Throwable {
ServiceRegistration proxyServiceRegistration = mock(ServiceRegistration.class);
proxyRegisteredOSGi = (ServiceForExportation) invocation.getArguments()[1];
return proxyServiceRegistration;
}
});
field("name").ofType(String.class).in(importer).set(importer.getClass().getName());
}
protected void startServer() throws Exception {
httpServer = new Server(HTTP_PORT);
Bus bus = BusFactory.getDefaultBus(true);
ContextHandlerCollection contexts = new ContextHandlerCollection();
httpServer.setHandler(contexts);
ServletContextHandler root = new ServletContextHandler(contexts, "/",
ServletContextHandler.SESSIONS);
BusFactory.setDefaultBus(bus);
CXFServlet cxf = new CXFServlet();
cxf.setBus(bus);
ServletHolder servlet = new ServletHolder(cxf);
root.addServlet(servlet, "/cxf/*");
httpServer.start();
}
protected void publishBean() {
ServerFactoryBean srvFactory = new ServerFactoryBean();
srvFactory.setServiceClass(ServiceForExportation.class);
srvFactory.setServiceBean(id);
srvFactory.setAddress("/" + srvFactory.getServiceClass().getSimpleName());
org.apache.cxf.endpoint.Server endpoint = srvFactory.create();
srvFactory.getServer().start();
}
protected void initializeImporter() {
importer = new JAXWSImporter(context);
importer.start();
}
}