blob: b8ab63062b156c8de66328f180ef06d66c825fca [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.j2ee.bindingshelper.tests;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Path;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jst.j2ee.application.internal.operations.EARComponentImportDataModelProvider;
import org.eclipse.jst.j2ee.common.ResourceEnvRef;
import org.eclipse.jst.j2ee.common.ResourceRef;
import org.eclipse.jst.j2ee.common.SecurityRoleRef;
import org.eclipse.jst.j2ee.commonarchivecore.internal.EARFile;
import org.eclipse.jst.j2ee.commonarchivecore.internal.EJBJarFile;
import org.eclipse.jst.j2ee.commonarchivecore.internal.WARFile;
import org.eclipse.jst.j2ee.componentcore.EnterpriseArtifactEdit;
import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
import org.eclipse.jst.j2ee.core.internal.bindings.IJNDIBindingsHelper;
import org.eclipse.jst.j2ee.core.internal.bindings.JNDIBindingsHelperManager;
import org.eclipse.jst.j2ee.datamodel.properties.IEARComponentImportDataModelProperties;
import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity;
import org.eclipse.jst.j2ee.ejb.EJBJar;
import org.eclipse.jst.j2ee.ejb.Session;
import org.eclipse.jst.j2ee.webapplication.WebApp;
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.eclipse.wst.common.tests.ProjectUtility;
import org.eclipse.wtp.j2ee.headless.tests.plugin.HeadlessTestsPlugin;
public class BindingsHelperTest extends TestCase {
public static String fileSep = System.getProperty("file.separator"); //$NON-NLS-1$
public static String getFullTestDataPath(String dataPath) {
try {
String defectTestDataPath = "TestData" + fileSep + "BindingsHelperTests" + fileSep + dataPath; //$NON-NLS-1$ //$NON-NLS-2$
HeadlessTestsPlugin plugin = HeadlessTestsPlugin.getDefault();
if (plugin != null) {
return ProjectUtility.getFullFileName(plugin, defectTestDataPath);
}
return System.getProperty("user.dir") + java.io.File.separatorChar + defectTestDataPath; //$NON-NLS-1$
} catch (Exception e) {
e.printStackTrace();
}
return ""; //$NON-NLS-1$
}
private IProject earProject;
private IVirtualComponent earComponent;
protected void setUp() throws Exception {
super.setUp();
IDataModel model = importEar(getFullTestDataPath("BindingsTestEAR.ear")); //$NON-NLS-1$
earProject = ProjectUtilities.getProject(model.getStringProperty(IEARComponentImportDataModelProperties.PROJECT_NAME));
earComponent = ComponentCore.createComponent(earProject);
}
protected EARFile getEarFile() throws Exception {
EnterpriseArtifactEdit edit = null;
try {
edit = EARArtifactEdit.getEARArtifactEditForRead(earProject);
return (EARFile) edit.asArchive(true);
} finally {
if (null != edit) {
edit.dispose();
}
}
}
public static IDataModel importEar(String earPath) throws Exception {
IDataModel model = DataModelFactory.createDataModel(new EARComponentImportDataModelProvider());
model.setProperty(IEARComponentImportDataModelProperties.FILE_NAME, earPath);
model.getDefaultOperation().execute(null, null);
return model;
}
protected void tearDown() throws Exception {
super.tearDown();
IProject[] projects = ProjectUtilities.getAllProjects();
for (int i = 0; i < projects.length; i++) {
projects[i].delete(true, null);
}
}
protected String getSourceFileName() {
return "test.txt"; //$NON-NLS-1$
}
public void testHelpers() throws Exception {
// First check the default helper; i.e. no helpers enabled
IJNDIBindingsHelper[] helpers = checkHelper(null);
checkBindings(getEarFile(), helpers[0], ""); //$NON-NLS-1$
// Now check fooHelper (barHelper disabled)
IFile srcFile = earComponent.getRootFolder().getFile(getSourceFileName()).getUnderlyingFile();
IFile fooFile = earComponent.getRootFolder().getFile(FooBindingsHelper.getFileName()).getUnderlyingFile();
srcFile.copy(new Path(fooFile.getFullPath().lastSegment()), true, null);
assertTrue(fooFile.exists());
helpers = checkHelper(FooBindingsHelper.class);
checkBindings(getEarFile(), helpers[0], FooBindingsHelper.getFileName());
// Now check barHelper (fooHelper disabled)
fooFile.delete(true, null);
assertFalse(fooFile.exists());
IFile barFile = earComponent.getRootFolder().getFile(BarBindingsHelper.getFileName()).getUnderlyingFile();
srcFile.copy(new Path(barFile.getFullPath().lastSegment()), true, null);
assertTrue(barFile.exists());
helpers = checkHelper(BarBindingsHelper.class);
checkBindings(getEarFile(), helpers[0], BarBindingsHelper.getFileName());
// Now check both fooHelper and barHelper (both enabled)
srcFile.copy(new Path(fooFile.getFullPath().lastSegment()), true, null);
assertTrue(fooFile.exists());
helpers = JNDIBindingsHelperManager.getInstance().getBindingsHelpers(earProject);
assertEquals(2, helpers.length);
int fooIndex = (helpers[0].getClass() == FooBindingsHelper.class) ? 0 : 1;
int barIndex = (fooIndex == 0) ? 1 : 0;
assertTrue(helpers[fooIndex].getClass() == FooBindingsHelper.class);
assertTrue(helpers[barIndex].getClass() == BarBindingsHelper.class);
EARFile earFile = getEarFile();
IJNDIBindingsHelper[] tempHelpers = JNDIBindingsHelperManager.getInstance().getBindingsHelpers(earFile);
assertEquals(2, tempHelpers.length);
assertTrue(helpers[0] == tempHelpers[0]);
assertTrue(helpers[1] == tempHelpers[1]);
checkBindings(getEarFile(), helpers[fooIndex], FooBindingsHelper.getFileName());
checkBindings(getEarFile(), helpers[barIndex], BarBindingsHelper.getFileName());
}
private IJNDIBindingsHelper[] checkHelper(Class clazz) throws Exception {
IJNDIBindingsHelper[] helpers = JNDIBindingsHelperManager.getInstance().getBindingsHelpers(earProject);
assertEquals(1, helpers.length);
if (null != clazz) {
assertTrue(helpers[0].getClass() == clazz);
} else {
assertTrue(helpers[0].getClass() != FooBindingsHelper.class);
assertTrue(helpers[0].getClass() != BarBindingsHelper.class);
}
EARFile earFile = getEarFile();
IJNDIBindingsHelper[] tempHelpers = JNDIBindingsHelperManager.getInstance().getBindingsHelpers(earFile);
assertEquals(1, tempHelpers.length);
assertTrue(helpers[0] == tempHelpers[0]);
return helpers;
}
private void checkBindings(EARFile earFile, IJNDIBindingsHelper helper, String prefix) {
List ejbJarFiles = earFile.getEJBJarFiles();
EJBJarFile ejbJarFile = (EJBJarFile) ejbJarFiles.get(0);
EJBJar ejbJar = ejbJarFile.getDeploymentDescriptor();
List cmps = ejbJar.getContainerManagedBeans();
ContainerManagedEntity cmp = (ContainerManagedEntity) cmps.get(0);
String jndiName = helper.getJNDIName(cmp);
String suffix = prefix.length() > 0 ? TestBindingsHelper.EJB : prefix;
assertEquals(prefix + cmp.getName() + suffix, jndiName);
jndiName = helper.getJNDINameForDefaultDataSource(cmp);
suffix = prefix.length() > 0 ? TestBindingsHelper.CMP : prefix;
assertEquals(prefix + ejbJar.getDisplayName() + suffix, jndiName);
List sessions = ejbJar.getSessionBeans();
Session session = (Session) sessions.get(0);
// TODO
// List ejbRefs = session.getEjbRefs();
// EjbRef ejbRef = (EjbRef) ejbRefs.get(0);
List resRefs = session.getResourceRefs();
ResourceRef resRef = (ResourceRef) resRefs.get(0);
jndiName = helper.getJNDINameForRef(session, resRef);
suffix = prefix.length() > 0 ? TestBindingsHelper.EJB_RES_REF : prefix;
assertEquals(prefix + resRef.getName() + suffix, jndiName);
List resEnvRefs = session.getResourceEnvRefs();
ResourceEnvRef resEnvRef = (ResourceEnvRef) resEnvRefs.get(0);
jndiName = helper.getJNDINameForRef(session, resEnvRef);
suffix = prefix.length() > 0 ? TestBindingsHelper.EJB_RES_ENV_REF : prefix;
assertEquals(prefix + resEnvRef.getName() + suffix, jndiName);
List securityRoleRefs = session.getSecurityRoleRefs();
SecurityRoleRef securityRoleRef = (SecurityRoleRef) securityRoleRefs.get(0);
jndiName = helper.getJNDINameForRef(session, securityRoleRef);
suffix = prefix.length() > 0 ? TestBindingsHelper.EJB_SEC_ROLE_REF : prefix;
assertEquals(prefix + securityRoleRef.getName() + suffix, jndiName);
List warFiles = earFile.getWARFiles();
WARFile warFile = (WARFile) warFiles.get(0);
WebApp webApp = warFile.getDeploymentDescriptor();
resRefs = webApp.getResourceRefs();
resRef = (ResourceRef) resRefs.get(0);
jndiName = helper.getJNDINameForRef(webApp, resRef);
suffix = prefix.length() > 0 ? TestBindingsHelper.WEB_RES_REF : prefix;
assertEquals(prefix + resRef.getName() + suffix, jndiName);
resEnvRefs = session.getResourceEnvRefs();
resEnvRef = (ResourceEnvRef) resEnvRefs.get(0);
jndiName = helper.getJNDINameForRef(webApp, resEnvRef);
suffix = prefix.length() > 0 ? TestBindingsHelper.WEB_RES_ENV_REF : prefix;
assertEquals(prefix + resEnvRef.getName() + suffix, jndiName);
}
}