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

Google Chrome shortcut keys

If you are a Google Chromey guy, please find below the list of shortcut keys for some of the most used features  :-) Find more shortcut keys @  http://www.google.com/support/chrome/bin/static.py?page=guide.cs&guide=25799&topic=28650

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.

GC Log Analyzer from IBM

This blog is about the GC( garbage collection) log analyzer from IBM. If you have a GC log and you want to analyze the file,  this IBM tool will help you with some graphical analyzer and some recommendations. You can download it from the following URL : https://www.ibm.com/support/pages/ibm-pattern-modeling-and-analysis-tool-java-garbage-collector-pmat Please find below some screenshots and details that might help you. 1. Screenshot 1: 2. Screenshot 2 : 3. Screenshot 3 : 4. Screenshot 4:

ATG Search architectural flow : Search and Index

I would like to explain the high level ATG Search implementation architecture ( for an online store) through the above diagram. In this diagram 1.x denotes the search functionality and 2.x denotes the indexing functionality. I have given JBoss as the application server. Physical Boxes and Application Servers in the diagram ( as recommended by ATG )  : Estore ( Commerce ) Box --> The box with the estore/site ear (with the site JSPs and Java codes). Search Engine Box --> The box with the search engine application running. Indexing Engine Box --> The box with the indexing engine application running. CA (Content Administration) Box --> The box with the ATG CA ear ( where we could take CA -BCC - Search Administration and configure the search projects) . Search Indexer Box --> The box with the ATG Search Index ear ( to fetch the index data from repository). Note that the engine performing indexing will need access ...

Tax Credit Statement ( Form 26AS )

Read more about Tax filing @  http://tips4ufromsony.blogspot.com/2011/07/income-tax-process-and-e-filing.html  . Form 26AS is a consolidated tax statement issued under Rule 31 AB of Income Tax Rules to PAN holders. This statement, with respect to a financial year, will include details of: Tax deducted at source (TDS). Tax collected at source (TCS). Advance tax/self assessment tax/regular assessment tax etc., deposited in the bank by the taxpayers (PAN holders). Paid refund received during the financial year. Form 26AS will be prepared only with respect to Financial Year 05-06 onwards. To view the Form26AS , log-in to https://incometaxindiaefiling.gov.in and click on ‘View Tax Credit Statement (From 26AS)’  in ‘My Account’. Read more about Form 26AS  @ http://www.incometaxindia.gov.in/26ASTaxCreditStatement.asp http://www.tin-nsdl.com/form26as.asp