blob: a2138a8a7b2fe968b245634242e0329a24923fd9 [file] [log] [blame]
/*
* Copyright (c) 2002, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.s1asdev.aod;
import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
import com.sun.enterprise.deployment.AdministeredObjectDefinitionDescriptor;
import com.sun.enterprise.deployment.Application;
import com.sun.enterprise.deployment.ResourceDescriptor;
import com.sun.enterprise.deployment.WebBundleDescriptor;
import com.sun.enterprise.deployment.archivist.ApplicationArchivist;
import com.sun.enterprise.loader.ASURLClassLoader;
import junit.framework.TestCase;
import org.glassfish.deployment.common.JavaEEResourceType;
import org.glassfish.ejb.deployment.archivist.EjbArchivist;
import org.glassfish.ejb.deployment.descriptor.EjbBundleDescriptorImpl;
import org.glassfish.ejb.deployment.descriptor.EjbDescriptor;
import org.glassfish.web.deployment.archivist.WebArchivist;
import java.io.File;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class ArchiveTest extends TestCase {
String archiveDir = null;
private static SimpleReporterAdapter stat = new SimpleReporterAdapter("appserv-tests");
protected void setUp() throws Exception {
super.setUp();
TestUtil.setupHK2();
archiveDir = System.getProperty("ArchiveDir");
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void testApplicationArchive() throws Exception{
String tcName = "administered-object-definition-application-archive-test";
try{
doTestApplicationArchive();
stat.addStatus(tcName, stat.PASS);
}catch(Exception e){
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestApplicationArchive() throws Exception{
String appArchiveName = "administered-object-definitionApp-UT";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not fing the archive "+archive.getAbsolutePath(), archive.exists());
ApplicationArchivist reader = (ApplicationArchivist) TestUtil.getByType(ApplicationArchivist.class);
reader.setAnnotationProcessingRequested(true);
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
reader.setClassLoader(classLoader);
Application applicationDesc = reader.open(archive);
// System.out.println("--------Administered object in application.xml----------");
// for( AdministeredObjectDefinitionDescriptor aodd: applicationDesc.getAdministeredObjectDefinitionDescriptors()){
// System.out.println(aodd.getDescription());
// System.out.println(aodd.getName());
// System.out.println("");
// }
Map<String,AdministeredObjectDefinitionDescriptor> expectedAODDs =
new HashMap<String,AdministeredObjectDefinitionDescriptor>();
AdministeredObjectDefinitionDescriptor desc;
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined in application DD");
desc.setName("java:global/env/AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined in application DD");
desc.setName("java:app/env/AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
TestUtil.compareAODD(expectedAODDs, applicationDesc.getResourceDescriptors(JavaEEResourceType.AODD));
}
public void testWebArchive() throws Exception{
String tcName = "administered-object-definition-web-archive-test";
try{
doTestWebArchive();
stat.addStatus(tcName, stat.PASS);
}catch(Exception e){
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestWebArchive() throws Exception{
String appArchiveName = "administered-object-definition-web";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not fing the archive "+archive.getAbsolutePath(), archive.exists());
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
WebArchivist reader = (WebArchivist) TestUtil.getByType(WebArchivist.class);
reader.setAnnotationProcessingRequested(true);
reader.setClassLoader(classLoader);
assertTrue("Archivist should handle annotations.", reader.isAnnotationProcessingRequested());
WebBundleDescriptor webDesc = reader.open(archive);
// for(AdministeredObjectDefinitionDescriptor aodd : webDesc.getAdministeredObjectDefinitionDescriptors()){
// System.out.println("Description = "+aodd.getDescription());
// System.out.println("Name = "+aodd.getName());
// System.out.println("ClassName = "+aodd.getClassName());
// System.out.println();
// }
Map<String,AdministeredObjectDefinitionDescriptor> expectedAODDs =
new HashMap<String,AdministeredObjectDefinitionDescriptor>();
AdministeredObjectDefinitionDescriptor desc;
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource to be modified by DD");
desc.setName("java:global/env/Servlet_ModByDD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:global/env/Servlet_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:app/env/Servlet_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:module/env/Servlet_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:comp/env/Servlet_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined in Web DD");
desc.setName("java:global/env/Web_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined in Web DD");
desc.setName("java:app/env/Web_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("module-scope resource defined in Web DD");
desc.setName("java:module/env/Web_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
TestUtil.compareAODD(expectedAODDs, webDesc.getResourceDescriptors(JavaEEResourceType.AODD));
}
public void testEJBArchive() throws Exception{
String tcName = "administered-object-definition-EJB-archive-test";
try{
doTestEJBArchive();
stat.addStatus(tcName, stat.PASS);
}catch(Exception e){
stat.addStatus(tcName, stat.FAIL);
throw e;
}
}
private void doTestEJBArchive() throws Exception{
String appArchiveName = "administered-object-definition-ejb";
File archive = new File(archiveDir, appArchiveName);
assertTrue("Do not fing the archive "+archive.getAbsolutePath(), archive.exists());
ASURLClassLoader classLoader = new ASURLClassLoader(this.getClass().getClassLoader());
classLoader.addURL(archive.toURL());
EjbArchivist reader = (EjbArchivist) TestUtil.getByType(EjbArchivist.class);
reader.setClassLoader(classLoader);
reader.setAnnotationProcessingRequested(true);
assertTrue("Archivist should handle annotations.", reader.isAnnotationProcessingRequested());
EjbBundleDescriptorImpl ejbBundleDesc = reader.open(archive);
Set<ResourceDescriptor> acturalAODDs = new HashSet<ResourceDescriptor>();
for( EjbDescriptor ejbDesc: ejbBundleDesc.getEjbs()){
acturalAODDs.addAll(ejbDesc.getResourceDescriptors(JavaEEResourceType.AODD));
// for( AdministeredObjectDefinitionDescriptor aodd: ejbDesc.getAdministeredObjectDefinitionDescriptors()){
// System.out.println(aodd.getDescription());
// System.out.println(aodd.getName());
// System.out.println("------------------");
// }
}
Map<String,AdministeredObjectDefinitionDescriptor> expectedAODDs =
new HashMap<String,AdministeredObjectDefinitionDescriptor>();
AdministeredObjectDefinitionDescriptor desc;
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource to be modified by DD");
desc.setName("java:global/env/HelloStatefulEJB_ModByDD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc.setDescription("global-scope resource to be modified by DD");
desc.setName("java:global/env/HelloEJB_ModByDD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
// administered-object in DD for stateful EJB
{
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined in EJB DD");
desc.setName("java:global/env/HelloStatefulEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined in EJB DD");
desc.setName("java:app/env/HelloStatefulEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("module-scope resource defined in EJB DD");
desc.setName("java:module/env/HelloStatefulEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("component-scope resource defined in EJB DD");
desc.setName("java:comp/env/HelloStatefulEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
}
// administered-object in DD for stateless EJB
{
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined in EJB DD");
desc.setName("java:global/env/HelloEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined in EJB DD");
desc.setName("java:app/env/HelloEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("module-scope resource defined in EJB DD");
desc.setName("java:module/env/HelloEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("component-scope resource defined in EJB DD");
desc.setName("java:comp/env/HelloEJB_DD_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
}
// administered-object in annotation for stateful EJB
{
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:global/env/HelloStatefulEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:app/env/HelloStatefulEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:module/env/HelloStatefulEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:comp/env/HelloStatefulEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
}
// administered-object in annotation for stateless EJB
{
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("global-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:global/env/HelloEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("application-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:app/env/HelloEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("module-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:module/env/HelloEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
desc = new AdministeredObjectDefinitionDescriptor();
desc.setDescription("component-scope resource defined by @AdministeredObjectDefinition");
desc.setName("java:comp/env/HelloEJB_Annotation_AdminObject");
desc.setInterfaceName("jakarta.jms.Destination");
desc.setClassName("connector.MyAdminObject");
desc.setResourceAdapter("aod-ra");
desc.addProperty("org.glassfish.admin-object.resType", "connector.MyAdminObject");
expectedAODDs.put(desc.getName(), desc);
}
TestUtil.compareAODD(expectedAODDs, acturalAODDs);
}
}