blob: f0d7931a654ca25e025207ad297ffa4ed26e0312 [file] [log] [blame]
/* 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.aries.ejb.container.itest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.aries.application.modelling.ExportedService;
import org.apache.aries.application.modelling.ModelledResource;
import org.apache.aries.application.modelling.ModelledResourceManager;
import org.apache.aries.application.modelling.ModellerException;
import org.apache.aries.application.modelling.ModellingManager;
import org.apache.aries.itest.AbstractIntegrationTest;
import org.apache.aries.util.filesystem.FileSystem;
import org.apache.aries.util.filesystem.ICloseableDirectory;
import org.apache.aries.util.io.IOUtils;
import org.junit.Test;
public abstract class AbstractEJBModellerTest extends AbstractIntegrationTest
{
protected ModelledResourceManager mrm;
protected ModellingManager mm;
@Test
public void modelBasicEJBBundleWithXML() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_1.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 2, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(Collections.disjoint(services, getAnnotatedservices()));
}
@Test
public void testEJBJARAndAnnotatedInZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_1.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
addToZip(zos, "beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 3, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(services.containsAll(getAnnotatedservices()));
}
@Test
public void testAnnotatedOnlyInZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_1.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 1, services.size());
assertTrue(Collections.disjoint(services, getXMLservices()));
assertTrue(services.containsAll(getAnnotatedservices()));
}
@Test
public void testEJBJARAndAnnotatedNotOnClasspathInZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_2.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
addToZip(zos, "beans/StatelessSessionBean.class", "no/beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class", "no/beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 2, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(Collections.disjoint(services, getAnnotatedservices()));
}
@Test
public void testEJBJARAndAnnotatedOnClasspathInZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_2.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
addToZip(zos, "beans/StatelessSessionBean.class", "yes/beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class", "yes/beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 3, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(services.containsAll(getAnnotatedservices()));
}
@Test
public void testEJBJARInWebZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_3.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "WEB-INF/ejb-jar.xml");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 2, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(Collections.disjoint(services, getAnnotatedservices()));
}
@Test
public void testEJBJARInWrongPlaceWebZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_3.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 0, services.size());
}
@Test
public void testEJBJARAndAnnotatedInWebZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_3.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "WEB-INF/ejb-jar.xml");
addToZip(zos, "beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 3, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(services.containsAll(getAnnotatedservices()));
}
@Test
public void testAnnotatedOnlyInWebZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_3.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 1, services.size());
assertTrue(Collections.disjoint(services, getXMLservices()));
assertTrue(services.containsAll(getAnnotatedservices()));
}
@Test
public void testEJBJARAndAnnotatedNotOnClasspathInWebZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_4.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "WEB-INF/ejb-jar.xml");
addToZip(zos, "beans/StatelessSessionBean.class", "no/beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class", "no/beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 2, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(Collections.disjoint(services, getAnnotatedservices()));
}
@Test
public void testEJBJARAndAnnotatedOnClasspathInWebZip() throws Exception {
ModelledResource mr = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(baos);
addToZip(zos, "MANIFEST_4.MF", "META-INF/MANIFEST.MF");
addToZip(zos, "ejb-jar.xml", "WEB-INF/ejb-jar.xml");
addToZip(zos, "beans/StatelessSessionBean.class", "yes/beans/StatelessSessionBean.class");
addToZip(zos, "beans/StatefulSessionBean.class", "yes/beans/StatefulSessionBean.class");
zos.close();
mr = model(baos.toByteArray());
Collection<? extends ExportedService> services =
mr.getExportedServices();
assertEquals("Wrong number of services", 3, services.size());
assertTrue(services.containsAll(getXMLservices()));
assertTrue(services.containsAll(getAnnotatedservices()));
}
private ModelledResource model(byte[] bytes) throws ModellerException {
ICloseableDirectory dir = null;
try {
dir = FileSystem.getFSRoot(
new ByteArrayInputStream(bytes));
return mrm.getModelledResource(dir);
} finally {
IOUtils.close(dir);
}
}
private Collection<ExportedService> getXMLservices() {
Map<String, Object> serviceProperties = new HashMap<String, Object>();
serviceProperties.put("ejb.name", "XML");
serviceProperties.put("ejb.type", "Singleton");
serviceProperties.put("service.exported.interfaces", "remote.Iface");
Map<String, Object> serviceProperties2 = new HashMap<String, Object>();
serviceProperties2.put("ejb.name", "XML");
serviceProperties2.put("ejb.type", "Singleton");
return Arrays.asList(mm.getExportedService("XML", 0,
Arrays.asList("remote.Iface"), serviceProperties), mm.getExportedService(
"XML", 0, Arrays.asList("local.Iface"), serviceProperties2));
}
private Collection<ExportedService> getAnnotatedservices() {
Map<String, Object> serviceProperties = new HashMap<String, Object>();
serviceProperties.put("ejb.name", "Annotated");
serviceProperties.put("ejb.type", "Stateless");
return Arrays.asList(mm.getExportedService("Annotated", 0,
Arrays.asList("beans.StatelessSessionBean"), serviceProperties));
}
private void addToZip(ZipOutputStream zos, String src) throws IOException {
addToZip(zos, src, src);
}
private void addToZip(ZipOutputStream zos, String src, String outLocation) throws IOException {
zos.putNextEntry(new ZipEntry(outLocation));
IOUtils.copy(getClass().getClassLoader().
getResourceAsStream(src), zos);
zos.closeEntry();
}
}