Skip to main content

ATG DUST: How to invoke OOB Droplets


ATG DUST(Dynamo Unit and System Tests) is a framework for building JUnit tests for applications built on the ATG Dynamo platform. This framework allows one to quickly write test code that depends up Nucleus or ATG Repositories.

You can download the latest version of ATG DUST from http://sourceforge.net/projects/atgdust/. It provides both both src and lib files.

To write an ATG JUNIT testcase to invoke an existing OOB Droplet, follow the following steps :

  1. Create an Eclipse project with the downloaded src and lib files.
  2. Give class path to the follwing files : <ATG_Folder>\das\lib\classes.jar , <ATG_Folder>\dps\lib\classes.jar  and <ATG_Folder>\das\lib\resources.jar ,  <ATG_Folder>\dps\lib\resources.jar
  3. Create an environment variable DUST_HOME and point it to your ATG junit folder, for example: D:\SonyTools\Atg_DUST_JUnitTest\java
  4. To compile the ATG DUST for ATG 2007 version, edit the downloaded DUST java src file atg.servlet.ServletTestUtils to correct the imports atg.test.io.ByteBufferInputStream; and atg.test.io.ByteBufferOutputStream;
  5. Create a folder named “licenseconfig” under DUST_HOME and copy the ATG License files from <ATG_Folder>\home\localconfig\ to this new licenseconfig folder.
  6. Create your test java file, for example find below the DropletInvokerTest.java to do the unit testing of the OOB droplets : /atg/dynamo/droplet/Switch  and /atg/dynamo/droplet/ForEach.
  7. Create a folder named \data\DropletInvokerTest\config\  in the  <DUST_HOME>\src folder if your test file is DropletInvokerTest.java
  8. After doing the build, execute your code by invoking Run as JUNIT Test from Eclipse.

     package com.mycompany.test;

     import java.io.IOException;
     import java.util.HashMap;
     import java.util.List;

     import javax.servlet.ServletException;

     import atg.droplet.DropletInvoker;
     import atg.droplet.DropletInvoker.DropletResult;
     import atg.droplet.DropletInvoker.RenderedOutputParameter;
     import atg.nucleus.Nucleus;
     import atg.nucleus.NucleusTestUtils;
     import atg.servlet.DynamoHttpServletRequest;
     import atg.servlet.ServletUtil;
     import atg.test.AtgDustCase;

     public class DropletInvokerTest extends AtgDustCase {
Nucleus mNucleus;
/**
* Start up Nucleus with Initial services
*/
protected void setUp() throws Exception {
 super.setUp();
 mNucleus = NucleusTestUtils.startNucleusWithModules(
new String[] {"DAS","DafEar"}, this.getClass(),
"/atg/dynamo/droplet/Switch");
}
/**
* Shut down Nucleus
*/
protected void tearDown() throws Exception {
super.tearDown();
ServletUtil.setCurrentRequest(null);
if (mNucleus != null) {
  NucleusTestUtils.shutdownNucleus(mNucleus);
  mNucleus = null;
 }
}
/** Test the DropletInvoker */
public void testInvoker() throws ServletException, IOException {
 doTestSwitch();
 doTestFor();
}
public void doTestSwitch() throws ServletException, IOException {
 DropletInvoker invoker = new DropletInvoker(mNucleus);
 DynamoHttpServletRequest request = invoker.getRequest();
 DropletResult result = null;
 request.setParameter("value", "foo");
 result = invoker.invokeDroplet("/atg/dynamo/droplet/Switch");
 assertNotNull("Make sure that foo got rendered",result.getRenderedOutputParameter("foo"));
 System.out.println("result.getRenderedOutputParameter(foo)-->"+ result.getRenderedOutputParameter("foo"));
}
public void doTestFor() throws ServletException, IOException {
 DropletInvoker invoker = new DropletInvoker(mNucleus);
 DynamoHttpServletRequest request = invoker.getRequest();
 DropletResult result = null;
 String[] strings = new String[] { "one", "two", "three", "four", "five" };
 HashMap<String, Object> params = new HashMap<String,Object>();
 params.put("array", strings);
 result = invoker.invokeDroplet("/atg/dynamo/droplet/ForEach", params);
 assertNotNull("Make sure output got rendered at least once",result.getRenderedOutputParameter("output", false));
 List<RenderedOutputParameter> listOutputs = result.getRenderedOutputParametersByName("output");
 assertEquals("Make sure output was rendered 5 times",5, listOutputs.size());
 for (int i = 0; i < strings.length; i++) {
   RenderedOutputParameter oparam = listOutputs.get(i);
   assertEquals("Should be the same as from the list ", oparam, result.getRenderedOutputParameter("output", i));
   System.out.println(" result.getRenderedOutputParameter(output, i)-->"+ result.getRenderedOutputParameter("output", i));
   assertEquals("Element should be our string", strings[i], (String)oparam.getFrameParameter("element"));
   System.out.println("(String)oparam.getFrameParameter(element)-->"+ (String)oparam.getFrameParameter("element"));
 }
}

Comments

  1. This comment has been removed by the author.

    ReplyDelete
  2. how to mock request and response for a formhandler in ATG Dust? Please explain

    ReplyDelete

Post a Comment

Popular posts from this blog

How to convert your Blogger Blog to PDF ?

You can use a website called "blogbooker" @  http://www.blogbooker.com/blogger.php   to convert your Blogger Blog to a PDF . Please find the steps below : 1. Save your blog as an xml using Blogger Settings - Other - Export Blog option 2. Go to the website " http://www.blogbooker.com/blogger.php " and select this XML , give your blog address and select the options like date range, page size, font, ... 3. Click the  "Create Your BlogBook" button to view and save your blog as PDF

Eclipse plug-in to create Class and Sequence diagrams

ModelGoon is an Eclipse plug-in avaiable for UML diagram generation from Java code. It can be used to generate Package Dependencies Diagram, Class Diagram, Interaction Diagram and Sequence Diagram. You coud get it from http://marketplace.eclipse.org/content/modelgoon-uml4java Read more about it and see some vedios about how to create the class and sequence diagram @ http://www.modelgoon.org/?tag=eclipse-plugin Find some snapshots below which gives an idea about the diagram generation.

ATG Search - search engine tuning settings

In this blog, I am going to list the best tuning settings for ATG Search engine. The AESoapConfig.xml, AESoapWaspConfig.xml  and AEConfig.xml are the xmls referred below and you can find it @  <ATG_DIR>\<Searchx.x>\SearchEngine\<operating_system>\bin\ folder. (1)  Make sure that the AESoapConfig.xml's rwTimeout is less than or equal to routing's readTimeoutMs. You could find the routing's readTimeoutMs @ atg\search\routing\SearchEngineService component.               rwTimeout is the  length of time in seconds to wait before a read or write operation times out on an active connection. The number can be decreased to improve performance. However, a value that is too low could cause slow connections to be prematurely closed. (2)  Adjust the number of engine threads to match the number of CPUs available to the engine. Note that the minimal value for maxThreads and maxSpareThreads is 2, which applies to running with 1 CPU.  However, it is recommended to

Java History and main changes over Java versions

Java SE 7 Codename Dolphin. Releasing on July 28, 2011. Better integral literals allowing for underscores as digit separators. Strings in switch Statements. Improved Type Inference for Generic Instance Creation. Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods. Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking . JVM support for dynamic languages, following the prototyping work currently done on the Multi Language Virtual Machine Compressed 64-bit pointers. Available in Java 6 with -XX:+UseCompressedOops. Concurrency and collections updates: a lightweight fork/join framework, flexible and reusable synchronization barriers, transfer queues, concurrent linked double-ended queues, and thread-local pseudo-random number generators. New file I/O library to enhance platform independence and add support for metadata and symbolic links. The new packages are java.nio.file and java.nio.file.attr

Working Environment

It is always good to think about your working environment. Here I am listing mine,  expecting your comments to add other necessary tools to this list. Anti Virus Avast  –> http://www.avast.com/free-antivirus-download Avira  –> http://www.avira.com/en/avira-free-antivirus AVG  –> http://www.freeavg.com/?lng=in-en&cmpid=free Kaspersky  –> http://www.kaspersky.com/ McAfee  –> http://www.mcafee.com/us/ Symantec  –> http://www.symantec.com/index.jsp Application Server JBoss  –>   http://www.jboss.org/jbossas/ Tomcat –>   http://tomcat.apache.org/ Weblogic –>   http://www.oracle.com/technetwork/middleware/weblogic Browser Firefox –>   http://www.mozilla.com/en-US/firefox Google Chrome  –> http://www.google.com/chrome/ IE  –>   http://windows.microsoft.com/en-US/internet-explorer/downloads/ie Communication_Network IPMessenger –>   http://ipmsg.org/index.html.en Putty –>   http://www.chiark.greenend.org.uk/~sgtatham/putty