eclipse-ee4j / jakartaee-tck-tools

Other
7 stars 15 forks source link

Need to update ant lib deployment method generation to handle common archives #47

Closed starksm64 closed 1 month ago

starksm64 commented 1 month ago

To resolve https://github.com/jakartaee/platform-tck/issues/1384, the ant lib generation api needs to possibly generate additional deployment methods for tests that rely on a common test artifacts as defined by the src/com/sun/ts/lib/harness/commonarchives.properties from the TCK.

As an example, this is the correct test class port for the com.sun.ts.tests.ejb30.assembly.initorder.warejb.Client test:

package ejb30.assembly.initorder.warejb;

import com.sun.ts.tests.ejb30.assembly.initorder.warejb.Client;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OperateOnDeployment;
import org.jboss.arquillian.container.test.api.OverProtocol;
import org.jboss.arquillian.container.test.api.TargetsContainer;
import org.jboss.arquillian.junit5.ArquillianExtension;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import java.net.URL;

@ExtendWith(ArquillianExtension.class)
public class ClientTest extends Client {
    // TODO, this need to be generated
    @Deployment(name = "ejb3_common_helloejbjar_standalone_component", order = 1, testable = false)
    public static JavaArchive createCommonDeployment() {
        JavaArchive ejb3_common_helloejbjar_standalone_component_ejb = ShrinkWrap.create(JavaArchive.class, "ejb3_common_helloejbjar_standalone_component_ejb.jar");
        // The class files
        ejb3_common_helloejbjar_standalone_component_ejb.addClasses(
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloCommonIF.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloRemoteIF.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloLocalIF.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloBeanBase.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloBean.class,
                com.sun.ts.tests.ejb30.common.helper.TLogger.class
        );
        URL ejbResURL = Client.class.getResource("/com/sun/ts/tests/ejb30/common/helloejbjar/ejb3_common_helloejbjar_standalone_component_ejb.jar.sun-ejb-jar.xml");
        if(ejbResURL != null) {
            ejb3_common_helloejbjar_standalone_component_ejb.addAsManifestResource(ejbResURL, "sun-ejb-jar.xml");
        }

        return ejb3_common_helloejbjar_standalone_component_ejb;
    }

    @TargetsContainer("tck-javatest")
    @OverProtocol("javatest")
    @Deployment(name = "ejb3_assembly_initorder_warejb", order = 2)
    public static EnterpriseArchive createDeployment() {
        // War
        // the war with the correct archive name
        WebArchive ejb3_assembly_initorder_warejb_web = ShrinkWrap.create(WebArchive.class, "ejb3_assembly_initorder_warejb_web.war");
        // The class files
        ejb3_assembly_initorder_warejb_web.addClasses(
                com.sun.ts.tests.ejb30.assembly.initorder.warejb.TestServlet.class,
                com.sun.ts.tests.servlet.common.servlets.HttpTCKServlet.class,
                com.sun.ts.tests.servlet.common.util.Data.class
        );
        // The web.xml descriptor
        URL warResURL = Client.class.getResource("/com/sun/ts/tests/ejb30/assembly/initorder/warejb/ejb3_assembly_initorder_warejb_web.xml");
        if(warResURL != null) {
            ejb3_assembly_initorder_warejb_web.addAsWebInfResource(warResURL, "web.xml");
        }
        // TODO, does the sun-web.xml file need to be added or should this be in in the vendor Arquillian extension?
        // Web content

        // Ejb
        // the jar with the correct archive name
        JavaArchive ejb3_assembly_initorder_warejb_ejb = ShrinkWrap.create(JavaArchive.class, "ejb3_assembly_initorder_warejb_ejb.jar");
        // The class files
        ejb3_assembly_initorder_warejb_ejb.addClasses(
                com.sun.ts.tests.ejb30.assembly.initorder.common.InitOrderBean.class
        );
        // The ejb-jar.xml descriptor
        URL ejbResURL = Client.class.getResource("/com/sun/ts/tests/ejb30/assembly/initorder/warejb/ejb3_assembly_initorder_warejb_ejb.xml");
        if(ejbResURL != null) {
            ejb3_assembly_initorder_warejb_ejb.addAsManifestResource(ejbResURL, "ejb-jar.xml");
        }
        // The sun-ejb-jar.xml file
        ejbResURL = Client.class.getResource("/com/sun/ts/tests/ejb30/assembly/initorder/warejb/ejb3_assembly_initorder_warejb_ejb.jar.sun-ejb-jar.xml");
        if(ejbResURL != null) {
            ejb3_assembly_initorder_warejb_ejb.addAsManifestResource(ejbResURL, "sun-ejb-jar.xml");
        }
        // The jboss-ejb3.xml file
        ejbResURL = ClientTest.class.getResource("/ejb30/assembly/initorder/warejb/ejb3_assembly_initorder_warejb_ejb.jar.jboss-ejb3.xml");
        if(ejbResURL != null) {
            ejb3_assembly_initorder_warejb_ejb.addAsManifestResource(ejbResURL, "jboss-ejb3.xml");
        }

        // Ear
        EnterpriseArchive ejb3_assembly_initorder_warejb_ear = ShrinkWrap.create(EnterpriseArchive.class, "ejb3_assembly_initorder_warejb.ear");
        JavaArchive shared_lib = ShrinkWrap.create(JavaArchive.class, "shared.jar");
        // The class files
        shared_lib.addClasses(
                com.sun.ts.tests.ejb30.common.helper.Helper.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloCommonIF.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloLocalIF.class,
                com.sun.ts.tests.ejb30.assembly.initorder.common.InitOrderRemoteIF.class,
                com.sun.ts.tests.ejb30.common.helper.ServiceLocator.class,
                com.sun.ts.tests.ejb30.common.helloejbjar.HelloRemoteIF.class
        );

        // The component jars built by the package target
        ejb3_assembly_initorder_warejb_ear.addAsModule(ejb3_assembly_initorder_warejb_ejb);
        ejb3_assembly_initorder_warejb_ear.addAsModule(ejb3_assembly_initorder_warejb_web);

        // The libraries added to the ear
        ejb3_assembly_initorder_warejb_ear.addAsLibrary(shared_lib);

        // The application.xml descriptor
        URL earResURL = ClientTest.class.getResource("/com/sun/ts/tests/ejb30/assembly/initorder/warejb/application.xml");
        if(earResURL != null) {
            ejb3_assembly_initorder_warejb_ear.addAsManifestResource(earResURL, "application.xml");
        }

        return ejb3_assembly_initorder_warejb_ear;
    }

    @Test
    @OperateOnDeployment("ejb3_assembly_initorder_warejb")
    @Override
    public void initOrder() throws Exception {
        super.initOrder();
    }

    @Test
    @OperateOnDeployment("ejb3_assembly_initorder_warejb")
    @Override
    public void appName() throws Exception {
        super.appName();
    }
}

The "ejb3_common_helloejbjar_standalone_component" deployment method is hand coded and needs to be generated.

starksm64 commented 1 month ago

Ignoring webservices which we are not porting,

Unique(41) apps:
com/sun/ts/tests/jacc/util
com/sun/ts/tests/ejb/ee/pm/ejbql/schema
com/sun/ts/tests/ejb/ee/tx/txbean
com/sun/ts/tests/jaxp/api/xml_schema
com/sun/ts/tests/jaxws/sharedwebservices/doclitservice com/sun/ts/tests/jaxws/sharedwebservices/faultservice com/sun/ts/tests/jaxws/sharedwebservices/rpclitservice com/sun/ts/tests/jaxws/sharedwebservices/simpleservice
com/sun/ts/tests/jaxws/ee/j2w/document/literal/nosei/server
com/sun/ts/tests/jws/webmethod/webmethod3/server
com/sun/ts/tests/jaxws/sharedwebservices/simpleservice
com/sun/ts/tests/jws/webmethod/webmethod1/server
com/sun/ts/tests/jaxws/ee/j2w/document/literal/restful/server
com/sun/ts/tests/jaxws/sharedwebservices/dlhelloproviderservice
com/sun/ts/tests/jws/webmethod/webmethod2/server
com/sun/ts/tests/jaxws/sharedwebservices/rpclitservice
com/sun/ts/tests/ejb/ee/tx/session/stateful/bm/TxMDBMSBeans/BeanA com/sun/ts/tests/ejb/ee/tx/session/stateful/bm/TxMDBMSBeans/BeanB com/sun/ts/tests/ejb/ee/tx/session/stateful/bm/TxMDBMSBeans/BeanC
com/sun/ts/tests/jaxws/sharedwebservices/rlhandlerservice
com/sun/ts/tests/jaxws/ee/w2j/document/literal/onewayhandlertest/server
com/sun/ts/tests/jaxws/ee/j2w/document/literal/webmethod/server
com/sun/ts/tests/jaxws/sharedwebservices/xmlbinddlhelloproviderservice
com/sun/ts/tests/ejb/ee/tx/txEPMbean
com/sun/ts/tests/jaxws/sharedwebservices/doclithelloservice
com/sun/ts/tests/jaxws/sharedwebservices/dlhandlerservice com/sun/ts/tests/jaxws/sharedwebservices/doclithelloservice
com/sun/ts/tests/ejb/ee/tx/txEbean
com/sun/ts/tests/connector/mdb
com/sun/ts/tests/jws/handlerchain/server
com/sun/ts/tests/jaxws/sharedwebservices/hellosecureservice
com/sun/ts/tests/jaxws/ee/j2w/rpc/literal/nosei/server
com/sun/ts/tests/ejb30/common/helloejbjar
com/sun/ts/tests/jws/webresult/webresult2/server
com/sun/ts/tests/jaxws/ee/w2j/rpc/literal/onewayhandlertest/server
com/sun/ts/tests/jws/webresult/webresult3/server
com/sun/ts/tests/jws/webresult/webresult1/server
com/sun/ts/tests/jaxws/ee/j2w/document/literal/marshalltest/server
com/sun/ts/tests/jaxws/ee/j2w/document/literal/sessionmaintaintest/server
com/sun/ts/tests/ejb/ee/tx/txECMPbean
com/sun/ts/tests/jws/oneway/server
com/sun/ts/tests/ejb/ee/tx/session/stateful/bm/TxMDBSSBeans/BeanA com/sun/ts/tests/ejb/ee/tx/session/stateful/bm/TxMDBSSBeans/BeanB com/sun/ts/tests/ejb/ee/tx/session/stateful/bm/TxMDBSSBeans/BeanC
com/sun/ts/tests/jaxws/ee/w2j/document/literal/asynctest/server
com/sun/ts/tests/jaxws/sharedwebservices/dlhandlerservice
com/sun/ts/tests/jws/webparam/webparam3/server
com/sun/ts/tests/jws/webparam/webparam2/server
com/sun/ts/tests/jws/webparam/webparam1/server

jacc has also been removed.

It seems like the easiest way to deal with these is to have a common utility class that has these hand coded and the ant lib API consults that when creating the deployment methods.

There is no straightforward way to tie into the test artifact build as this is something being done by the CTS harness as part of the deployment phase which is being replaced by the arquillian deployment methods.