Package org.jboss.test.metadata.ejb

Source Code of org.jboss.test.metadata.ejb.AbstractEJBEverythingTest

/*
* JBoss, Home of Professional Open Source
* Copyright 2006, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.metadata.ejb;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagementType;

import junit.framework.AssertionFailedError;

import org.jboss.metadata.ApplicationMetaData;
import org.jboss.metadata.BeanMetaData;
import org.jboss.metadata.EntityMetaData;
import org.jboss.metadata.IorSecurityConfigMetaData;
import org.jboss.metadata.MessageDrivenMetaData;
import org.jboss.metadata.MetaData;
import org.jboss.metadata.RelationshipRoleMetaData;
import org.jboss.metadata.SessionMetaData;
import org.jboss.metadata.common.ejb.IEnterpriseBeanMetaData;
import org.jboss.metadata.common.ejb.IEnterpriseBeansMetaData;
import org.jboss.metadata.ejb.jboss.CacheInvalidationConfigMetaData;
import org.jboss.metadata.ejb.jboss.ClusterConfigMetaData;
import org.jboss.metadata.ejb.jboss.IORASContextMetaData;
import org.jboss.metadata.ejb.jboss.IORSASContextMetaData;
import org.jboss.metadata.ejb.jboss.IORSecurityConfigMetaData;
import org.jboss.metadata.ejb.jboss.IORTransportConfigMetaData;
import org.jboss.metadata.ejb.jboss.MethodAttributeMetaData;
import org.jboss.metadata.ejb.jboss.MethodAttributesMetaData;
import org.jboss.metadata.ejb.jboss.RemoteBindingMetaData;
import org.jboss.metadata.ejb.spec.ActivationConfigMetaData;
import org.jboss.metadata.ejb.spec.ActivationConfigPropertiesMetaData;
import org.jboss.metadata.ejb.spec.ActivationConfigPropertyMetaData;
import org.jboss.metadata.ejb.spec.AssemblyDescriptorMetaData;
import org.jboss.metadata.ejb.spec.CMRFieldMetaData;
import org.jboss.metadata.ejb.spec.ContainerTransactionMetaData;
import org.jboss.metadata.ejb.spec.ContainerTransactionsMetaData;
import org.jboss.metadata.ejb.spec.EjbJarMetaData;
import org.jboss.metadata.ejb.spec.EnterpriseBeanMetaData;
import org.jboss.metadata.ejb.spec.EntityBeanMetaData;
import org.jboss.metadata.ejb.spec.ExcludeListMetaData;
import org.jboss.metadata.ejb.spec.MessageDrivenBeanMetaData;
import org.jboss.metadata.ejb.spec.MethodInterfaceType;
import org.jboss.metadata.ejb.spec.MethodMetaData;
import org.jboss.metadata.ejb.spec.MethodParametersMetaData;
import org.jboss.metadata.ejb.spec.MethodPermissionMetaData;
import org.jboss.metadata.ejb.spec.MethodPermissionsMetaData;
import org.jboss.metadata.ejb.spec.MethodsMetaData;
import org.jboss.metadata.ejb.spec.MultiplicityType;
import org.jboss.metadata.ejb.spec.PersistenceType;
import org.jboss.metadata.ejb.spec.RelationMetaData;
import org.jboss.metadata.ejb.spec.RelationRoleMetaData;
import org.jboss.metadata.ejb.spec.RelationRoleSourceMetaData;
import org.jboss.metadata.ejb.spec.RelationsMetaData;
import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
import org.jboss.metadata.ejb.spec.SessionBeanMetaData;
import org.jboss.metadata.ejb.spec.SessionType;
import org.jboss.metadata.javaee.jboss.IgnoreDependencyMetaData;
import org.jboss.metadata.javaee.spec.PortComponent;
import org.jboss.metadata.javaee.spec.RunAsMetaData;
import org.jboss.metadata.javaee.spec.SecurityRoleRefMetaData;
import org.jboss.metadata.javaee.spec.SecurityRoleRefsMetaData;
import org.jboss.test.metadata.javaee.AbstractJavaEEEverythingTest;
import org.jboss.util.NotImplementedException;

/**
* AbstractEJBEverythingTest.
*
* @author <a href="adrian@jboss.com">Adrian Brock</a>
* @version $Revision: 1.1 $
*/
@SuppressWarnings("deprecation")
public abstract class AbstractEJBEverythingTest extends AbstractJavaEEEverythingTest
{
   public AbstractEJBEverythingTest(String name)
   {
      super(name);
   }

   protected void assertEnterpriseBeans(EjbJarMetaData ejbJarMetaData, Mode mode)
   {
      IEnterpriseBeansMetaData enterpriseBeansMetaData = ejbJarMetaData.getEnterpriseBeans();
      assertNotNull(enterpriseBeansMetaData);
      assertId("enterprise-beans", enterpriseBeansMetaData);
      assertEquals(15, enterpriseBeansMetaData.size());

      assertNullSession("session0", enterpriseBeansMetaData);
      assertFullSession("session1", enterpriseBeansMetaData, mode);
      assertFullSession("session2", enterpriseBeansMetaData, mode);
      SessionBeanMetaData session = assertSession("session3EjbName", enterpriseBeansMetaData);
      assertEquals(SessionType.Stateful, session.getSessionType());
      session = assertSession("session4EjbName", enterpriseBeansMetaData);
      assertEquals(TransactionManagementType.BEAN, session.getTransactionType());
      session = assertSession("session5EjbName", enterpriseBeansMetaData);
      SecurityIdentityMetaData securityIdentityMetaData = session.getSecurityIdentity();
      assertNotNull(securityIdentityMetaData);
      assertTrue(securityIdentityMetaData.isUseCallerId());
     
      assertNullEntity("entity0", enterpriseBeansMetaData);
      assertFullEntity("entity1", enterpriseBeansMetaData, mode);
      assertFullEntity("entity2", enterpriseBeansMetaData, mode);
      EntityBeanMetaData entity = assertEntity("entity3EjbName", enterpriseBeansMetaData);
      assertEquals(PersistenceType.Bean, entity.getPersistenceType());
      entity = assertEntity("entity4EjbName", enterpriseBeansMetaData);
      assertFalse(entity.isReentrant());
      entity = assertEntity("entity5EjbName", enterpriseBeansMetaData);
      assertEquals("1.x", entity.getCmpVersion());
      assertTrue(entity.isCMP1x());
     
      assertNullMDB("mdb0", enterpriseBeansMetaData);
      assertFullMDB("mdb1", enterpriseBeansMetaData, mode);
      assertFullMDB("mdb2", enterpriseBeansMetaData, mode);
   }

   protected void assertEnterpriseBeans(ApplicationMetaData applicationMetaData, Mode mode)
   {
      Iterator<BeanMetaData> i = applicationMetaData.getEnterpriseBeans();
      assertNotNull(i);
      int count = 0;
      while (i.hasNext())
      {
         i.next();
         ++count;
      }
     
      assertEquals(15, count);

      assertNullSession("session0", applicationMetaData);
      assertFullSession("session1", applicationMetaData, mode);
      assertFullSession("session2", applicationMetaData, mode);
      SessionMetaData session = assertSession("session3", applicationMetaData);
      assertTrue(session.isStateful());
      assertFalse(session.isStateless());
      session = assertSession("session4", applicationMetaData);
      assertTrue(session.isBeanManagedTx());
      assertFalse(session.isContainerManagedTx());
      session = assertSession("session5", applicationMetaData);
      org.jboss.metadata.SecurityIdentityMetaData securityIdentityMetaData = session.getSecurityIdentityMetaData();
      assertNotNull(securityIdentityMetaData);
      assertTrue(securityIdentityMetaData.getUseCallerIdentity());
     
      assertNullEntity("entity0", applicationMetaData);
      assertFullEntity("entity1", applicationMetaData, mode);
      assertFullEntity("entity2", applicationMetaData, mode);
      EntityMetaData entity = assertEntity("entity3EjbName", applicationMetaData);
      assertTrue(entity.isBMP());
      entity = assertEntity("entity4EjbName", applicationMetaData);
      assertFalse(entity.isReentrant());
      entity = assertEntity("entity5EjbName", applicationMetaData);
      assertTrue(entity.isCMP1x());
      assertTrue(entity.isCMP1x());
     
      assertNullMDB("mdb0", applicationMetaData);
      assertFullMDB("mdb1", applicationMetaData, mode);
      assertFullMDB("mdb2", applicationMetaData, mode);
   }
  
   protected SessionBeanMetaData assertFullSession(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData, Mode mode)
   {
      throw new NotImplementedException();
   }
   /**
    * Assert a minimal session bean. This requires an empty
    * security-identity/use-caller-identity element
    *
    * @param ejbName
    * @param enterpriseBeansMetaData
    * @return
    */
   private SessionBeanMetaData assertNullSession(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData)
   {
      SessionBeanMetaData session = assertSession(ejbName + "EjbName", enterpriseBeansMetaData);
      assertEquals(ejbName+"EjbClass", session.getEjbClass());
      assertEquals(SessionType.Stateless, session.getSessionType());
      assertEquals(TransactionManagementType.CONTAINER, session.getTransactionType());
      assertNotNull(session.getSecurityIdentity().getUseCallerIdentity());
      assertTrue(session.getSecurityIdentity().isUseCallerId());

      assertNull(session.getId());
      assertNull(session.getMappedName());
      assertNull(session.getHome());
      assertNull(session.getRemote());
      assertNull(session.getLocalHome());
      assertNull(session.getLocal());
      assertNull(session.getBusinessLocals());
      assertNull(session.getBusinessRemotes());
      assertNull(session.getServiceEndpoint());
      assertNull(session.getTimeoutMethod());
      assertNull(session.getInitMethods());
      assertNull(session.getRemoveMethods());
      assertNull(session.getAroundInvokes());
      assertNull(session.getPostActivates());
      assertNull(session.getPrePassivates());
      assertNull(session.getJndiEnvironmentRefsGroup());
      assertNull(session.getContainerTransactions());
      assertNull(session.getMethodPermissions());
      assertNull(session.getExcludeList());
      assertNull(session.getSecurityRoleRefs());
     
      return session;
   }

   protected SessionBeanMetaData assertSession(String ejbName, IEnterpriseBeansMetaData enterpriseBeansMetaData)
   {
      SessionBeanMetaData session = assertEnterpriseBean(ejbName, enterpriseBeansMetaData, SessionBeanMetaData.class);
      assertTrue(session.isSession());
      assertFalse(session.isEntity());
      assertFalse(session.isMessageDriven());
      return session;
   }

   private SessionMetaData assertFullSession(String ejbName, ApplicationMetaData applicationMetaData, Mode mode)
   {
      SessionMetaData session = assertSession(ejbName, applicationMetaData);
      assertClass(ejbName, "Home", session.getHome());
      assertClass(ejbName, "Remote", session.getRemote());
      assertClass(ejbName, "LocalHome", session.getLocalHome());
      assertClass(ejbName, "Local", session.getLocal());
      assertClass(ejbName, "ServiceEndpoint", session.getServiceEndpoint());
      assertClass(ejbName, "EjbClass", session.getEjbClass());
      assertTrue(session.isStateless());
      assertTrue(session.isContainerManagedTx());
      assertEnvironment(ejbName, session, true, mode);
      assertMethodAttributes(ejbName, session);
      assertContainerTransactions(session.getTransactionMethods());
      assertMethodPermissions(ejbName, 7, session);
      assertExcludedMethods(ejbName, session.getExcludedMethods());
      assertSecurityRoleRefs(ejbName, 2, session.getSecurityRoleReferences());
      assertSecurityIdentity(ejbName, "SecurityIdentity", session.getSecurityIdentityMetaData(), true);
     
      return session;
   }

   /**
    * Assert a minimal session.
    *
    * @param ejbName
    * @param applicationMetaData
    * @return
    */
   private SessionMetaData assertNullSession(String ejbName, ApplicationMetaData applicationMetaData)
   {
      SessionMetaData session = assertSession(ejbName, applicationMetaData);
      assertTrue(session.isStateless());
      assertTrue(session.isContainerManagedTx());
      assertEquals(ejbName+"EjbClass", session.getEjbClass());
      assertNotNull(session.getSecurityIdentityMetaData());

      assertNull(session.getHome());
      assertNull(session.getRemote());
      assertNull(session.getLocalHome());
      assertNull(session.getLocal());
      assertNull(session.getServiceEndpoint());
      assertNullEnvironment(session);
      assertDefaultMethodAttributes(ejbName, session);
      assertEmptyIterator(session.getTransactionMethods());
      assertEmptyIterator(session.getPermissionMethods());
      assertEmptyIterator(session.getExcludedMethods());
      assertEmptyIterator(session.getSecurityRoleReferences());
     
      return session;
   }
  
   private SessionMetaData assertSession(String ejbName, ApplicationMetaData applicationMetaData)
   {
      SessionMetaData session = assertEnterpriseBean(ejbName + "EjbName", applicationMetaData, SessionMetaData.class);
      assertTrue(session.isSession());
      assertFalse(session.isEntity());
      assertFalse(session.isMessageDriven());
      return session;
   }

   protected EntityBeanMetaData assertFullEntity(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData, Mode mode)
   {
      throw new NotImplementedException();
   }

   private EntityBeanMetaData assertNullEntity(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData)
   {
      EntityBeanMetaData entity = assertEntity(ejbName + "EjbName", enterpriseBeansMetaData);
      assertNullEntity(ejbName, entity);     
      return entity;
   }

   public void assertNullEntity(String ejbName, EntityBeanMetaData entity)
   {
      assertEquals(ejbName+"EjbClass", entity.getEjbClass());
      assertEquals(PersistenceType.Container, entity.getPersistenceType());
      assertEquals(ejbName+"EjbKeyClass", entity.getPrimKeyClass());

      assertNull(entity.getId());
      assertNull(entity.getMappedName());
      assertNull(entity.getHome());
      assertNull(entity.getRemote());
      assertNull(entity.getLocalHome());
      assertNull(entity.getLocal());
      assertFalse(entity.isReentrant());
      assertNull(entity.getCmpVersion());
      assertFalse(entity.isCMP1x());
      assertNull(entity.getAbstractSchemaName());
      assertNull(entity.getCmpFields());
      assertNull(entity.getPrimKeyField());
      assertNull(entity.getJndiEnvironmentRefsGroup());
      assertNull(entity.getContainerTransactions());
      assertNull(entity.getMethodPermissions());
      assertNull(entity.getExcludeList());
      assertNull(entity.getSecurityRoleRefs());
      assertNotNull(entity.getSecurityIdentity());
      assertNull(entity.getQueries());
   }
  
   protected EntityBeanMetaData assertEntity(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData)
   {
      EntityBeanMetaData entity = assertEnterpriseBean(ejbName, enterpriseBeansMetaData, EntityBeanMetaData.class);
      assertFalse(entity.isSession());
      assertTrue(entity.isEntity());
      assertFalse(entity.isMessageDriven());
      return entity;
   }

   private EntityMetaData assertFullEntity(String ejbName, ApplicationMetaData applicationMetaData, Mode mode)
   {
      EntityMetaData entity = assertEntity(ejbName + "EjbName", applicationMetaData);
      assertEquals(ejbName + "Home", entity.getHome());
      assertEquals(ejbName + "Remote", entity.getRemote());
      assertEquals(ejbName + "LocalHome", entity.getLocalHome());
      assertEquals(ejbName + "Local",entity.getLocal());
      assertEquals(ejbName + "EjbClass", entity.getEjbClass());
      assertTrue(entity.isCMP());
      assertEquals(ejbName + "PrimKeyClass", entity.getPrimaryKeyClass());
      assertTrue(entity.isReentrant());
      assertTrue(entity.isCMP2x());
      assertFalse(entity.isCMP1x());
      assertEquals(ejbName + "AbstractSchemaName", entity.getAbstractSchemaName());
      assertCmpFields(ejbName, 2, entity.getCMPFields());
      assertEquals(ejbName + "PrimKeyField",entity.getPrimKeyField());
      assertEnvironment(ejbName, entity, true, mode);
      assertMethodAttributes(ejbName, entity);
      assertMethodPermissions(ejbName, 7, entity);
      assertExcludedMethods(ejbName, entity.getExcludedMethods());
      assertSecurityRoleRefs(ejbName, 2, entity.getSecurityRoleReferences());
      assertSecurityIdentity(ejbName, "SecurityIdentity", entity.getSecurityIdentityMetaData(), true);
      assertQueries(ejbName, 3, entity.getQueries());
     
      return entity;
   }

   private EntityMetaData assertNullEntity(String ejbName, ApplicationMetaData applicationMetaData)
   {
      EntityMetaData entity = assertEntity(ejbName + "EjbName", applicationMetaData);
      assertEquals(ejbName+"EjbClass", entity.getEjbClass());
      assertEquals(ejbName+"EjbKeyClass", entity.getPrimaryKeyClass());

      assertNull(entity.getHome());
      assertNull(entity.getRemote());
      assertNull(entity.getLocalHome());
      assertNull(entity.getLocal());
      assertTrue(entity.isCMP());
      assertFalse(entity.isReentrant());
      if(applicationMetaData.isEJB2x())
         assertTrue(entity.isCMP2x());
      else
         assertFalse(entity.isCMP2x());
      assertFalse(entity.isCMP1x());
      assertNull(entity.getAbstractSchemaName());
      assertEmptyIterator(entity.getCMPFields());
      assertNull(entity.getPrimKeyField());
      assertNullEnvironment(entity);
      assertDefaultMethodAttributes(ejbName, entity);
      assertEmptyIterator(entity.getPermissionMethods());
      assertEmptyIterator(entity.getExcludedMethods());
      assertEmptyIterator(entity.getSecurityRoleReferences());
      assertNotNull(entity.getSecurityIdentityMetaData());
      assertEmptyIterator(entity.getQueries());
     
      return entity;
   }
  
   protected EntityMetaData assertEntity(String ejbName, ApplicationMetaData applicationMetaData)
   {
      EntityMetaData entity = assertEnterpriseBean(ejbName, applicationMetaData, EntityMetaData.class);
      assertFalse(entity.isSession());
      assertTrue(entity.isEntity());
      assertFalse(entity.isMessageDriven());
      return entity;
   }

   private void assertCmpFields(String ejbName, int size, Iterator<String> cmpFieldsMetaData)
   {
      assertNotNull(cmpFieldsMetaData);
      int count = 1;
      while (cmpFieldsMetaData.hasNext())
      {
         assertEquals(ejbName + "CmpField" + count, cmpFieldsMetaData.next());
         ++count;
      }
      assertEquals(size + 1, count);
   }

   private void assertQueries(String ejbName, int size, Iterator<org.jboss.metadata.QueryMetaData> queries)
   {
      assertNotNull(queries);
      int count = 1;
      while (queries.hasNext())
      {
         org.jboss.metadata.QueryMetaData query = queries.next();
         String prefix = ejbName + "Query" + count;
         assertEquals(prefix + "QueryMethod", query.getMethodName());
         assertMethodParams(prefix + "QueryMethod", 2, query.getMethodParams());
         if (count == 1 || count == 3)
            assertEquals("Local", query.getResultTypeMapping());
         else
            assertEquals("Remote", query.getResultTypeMapping());
         assertEquals(prefix + "EjbQL", query.getEjbQl());
         ++count;
      }
      assertEquals(size + 1, count);
   }

   private void assertMethodParams(String prefix, int size, Iterator<String> params)
   {
      assertNotNull(params);
      int count = 1;
      while (params.hasNext())
      {
         assertEquals(prefix + "Param" + count, params.next());
         ++count;
      }
      assertEquals(size + 1, count);
   }

   private void assertMethodParams(String prefix, int size, String[] params)
   {
      assertNotNull(params);
      assertEquals(size, params.length);
      for (int count = 1; count <= params.length; ++count)
         assertEquals(prefix + "Param" + count, params[count-1]);
   }

   protected MessageDrivenBeanMetaData assertFullMDB(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData, Mode mode)
   {
      throw new NotImplementedException();
   }

   private MessageDrivenBeanMetaData assertNullMDB(String ejbName, IEnterpriseBeansMetaData<?, ?, ?, ?> enterpriseBeansMetaData)
   {
      MessageDrivenBeanMetaData mdb = assertMDB(ejbName + "EjbName", enterpriseBeansMetaData);
      assertEquals(ejbName+"EjbClass", mdb.getEjbClass());
      assertEquals(TransactionManagementType.CONTAINER, mdb.getTransactionType());
      assertNull(mdb.getActivationConfig());
      assertNull(mdb.getMessagingType());
      assertNull(mdb.getId());
      assertNull(mdb.getMappedName());
      assertNull(mdb.getTimeoutMethod());
      assertNull(mdb.getMessageDestinationType());
      assertNull(mdb.getMessageDestinationLink());
      assertNull(mdb.getAroundInvokes());
      assertNull(mdb.getJndiEnvironmentRefsGroup());
      assertNull(mdb.getContainerTransactions());
      assertNull(mdb.getMethodPermissions());
      assertNull(mdb.getExcludeList());
      assertNotNull(mdb.getSecurityIdentity());
     
      return mdb;
   }
  
   protected MessageDrivenBeanMetaData assertMDB(String ejbName, IEnterpriseBeansMetaData enterpriseBeansMetaData)
   {
      MessageDrivenBeanMetaData mdb = assertEnterpriseBean(ejbName, enterpriseBeansMetaData, MessageDrivenBeanMetaData.class);
      assertFalse(mdb.isSession());
      assertFalse(mdb.isEntity());
      assertTrue(mdb.isMessageDriven());
      return mdb;
   }

   protected MessageDrivenMetaData assertFullMDB(String ejbName, ApplicationMetaData applicationMetaData, Mode mode)
   {
      MessageDrivenMetaData mdb = assertMDB(ejbName + "EjbName", applicationMetaData);

      assertEquals(ejbName + "EjbClass", mdb.getEjbClass());
      assertEquals(ejbName + "MessagingType", mdb.getMessagingType());
      assertTrue(mdb.isContainerManagedTx());
      assertEquals(ejbName + "MessageDestinationType", mdb.getDestinationType());
      assertEquals(ejbName + "MessageDestinationLink", mdb.getDestinationLink());
      assertActivationConfigProperties(ejbName, 2, mdb.getActivationConfigProperties());
      assertEnvironment(ejbName, mdb, true, mode);
      assertMethodAttributes(ejbName, mdb);
      assertMethodPermissions(ejbName, 7, mdb);
      assertExcludedMethods(ejbName, mdb.getExcludedMethods());
      assertSecurityIdentity(ejbName, "SecurityIdentity", mdb.getSecurityIdentityMetaData(), true);
     
      return mdb;
   }

   private MessageDrivenMetaData assertNullMDB(String ejbName, ApplicationMetaData applicationMetaData)
   {
      MessageDrivenMetaData mdb = assertMDB(ejbName + "EjbName", applicationMetaData);
      assertEquals(ejbName+"EjbClass", mdb.getEjbClass());
      assertNotNull(mdb.getSecurityIdentityMetaData());

      assertTrue(mdb.isContainerManagedTx());
      assertNull(mdb.getMessagingType());
      assertNull(mdb.getDestinationType());
      assertNull(mdb.getDestinationLink());
      assertEquals(0, mdb.getActivationConfigProperties().size());
      assertNullEnvironment(mdb);
      assertDefaultMethodAttributes(ejbName, mdb);
      assertEmptyIterator(mdb.getPermissionMethods());
      assertEmptyIterator(mdb.getExcludedMethods());
     
      return mdb;
   }

   protected void assertActivationConfig(String prefix, ActivationConfigMetaData activationConfigMetaData, Mode mode)
   {
      assertNotNull(activationConfigMetaData);
      if(mode != Mode.JBOSS_DTD)
         assertId(prefix + "ActivationConfig", activationConfigMetaData);
      assertActivationConfigProperties(prefix, 2, activationConfigMetaData.getActivationConfigProperties(), mode);
   }

   private void assertActivationConfigProperties(String prefix, int size, ActivationConfigPropertiesMetaData activationConfigPropertiesMetaData, Mode mode)
   {
      assertNotNull(activationConfigPropertiesMetaData);
      assertEquals(size, activationConfigPropertiesMetaData.size());
      int count = 1;
      for (ActivationConfigPropertyMetaData property : activationConfigPropertiesMetaData)
      {
         if(mode != Mode.JBOSS_DTD)
            assertId(prefix + "ActivationConfigProperty" + count, property);
         assertEquals(prefix + "ActivationConfigProperty" + count + "Name", property.getActivationConfigPropertyName());
         assertEquals(prefix + "ActivationConfigProperty" + count + "Value", property.getValue());
         ++count;
      }
   }

   private void assertActivationConfigProperties(String ejbName, int size, Map<String, org.jboss.metadata.ActivationConfigPropertyMetaData> activationConfigPropertiesMetaData)
   {
      assertNotNull(activationConfigPropertiesMetaData);
      assertEquals(size, activationConfigPropertiesMetaData.size());
      int count = 1;
      for (Entry<String, org.jboss.metadata.ActivationConfigPropertyMetaData> property : activationConfigPropertiesMetaData.entrySet())
      {
         String prefix = ejbName + "ActivationConfigProperty" + count;
         assertEquals(prefix + "Name", property.getKey());
         assertEquals(prefix + "Name", property.getValue().getName());
         assertEquals(prefix + "Value", property.getValue().getValue());
         ++count;
      }
   }

   protected MessageDrivenMetaData assertMDB(String ejbName, ApplicationMetaData applicationMetaData)
   {
      MessageDrivenMetaData mdb = assertEnterpriseBean(ejbName, applicationMetaData, MessageDrivenMetaData.class);
      assertFalse(mdb.isSession());
      assertFalse(mdb.isEntity());
      assertTrue(mdb.isMessageDriven());
      return mdb;
   }

   protected <T extends EnterpriseBeanMetaData> T assertEnterpriseBean(String ejbName, IEnterpriseBeansMetaData enterpriseBeansMetaData, Class<T> expected)
   {
      IEnterpriseBeanMetaData enterpriseBeanMeta = enterpriseBeansMetaData.get(ejbName);
      assertNotNull(enterpriseBeanMeta);
      assertEquals(ejbName, enterpriseBeanMeta.getEjbName());
      return expected.cast(enterpriseBeanMeta);
   }
  
   private <T extends BeanMetaData> T assertEnterpriseBean(String ejbName, ApplicationMetaData applicationMetaData, Class<T> expected)
   {
      BeanMetaData beanMeta = applicationMetaData.getBeanByEjbName(ejbName);
      assertNotNull(beanMeta);
      assertEquals(ejbName, beanMeta.getEjbName());
      return expected.cast(beanMeta);
   }
  
   protected void assertRelationships(EjbJarMetaData ejbJarMetaData)
   {
      RelationsMetaData relationsMetaData = ejbJarMetaData.getRelationships();
      assertNotNull(relationsMetaData);
      assertId("relationships", relationsMetaData);
      assertDescriptions("relationships", relationsMetaData.getDescriptions());
      assertEquals(2, relationsMetaData.size());
      int count = 1;
      for (RelationMetaData relation : relationsMetaData)
         assertRelation("relation" + (count++), relation);
   }
  
   private void assertRelation(String prefix, RelationMetaData relationMetaData)
   {
      assertId(prefix, relationMetaData);
      assertDescriptions(prefix, relationMetaData.getDescriptions());
      assertEquals(prefix + "Name", relationMetaData.getEjbRelationName());
      assertRelationRole(prefix + "Role1", MultiplicityType.One, relationMetaData.getLeftRole());
      assertRelationRole(prefix + "Role2", MultiplicityType.Many, relationMetaData.getRightRole());
      assertEquals(relationMetaData.getLeftRole(), relationMetaData.getRelatedRole(relationMetaData.getRightRole()));
      assertEquals(relationMetaData.getRightRole(), relationMetaData.getRelatedRole(relationMetaData.getLeftRole()));
      assertEquals(relationMetaData.getLeftRole(), relationMetaData.getRightRole().getRelatedRole());
      assertEquals(relationMetaData.getRightRole(), relationMetaData.getLeftRole().getRelatedRole());
   }
  
   private void assertRelationRole(String prefix, MultiplicityType multiplicity, RelationRoleMetaData relationRoleMetaData)
   {
      assertNotNull(relationRoleMetaData);
      assertId(prefix, relationRoleMetaData);
      assertDescriptions(prefix, relationRoleMetaData.getDescriptions());
      assertEquals(prefix + "Name", relationRoleMetaData.getEjbRelationshipRoleName());
      assertEquals(multiplicity, relationRoleMetaData.getMultiplicity());
      if (multiplicity == MultiplicityType.Many)
      {
         assertTrue(relationRoleMetaData.isMultiplicityMany());
         assertFalse(relationRoleMetaData.isMultiplicityOne());
      }
      else
      {
         assertFalse(relationRoleMetaData.isMultiplicityMany());
         assertTrue(relationRoleMetaData.isMultiplicityOne());
      }
      assertEmpty(prefix, "CascadeDelete", relationRoleMetaData.getCascadeDelete());
      assertTrue(relationRoleMetaData.isCascadedDelete());
      assertRelationRoleSource(prefix + "RoleSource", relationRoleMetaData.getRoleSource());
      assertCmrField(prefix + "CmrField", relationRoleMetaData.getCmrField());
   }
  
   private void assertRelationRoleSource(String prefix, RelationRoleSourceMetaData relationRoleSourceMetaData)
   {
      assertNotNull(relationRoleSourceMetaData);
      assertId(prefix, relationRoleSourceMetaData);
      assertDescriptions(prefix, relationRoleSourceMetaData.getDescriptions());
      // Hard-coded to the last entity ejb-name
      assertEquals("entity5EjbName", relationRoleSourceMetaData.getEjbName());
   }

   private void assertCmrField(String prefix, CMRFieldMetaData cmrFieldMetaData)
   {
      assertNotNull(cmrFieldMetaData);
      assertId(prefix, cmrFieldMetaData);
      assertDescriptions(prefix, cmrFieldMetaData.getDescriptions());
      assertEquals(prefix + "Name", cmrFieldMetaData.getCmrFieldName());
      // All use java.util.Set
      assertEquals("java.util.Set", cmrFieldMetaData.getCmrFieldType());
   }
  
   protected void assertRelationships(ApplicationMetaData applicationMetaData)
   {
      Iterator<org.jboss.metadata.RelationMetaData> i = applicationMetaData.getRelationships();
      assertNotNull(i);
      int count = 1;
      while (i.hasNext())
      {
         org.jboss.metadata.RelationMetaData relation = i.next();
         assertRelation("relation" + (count++), relation);
      }
      assertEquals(3, count);
   }
  
   private void assertRelation(String prefix, org.jboss.metadata.RelationMetaData relationMetaData)
   {
      assertEquals(prefix + "Name", relationMetaData.getRelationName());
      assertRelationRole(prefix + "Role1", false, relationMetaData.getLeftRelationshipRole());
      assertRelationRole(prefix + "Role2", true, relationMetaData.getRightRelationshipRole());
      assertEquals(relationMetaData.getLeftRelationshipRole(), relationMetaData.getOtherRelationshipRole(relationMetaData.getRightRelationshipRole()));
      assertEquals(relationMetaData.getRightRelationshipRole(), relationMetaData.getOtherRelationshipRole(relationMetaData.getLeftRelationshipRole()));
      assertEquals(relationMetaData.getLeftRelationshipRole(), relationMetaData.getRightRelationshipRole().getRelatedRoleMetaData());
      assertEquals(relationMetaData.getRightRelationshipRole(), relationMetaData.getLeftRelationshipRole().getRelatedRoleMetaData());
   }
  
   private void assertRelationRole(String prefix, boolean many, RelationshipRoleMetaData relationRoleMetaData)
   {
      assertNotNull(relationRoleMetaData);
      assertEquals(prefix + "Name", relationRoleMetaData.getRelationshipRoleName());
      if (many)
      {
         assertTrue(relationRoleMetaData.isMultiplicityMany());
         assertFalse(relationRoleMetaData.isMultiplicityOne());
      }
      else
      {
         assertFalse(relationRoleMetaData.isMultiplicityMany());
         assertTrue(relationRoleMetaData.isMultiplicityOne());
      }
      assertTrue(relationRoleMetaData.isCascadeDelete());
      // All use the last entity ejb-name
      assertEquals("entity5EjbName", relationRoleMetaData.getEntityName());
      assertEquals(prefix + "CmrFieldName", relationRoleMetaData.getCMRFieldName());
      // All use java.util.Set
      assertEquals("java.util.Set", relationRoleMetaData.getCMRFieldType());
   }
  
   protected AssemblyDescriptorMetaData assertAssemblyDescriptor(EjbJarMetaData ejbJarMetaData)
   {
      AssemblyDescriptorMetaData assemblyDescriptorMetaData = (AssemblyDescriptorMetaData) ejbJarMetaData.getAssemblyDescriptor();
      assertNotNull(assemblyDescriptorMetaData);
      assertId("assembly-descriptor", assemblyDescriptorMetaData);
      assertSecurityRoles(2, assemblyDescriptorMetaData.getSecurityRoles(), Mode.SPEC);
      assertMethodPermissions(null, "methodPermission", 21, 3, assemblyDescriptorMetaData.getMethodPermissions());
      assertContainerTransactions(null, 42, 6, assemblyDescriptorMetaData.getContainerTransactions());
      assertMessageDestinations(2, assemblyDescriptorMetaData.getMessageDestinations(), Mode.SPEC);
      assertExcludeList(null, 35, 5, assemblyDescriptorMetaData.getExcludeList());
      return assemblyDescriptorMetaData;
   }
  
   protected void assertAssemblyDescriptor(ApplicationMetaData applicationMetaData)
   {
      org.jboss.metadata.AssemblyDescriptorMetaData assemblyDescriptorMetaData = applicationMetaData.getAssemblyDescriptor();
      assertNotNull(assemblyDescriptorMetaData);
      assertSecurityRoles(2, assemblyDescriptorMetaData.getSecurityRoles());
      assertMessageDestination("messageDestination1", assemblyDescriptorMetaData.getMessageDestinationMetaData("messageDestination1Name"));
      assertMessageDestination("messageDestination2", assemblyDescriptorMetaData.getMessageDestinationMetaData("messageDestination2Name"));
   }

   protected void assertMethodPermissions(String ejbName, String prefix, int size, int limit, MethodPermissionsMetaData methodPermissionsMetaData)
   {
      assertNotNull("method permissions is null", methodPermissionsMetaData);
      assertEquals(size, methodPermissionsMetaData.size());
      int count = 1;
      for (MethodPermissionMetaData methodPermissionMetaData : methodPermissionsMetaData)
      {
         assertId(prefix + count, methodPermissionMetaData);
         assertDescriptions(prefix + count, methodPermissionMetaData.getDescriptions());
         if (count == 1)
         {
            assertEmpty(prefix + count, "Unchecked", methodPermissionMetaData.getUnchecked());
            assertTrue(methodPermissionMetaData.isNotChecked());
         }
         else
         {
            assertRolesNames(prefix + count, 2, methodPermissionMetaData.getRoles());
            assertFalse(methodPermissionMetaData.isNotChecked());
         }
         if (count == 1)
            assertMethods(ejbName, prefix + count + "Method", 5, methodPermissionMetaData.getMethods());
         else
            assertMethods(ejbName, prefix + count + "Method", 1, methodPermissionMetaData.getMethods());
         ++count;
         if (count > limit)
            break;
      }
   }

   private void assertMethodPermissions(String nameBase, int size, BeanMetaData beanMetaData)
   {
      int count = 1;
      Iterator<org.jboss.metadata.MethodMetaData> methods = beanMetaData.getPermissionMethods();
      assertNotNull(methods);
      while(methods.hasNext())
      {
         String permissionPrefix = null;
         if (count <= 5)
            permissionPrefix = nameBase + "MethodPermission1";
         else if (count == 6)
            permissionPrefix = nameBase + "MethodPermission2";
         else if (count == 7)
            permissionPrefix = nameBase + "MethodPermission3";

         org.jboss.metadata.MethodMetaData<?> methodMetaData = methods.next();
         if (count <= 5)
         {
            assertEmpty(methodMetaData.getRoles());
            assertTrue(methodMetaData.isUnchecked());
         }
         else
         {
            assertRolesNames(permissionPrefix, 2, methodMetaData.getRoles());
            assertFalse(methodMetaData.isUnchecked());
         }
         assertEquals(beanMetaData.getEjbName(), methodMetaData.getEjbName());
         assertTrue(methodMetaData.isIntfGiven());
         if (count == 1)
         {
            assertEquals(org.jboss.metadata.MethodMetaData.HOME_TYPE, methodMetaData.getInterfaceType());
            assertTrue(methodMetaData.isHomeMethod());
            assertFalse(methodMetaData.isRemoteMethod());
            assertFalse(methodMetaData.isLocalHomeMethod());
            assertFalse(methodMetaData.isLocalMethod());
            assertFalse(methodMetaData.isServiceEndpointMethod());
            String prefix = permissionPrefix + "Method1";
            assertEquals(prefix + "MethodName", methodMetaData.getMethodName());
            assertTrue(methodMetaData.isParamGiven());
            assertMethodParams(prefix, 2, methodMetaData.getMethodParams());
         }
         else if (count == 2)
         {
            assertEquals(org.jboss.metadata.MethodMetaData.REMOTE_TYPE, methodMetaData.getInterfaceType());
            assertFalse(methodMetaData.isHomeMethod());
            assertTrue(methodMetaData.isRemoteMethod());
            assertFalse(methodMetaData.isLocalHomeMethod());
            assertFalse(methodMetaData.isLocalMethod());
            assertFalse(methodMetaData.isServiceEndpointMethod());
            String prefix = permissionPrefix + "Method2";
            assertEquals(prefix + "MethodName", methodMetaData.getMethodName());
            assertFalse(methodMetaData.isParamGiven());
         }
         else if (count == 3)
         {
            assertEquals(org.jboss.metadata.MethodMetaData.LOCAL_HOME_TYPE, methodMetaData.getInterfaceType());
            assertFalse(methodMetaData.isHomeMethod());
            assertFalse(methodMetaData.isRemoteMethod());
            assertTrue(methodMetaData.isLocalHomeMethod());
            assertFalse(methodMetaData.isLocalMethod());
            assertFalse(methodMetaData.isServiceEndpointMethod());
            String prefix = permissionPrefix + "Method3";
            assertEquals(prefix + "MethodName", methodMetaData.getMethodName());
            assertFalse(methodMetaData.isParamGiven());
         }
         else if (count == 4)
         {
            assertEquals(org.jboss.metadata.MethodMetaData.LOCAL_TYPE, methodMetaData.getInterfaceType());
            assertFalse(methodMetaData.isHomeMethod());
            assertFalse(methodMetaData.isRemoteMethod());
            assertFalse(methodMetaData.isLocalHomeMethod());
            assertTrue(methodMetaData.isLocalMethod());
            assertFalse(methodMetaData.isServiceEndpointMethod());
            String prefix = permissionPrefix + "Method4";
            assertEquals(prefix + "MethodName", methodMetaData.getMethodName());
            assertFalse(methodMetaData.isParamGiven());
         }
         else if (count == 5)
         {
            assertEquals(org.jboss.metadata.MethodMetaData.SERVICE_ENDPOINT_TYPE, methodMetaData.getInterfaceType());
            assertFalse(methodMetaData.isHomeMethod());
            assertFalse(methodMetaData.isRemoteMethod());
            assertFalse(methodMetaData.isLocalHomeMethod());
            assertFalse(methodMetaData.isLocalMethod());
            assertTrue(methodMetaData.isServiceEndpointMethod());
            String prefix = permissionPrefix + "Method5";
            assertEquals(prefix + "MethodName", methodMetaData.getMethodName());
            assertFalse(methodMetaData.isParamGiven());
         }
         else if (count > 5)
         {
            assertEquals(org.jboss.metadata.MethodMetaData.HOME_TYPE, methodMetaData.getInterfaceType());
            assertTrue(methodMetaData.isHomeMethod());
            assertFalse(methodMetaData.isRemoteMethod());
            assertFalse(methodMetaData.isLocalHomeMethod());
            assertFalse(methodMetaData.isLocalMethod());
            assertFalse(methodMetaData.isServiceEndpointMethod());
            String prefix = permissionPrefix + "Method1";
            assertEquals(prefix + "MethodName", methodMetaData.getMethodName());
            assertMethodParams(prefix, 2, methodMetaData.getMethodParams());
         }
         ++count;
      }
      assertEquals(beanMetaData.getEjbName(), size, count-1);
   }
  
   private void assertRolesNames(String prefix, int size, Set<String> roles)
   {
      assertNotNull(roles);
      assertEquals(size, roles.size());
      int count = 0;
      while (++count <= roles.size())
      {
         assertTrue(roles.contains(prefix + "RoleName" + count));
      }
   }

   private void assertMethods(String ejbName, String prefix, int size, MethodsMetaData methodsMetaData)
   {
      assertMethods(ejbName, prefix, size, size, methodsMetaData);
   }

   private void assertMethods(String ejbName, String prefix, int size, int limit, MethodsMetaData methodsMetaData)
   {
      assertNotNull(methodsMetaData);
      assertEquals(size, methodsMetaData.size());
      int count = 1;
      for (MethodMetaData methodMetaData : methodsMetaData)
      {
         assertId(prefix + count, methodMetaData);
         assertDescriptions(prefix + count, methodMetaData.getDescriptions());
         if (ejbName == null)
            assertEquals(prefix + count + "EjbName", methodMetaData.getEjbName());
         else
            assertEquals(ejbName + "EjbName", methodMetaData.getEjbName());
         if (count == 1)
            assertEquals(MethodInterfaceType.Home, methodMetaData.getMethodIntf());
         else if (count == 2)
            assertEquals(MethodInterfaceType.Remote, methodMetaData.getMethodIntf());
         else if (count == 3)
            assertEquals(MethodInterfaceType.LocalHome, methodMetaData.getMethodIntf());
         else if (count == 4)
            assertEquals(MethodInterfaceType.Local, methodMetaData.getMethodIntf());
         else
            assertEquals(MethodInterfaceType.ServiceEndpoint, methodMetaData.getMethodIntf());
         assertEquals(prefix + count + "MethodName", methodMetaData.getMethodName());
         if (count == 1)
            assertMethodParams(prefix + count, 2, methodMetaData.getMethodParams());
         ++count;
         if (count > limit)
            break;
      }
   }

   private void assertMethods(String ejbName, String prefix, int size, Iterator<org.jboss.metadata.MethodMetaData> methods)
   {
      assertNotNull(methods);
      int count = 1;
      while (methods.hasNext())
      {
         org.jboss.metadata.MethodMetaData methodMetaData = methods.next();
         if (ejbName == null)
            assertEquals(prefix + count + "EjbName", methodMetaData.getEjbName());
         else
            assertEquals(ejbName, methodMetaData.getEjbName());
         if (count == 1)
            assertEquals(org.jboss.metadata.MethodMetaData.HOME_TYPE, methodMetaData.getInterfaceType());
         else if (count == 2)
            assertEquals(org.jboss.metadata.MethodMetaData.REMOTE_TYPE, methodMetaData.getInterfaceType());
         else if (count == 3)
            assertEquals(org.jboss.metadata.MethodMetaData.LOCAL_HOME_TYPE, methodMetaData.getInterfaceType());
         else if (count == 4)
            assertEquals(org.jboss.metadata.MethodMetaData.LOCAL_TYPE, methodMetaData.getInterfaceType());
         else
            assertEquals(org.jboss.metadata.MethodMetaData.SERVICE_ENDPOINT_TYPE, methodMetaData.getInterfaceType());
         assertEquals(prefix + count + "MethodName", methodMetaData.getMethodName());
         if (count == 1)
            assertMethodParams(prefix + count, 2, methodMetaData.getMethodParams());
         ++count;
      }
      assertEquals(size, count-1);
   }

   protected void assertMethodParams(String prefix, int size, MethodParametersMetaData methodParametersMetaData)
   {
      assertNotNull(methodParametersMetaData);
      assertEquals(size, methodParametersMetaData.size());
      int count = 1;
      for (String parameter : methodParametersMetaData)
         assertEquals(prefix + "Param" + (count++), parameter);
   }

   protected void assertContainerTransactions(String ejbName, int size, int limit, ContainerTransactionsMetaData containerTransactionsMetaData)
   {
      assertNotNull("container transactions is null", containerTransactionsMetaData);
      assertEquals(size, containerTransactionsMetaData.size());
      int count = 1;
      String prefix;
      if (ejbName == null)
         prefix = "containerTransaction";
      else
         prefix = ejbName + "ContainerTransaction";
      for (ContainerTransactionMetaData containerTransactionMetaData : containerTransactionsMetaData)
      {
         assertId(prefix + count, containerTransactionMetaData);
         assertDescriptions(prefix + count, containerTransactionMetaData.getDescriptions());
         if (count == 1)
            assertMethods(ejbName, prefix + count + "Method", 5, containerTransactionMetaData.getMethods());
         else
            assertMethods(ejbName, prefix + count + "Method", 1, containerTransactionMetaData.getMethods());
         if (count == 1)
            assertEquals(TransactionAttributeType.NOT_SUPPORTED, containerTransactionMetaData.getTransAttribute());
         else if (count == 2)
            assertEquals(TransactionAttributeType.SUPPORTS, containerTransactionMetaData.getTransAttribute());
         else if (count == 3)
            assertEquals(TransactionAttributeType.REQUIRED, containerTransactionMetaData.getTransAttribute());
         else if (count == 4)
            assertEquals(TransactionAttributeType.REQUIRES_NEW, containerTransactionMetaData.getTransAttribute());
         else if (count == 5)
            assertEquals(TransactionAttributeType.MANDATORY, containerTransactionMetaData.getTransAttribute());
         else
            assertEquals(TransactionAttributeType.NEVER, containerTransactionMetaData.getTransAttribute());
         ++count;
         if (count > limit)
            break;
      }
   }

   private void assertContainerTransactions(Iterator<org.jboss.metadata.MethodMetaData> transactions)
   {
      assertNotNull(transactions);
      int count = 1;
      while(transactions.hasNext())
      {
         org.jboss.metadata.MethodMetaData<?> method = transactions.next();
         if (count <= 5)
            assertEquals(MetaData.TX_NOT_SUPPORTED, method.getTransactionType());
         else if (count == 6)
            assertEquals(MetaData.TX_SUPPORTS, method.getTransactionType());
         else if (count == 7)
            assertEquals(MetaData.TX_REQUIRED, method.getTransactionType());
         else if (count == 8)
            assertEquals(MetaData.TX_REQUIRES_NEW, method.getTransactionType());
         else if (count == 9)
            assertEquals(MetaData.TX_MANDATORY, method.getTransactionType());
         else
            assertEquals(MetaData.TX_NEVER, method.getTransactionType());
         ++count;
      }
      assertEquals(10, count-1);
   }

   protected void assertExcludeList(String ejbName, int size, int limit, ExcludeListMetaData excludeListMetaData)
   {
      assertNotNull("exclude list is null", excludeListMetaData);
      assertId("excludeList", excludeListMetaData);
      assertDescriptions("excludeList", excludeListMetaData.getDescriptions());
      if (ejbName != null)
         assertMethods(ejbName, ejbName + "ExcludeListMethod", size, limit, excludeListMetaData.getMethods());
      else
         assertMethods(null, "excludeListMethod", size, limit, excludeListMetaData.getMethods());
   }

   private void assertExcludedMethods(String ejbName, Iterator<org.jboss.metadata.MethodMetaData> excluded)
   {
      assertMethods(ejbName + "EjbName", ejbName + "ExcludeListMethod", 5, excluded);
   }
  
   protected void assertEnvironment(String prefix, BeanMetaData bean, boolean full, Mode mode)
   {
      if (full)
         assertEnvEntries(prefix, 2, bean.getEnvironmentEntries(), full);
      assertEjbRefs(prefix, 2, bean.getEjbReferences(), full, mode);
      assertEjbLocalRefs(prefix, 2, bean.getEjbLocalReferences(), full, mode);
      // TODO webservice service references
      assertResourceRefs(prefix, 2, bean.getResourceReferences(), full, mode);
      assertResourceEnvRefs(prefix, 2, bean.getResourceEnvReferences(), full, mode);
      assertMessageDestinationRefs(prefix, 3, bean.getMessageDestinationReferences(), full);
   }

   protected void assertNullEnvironment(BeanMetaData bean)
   {
      assertEmptyIterator(bean.getEnvironmentEntries());
      assertEmptyIterator(bean.getEjbReferences());
      assertEmptyIterator(bean.getEjbLocalReferences());
      // TODO webservice service references
      assertEmptyIterator(bean.getResourceReferences());
      assertEmptyIterator(bean.getResourceEnvReferences());
      assertEmptyIterator(bean.getMessageDestinationReferences());
   }
  
   protected void assertSecurityIdentity(String ejbName, String type, SecurityIdentityMetaData securityIdentity, boolean full, Mode mode)
   {
      assertNotNull(ejbName, securityIdentity);
      String prefix = ejbName + type;
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, securityIdentity);
         assertDescriptions(prefix, securityIdentity.getDescriptions());
      }
      if (full)
      {
         assertRunAs(ejbName, type, securityIdentity.getRunAs());
      }
   }
  
   protected void assertSecurityIdentity(String ejbName, String type, org.jboss.metadata.SecurityIdentityMetaData securityIdentity, boolean full)
   {
      assertNotNull(ejbName, securityIdentity);
      String prefix = ejbName + type;
      assertEquals("en-" + prefix + "-desc", securityIdentity.getDescription());
      if (full)
      {
         assertEquals(prefix + "RunAsRoleName", securityIdentity.getRunAsRoleName());
      }
   }

   protected void assertRunAs(String prefix, String type, RunAsMetaData runAsMetaData)
   {
      assertNotNull(runAsMetaData);
      assertId(prefix + type + "RunAs", runAsMetaData);
      assertDescriptions(prefix + type + "RunAs", runAsMetaData.getDescriptions());
      assertEquals(prefix + type + "RunAsRoleName", runAsMetaData.getRoleName());
   }

   protected void assertSecurityRoleRefs(String ejbName, int size, SecurityRoleRefsMetaData securityRoleRefsMetaData)
   {
      assertNotNull(securityRoleRefsMetaData);
      assertEquals(size, securityRoleRefsMetaData.size());
      int count = 1;
      for (SecurityRoleRefMetaData securityRoleRefMetaData : securityRoleRefsMetaData)
      {
         assertId(ejbName + "SecurityRoleRef" + count, securityRoleRefMetaData);
         assertDescriptions(ejbName + "SecurityRoleRef" + count, securityRoleRefMetaData.getDescriptions());
         assertEquals(ejbName + "SecurityRoleRef" + count + "RoleName", securityRoleRefMetaData.getRoleName());
         assertEquals("securityRoleRef" + count + "RoleLink", securityRoleRefMetaData.getRoleLink());
         ++count;
      }
   }

   protected void assertSecurityRoleRefs(String ejbName, int size, Iterator<org.jboss.metadata.SecurityRoleRefMetaData> securityRoleRefs)
   {
      assertNotNull(securityRoleRefs);
      int count = 1;
      while (securityRoleRefs.hasNext())
      {
         org.jboss.metadata.SecurityRoleRefMetaData securityRoleRefMetaData = securityRoleRefs.next();
         assertEquals("en-" + ejbName + "SecurityRoleRef" + count + "-desc", securityRoleRefMetaData.getDescription());
         assertEquals(ejbName + "SecurityRoleRef" + count + "RoleName", securityRoleRefMetaData.getName());
         assertEquals("securityRoleRef" + count + "RoleLink", securityRoleRefMetaData.getLink());
         ++count;
      }
      assertEquals(ejbName, size, count-1);
   }

   protected void assertClusterConfig(String prefix, ClusterConfigMetaData clusterConfig, boolean isSession, Mode mode)
   {
      assertNotNull(clusterConfig);
      prefix = prefix + "ClusterConfig";
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, clusterConfig);
         assertDescriptions(prefix, clusterConfig.getDescriptions());
      }
      assertEquals(prefix + "PartitionName", clusterConfig.getPartitionName());
      assertEquals(prefix + "HomeLoadBalancePolicy", clusterConfig.getHomeLoadBalancePolicy());
      assertEquals(prefix + "BeanLoadBalancePolicy", clusterConfig.getBeanLoadBalancePolicy());
      if (isSession)
         assertEquals(prefix + "SessionStateManagerJndiName", clusterConfig.getSessionStateManagerJndiName());
   }

   protected void assertClusterConfig(String prefix, org.jboss.metadata.ClusterConfigMetaData clusterConfig, boolean isSession)
   {
      assertNotNull(clusterConfig);
      prefix = prefix + "ClusterConfig";
      assertEquals(prefix + "PartitionName", clusterConfig.getPartitionName());
      assertEquals(prefix + "HomeLoadBalancePolicy", clusterConfig.getHomeLoadBalancePolicy());
      assertEquals(prefix + "BeanLoadBalancePolicy", clusterConfig.getBeanLoadBalancePolicy());
      if (isSession)
         assertEquals(prefix + "SessionStateManagerJndiName", clusterConfig.getHaSessionStateName());
   }

   protected void assertCacheInvalidationConfig(String prefix, CacheInvalidationConfigMetaData invalidationConfig, Mode mode)
   {
      assertNotNull(invalidationConfig);
      prefix = prefix + "CacheInvalidationConfig";
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, invalidationConfig);
         assertDescriptions(prefix, invalidationConfig.getDescriptions());
      }
      assertEquals(prefix + "InvalidationGroupName", invalidationConfig.getInvalidationGroupName());
      assertEquals(prefix + "InvalidationManagerName", invalidationConfig.getInvalidationManagerName());
   }

   protected void assertCacheInvalidationConfig(String prefix, org.jboss.metadata.CacheInvalidationConfigMetaData invalidationConfig)
   {
      assertNotNull(invalidationConfig);
      prefix = prefix + "CacheInvalidationConfig";
      assertEquals(prefix + "InvalidationGroupName", invalidationConfig.getInvalidationGroupName());
      assertEquals(prefix + "InvalidationManagerName", invalidationConfig.getInvalidationManagerName());
   }

   protected void assertIORSecurityConfig(String ejbName, IORSecurityConfigMetaData iorSecurityConfig, Mode mode)
   {
      assertNotNull(iorSecurityConfig);
      String prefix = ejbName + "IorSecurityConfig";
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, iorSecurityConfig);
         assertDescriptions(prefix, iorSecurityConfig.getDescriptions());
      }
      assertIORTransportConfig(ejbName, iorSecurityConfig.getTransportConfig(), mode);
      assertIORASContext(ejbName, iorSecurityConfig.getAsContext(), mode);
      assertIORSASContext(ejbName, iorSecurityConfig.getSasContext(), mode);
   }
   protected void assertPortComponent(String prefix, PortComponent portComponent, Mode mode)
   {
      assertNotNull(portComponent);
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix+"PortComponent", portComponent);
         assertEquals(true, portComponent.getSecureWSDLAccess());
      }
      assertEquals(prefix+"-PortComponent", portComponent.getPortComponentName());
      assertEquals("/"+prefix+"/PortComponentURI", portComponent.getPortComponentURI());
      assertEquals("BASIC", portComponent.getAuthMethod());
      assertEquals("NONE", portComponent.getTransportGuarantee());
   }
   protected void assertIORSecurityConfig(String ejbName, IorSecurityConfigMetaData iorSecurityConfig)
   {
      assertNotNull(iorSecurityConfig);
      assertIORTransportConfig(ejbName, iorSecurityConfig.getTransportConfig());
      assertIORASContext(ejbName, iorSecurityConfig.getAsContext());
      assertIORSASContext(ejbName, iorSecurityConfig.getSasContext());
   }

   protected void assertIORTransportConfig(String ejbName, IORTransportConfigMetaData iorTransportConfig, Mode mode)
   {
      assertNotNull(iorTransportConfig);
      String prefix = ejbName + "TransportConfig";
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, iorTransportConfig);
         assertDescriptions(prefix, iorTransportConfig.getDescriptions());
      }
      assertEquals(IORTransportConfigMetaData.INTEGRITY_NONE, iorTransportConfig.getIntegrity());
      assertEquals(IORTransportConfigMetaData.CONFIDENTIALITY_NONE, iorTransportConfig.getConfidentiality());
      assertEquals(IORTransportConfigMetaData.ESTABLISH_TRUST_IN_TARGET_NONE, iorTransportConfig.getEstablishTrustInTarget());
      assertEquals(IORTransportConfigMetaData.ESTABLISH_TRUST_IN_CLIENT_NONE, iorTransportConfig.getEstablishTrustInClient());
      assertEquals(IORTransportConfigMetaData.DETECT_MISORDERING_NONE, iorTransportConfig.getDetectMisordering());
      assertEquals(IORTransportConfigMetaData.DETECT_REPLAY_NONE, iorTransportConfig.getDetectReplay());
   }

   protected void assertIORTransportConfig(String ejbName, IorSecurityConfigMetaData.TransportConfig iorTransportConfig)
   {
      assertNotNull(iorTransportConfig);
      assertEquals(IORTransportConfigMetaData.INTEGRITY_NONE, iorTransportConfig.getIntegrity());
      assertEquals(IORTransportConfigMetaData.CONFIDENTIALITY_NONE, iorTransportConfig.getConfidentiality());
      assertEquals(IORTransportConfigMetaData.ESTABLISH_TRUST_IN_TARGET_NONE, iorTransportConfig.getEstablishTrustInTarget());
      assertEquals(IORTransportConfigMetaData.ESTABLISH_TRUST_IN_CLIENT_NONE, iorTransportConfig.getEstablishTrustInClient());
      assertEquals(IORTransportConfigMetaData.DETECT_MISORDERING_NONE, iorTransportConfig.getDetectMisordering());
      assertEquals(IORTransportConfigMetaData.DETECT_REPLAY_NONE, iorTransportConfig.getDetectReplay());
   }

   protected void assertIORASContext(String ejbName, IORASContextMetaData asContext, Mode mode)
   {
      assertNotNull(asContext);
      String prefix = ejbName + "ASContext";
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, asContext);
         assertDescriptions(prefix, asContext.getDescriptions());
      }
      assertEquals(IORASContextMetaData.AUTH_METHOD_USERNAME_PASSWORD, asContext.getAuthMethod());
      assertEquals(prefix + "Realm", asContext.getRealm());
      assertFalse(asContext.isRequired());
   }

   protected void assertIORASContext(String ejbName, IorSecurityConfigMetaData.AsContext asContext)
   {
      assertNotNull(asContext);
      String prefix = ejbName + "ASContext";
      assertEquals(IORASContextMetaData.AUTH_METHOD_USERNAME_PASSWORD, asContext.getAuthMethod());
      assertEquals(prefix + "Realm", asContext.getRealm());
      assertFalse(asContext.isRequired());
   }

   protected void assertIORSASContext(String ejbName, IORSASContextMetaData sasContext, Mode mode)
   {
      assertNotNull(sasContext);
      String prefix = ejbName + "SASContext";
      if(mode != Mode.JBOSS_DTD)
      {
         assertId(prefix, sasContext);
         assertDescriptions(prefix, sasContext.getDescriptions());
      }
      assertEquals(IORSASContextMetaData.CALLER_PROPAGATION_NONE, sasContext.getCallerPropagation());
   }

   protected void assertIORSASContext(String ejbName, IorSecurityConfigMetaData.SasContext sasContext)
   {
      assertNotNull(sasContext);
      assertEquals(IORSASContextMetaData.CALLER_PROPAGATION_NONE, sasContext.getCallerPropagation());
   }

   protected void assertIgnoreDependency(String ejbName, IgnoreDependencyMetaData ignoreDependency)
   {
      assertNotNull(ejbName, ignoreDependency);
      String prefix = ejbName + "IgnoreDependency";
      assertId(prefix, ignoreDependency);
      assertDescriptions(prefix, ignoreDependency.getDescriptions());
      assertResourceInjectionTargets(prefix, 2, ignoreDependency.getInjectionTargets());
   }

   protected void assertRemoteBinding(String ejbName, RemoteBindingMetaData remoteBinding)
   {
      assertNotNull(ejbName, remoteBinding);
      String prefix = ejbName + "RemoteBinding";
      assertId(prefix, remoteBinding);
      assertDescriptions(prefix, remoteBinding.getDescriptions());
      assertEquals(prefix + "JndiName", remoteBinding.getJndiName());
      assertEquals(prefix + "ClientBindUrl", remoteBinding.getClientBindUrl());
      assertEquals(prefix + "InterceptorStack", remoteBinding.getInterceptorStack());
      assertEquals(prefix + "ProxyFactory", remoteBinding.getProxyFactory());
      assertEquals(prefix + "InvokerName", remoteBinding.getInvokerName());
   }

   protected void assertRemoteBindings(String ejbName, List<RemoteBindingMetaData> remoteBindings)
   {
      assertNotNull(ejbName, remoteBindings);
      assertEquals(1, remoteBindings.size());
      for(RemoteBindingMetaData remoteBinding : remoteBindings)
      {
         assertRemoteBinding(ejbName, remoteBinding);
      }
   }
  
   protected void assertMethodAttributes(String ejbName, MethodAttributesMetaData methodAttributes, Mode mode)
   {
      assertNotNull(ejbName, methodAttributes);
      assertEquals(2, methodAttributes.size());
      String prefix = ejbName + "MethodAttributes";
      if(mode != Mode.JBOSS_DTD)
         assertId(prefix, methodAttributes);
      int count = 1;
      for (MethodAttributeMetaData methodAttribute : methodAttributes)
      {
         if (count++ == 1)
         {
            assertEquals("get*", methodAttribute.getMethodName());
            assertTrue(methodAttribute.isReadOnly());
            assertTrue(methodAttribute.isIdempotent());
            assertEquals(5000, methodAttribute.getTransactionTimeout());
         }
         else
         {
            assertEquals("*", methodAttribute.getMethodName());
            assertFalse(methodAttribute.isReadOnly());
            assertFalse(methodAttribute.isIdempotent());
            assertEquals(0, methodAttribute.getTransactionTimeout());
         }
      }
   }

   protected void assertMethodAttributes(String ejbName, BeanMetaData bean)
   {
      assertDefaultMethodAttributes(ejbName, bean);
   }

   protected void assertDefaultMethodAttributes(String ejbName, BeanMetaData bean)
   {
      assertFalse(bean.isMethodReadOnly("getSomething"));
      assertEquals(0, bean.getTransactionTimeout("getSomething"));
   }
  
   private void assertEmptyIterator(Iterator i)
   {
      if (i != null && i.hasNext())
         throw new AssertionFailedError("The iterator should be empty: " + i);
   }
}
TOP

Related Classes of org.jboss.test.metadata.ejb.AbstractEJBEverythingTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.