Tuesday, February 18, 2014

How To Write Your First Greg Integration Test In New WSO2 Test Framework 4.3.0 .....


In this documentation I am going to explain how to write a simple GREG integration test.


Objective :

We will illustrate how to write a test to add schema to greg server and verify the existence of the added / uploaded schema  to the server.  

Note : you can start writing your tests in the following location according to your greg server version :

eg:

/home/xx/svn/platform/branches/turing/products/greg/x.x.x/modules/integration/registry/tests-new/src/test/java/org/wso2/carbon/registry


Steps to  follow :

Refer below table  where I have created SchemaUploadTestCase.java in a more common form for illustration purposes only.


SchemaUploadTestCase.java


package org.wso2.carbon.registry.addresources.test;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException;
import org.wso2.carbon.automation.api.clients.registry.ResourceAdminServiceClient;
import org.wso2.carbon.automation.engine.context.AutomationContext;
import org.wso2.carbon.automation.utils.registry.RegistryProviderUtil;
import org.wso2.carbon.governance.api.schema.SchemaManager;
import org.wso2.carbon.governance.api.schema.dataobjects.Schema;
import org.wso2.carbon.registry.app.RemoteRegistry;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.handler.stub.ExceptionException;
import org.wso2.carbon.registry.resource.stub.ResourceAdminServiceExceptionException;


import javax.activation.DataHandler;
import javax.xml.xpath.XPathExpressionException;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.rmi.RemoteException;


import static org.testng.Assert.assertTrue;


public class SchemaUploadTestCase {


   private static final Log log = LogFactory.getLog(SchemaUploadTestCase.class);
   private AutomationContext automationContext;
   private ResourceAdminServiceClient resourceAdminServiceClient;
   private RegistryProviderUtil registryProviderUtil = new RegistryProviderUtil();
   private  SchemaManager schemaManager;
   private String schemaId;


   private Registry governance;


   @BeforeClass(groups = {"wso2.greg"})
   public void init() throws Exception {     // 01
       automationContext = new AutomationContext("GREG", "lbw001", "superTenant", "superAdmin");
       int userId = 1;
       RemoteRegistry registry = registryProviderUtil.getRemoteRegistry(userId, "GREG");
       governance = registryProviderUtil.getGovernanceRegistry(registry, userId);
       resourceAdminServiceClient = new ResourceAdminServiceClient(getBackendURL(),getSessionCookie());
   }


  @AfterClass
   public void DeleteLCResources() throws GovernanceException {
     schemaManager.removeSchema(schemaId); // 07
   }


   @Test(groups = {"wso2.greg"}, description = "Add new schema")
   public void addSchema() throws IOException, ExceptionException, RegistryException, ResourceAdminServiceExceptionException {


       String resourceLocation = "xxx/xxx/xxx/xxx";
       String filePath = resourceLocation +
               File.separator + "schema" + File.separator + "calculator.xsd";


       DataHandler dh = new DataHandler(new URL("file:///" + filePath)); // 04


       resourceAdminServiceClient.addSchema("Adding My Schema",dh);


       SchemaManager schemaManager = new SchemaManager(governance); // 05
       Schema[] schemas = schemaManager.getAllSchemas();
       boolean resourceFound = false;
       for (Schema schema : schemas) {
           if (schema.getQName().getLocalPart().equals("calculator.xsd")) {
               resourceFound = true;
               schemaId = schema.getId();
               log.info("Schema ID is : "+ schemaId);


           }
       }
      assertTrue(resourceFound, "Schema Not Found"); // 06
   }


   private String getBackendURL() throws XPathExpressionException {   // 02
       return automationContext.getContextUrls().getBackEndUrl();
   }


   // 03
   private String getSessionCookie() throws LoginAuthenticationExceptionException, XPathExpressionException, RemoteException {
       return automationContext.login();
   }
}

Description :
Prerequisites :

You need to place the schema to be uploaded to the server inside the resourceLocation.

eg:
resourceLocation = "/home/xxx/svn/platform/branches/turing/products/greg/x.x.x/modules/integration/registry/tests-new/src/test/resources/artifacts/GREG/”

01. Create a method called init() and initialize an automationContext object. Pass relevant parameters in accordance with the given values of the automation.xml.

02 & 03 .  Now you can derive the backendservice urls and session cookies as shown in  getBackendURL() & getSessionCookie() methods.

Create instances from ResourceAdminServiceClient & RegistryProviderUtil classes as you may need these instances to add the schema to the server. Note the parameters needs to pass when creating an instance from ResourceAdminServiceClient.

Now start writing your test scenario under @Test annotation. Create a DataHandler from the schema resource file as shown in step 04 and invoke the addResource(...) method of the resourceAdminServiceClient to add / upload the schema to the server.

05 shows the steps involved in verifying the schema added to the server. In here by calling an instance from the  SchemaManager class I can seek for the schema uploaded and if the schema was successfully uploaded assert statement shown in 06 will not encounter a failure.

@AfterClass you can remove the added schema as shown in 07 by invoking removeSchema(...) method using schemamanager instance.

Thats all. You can now start writing numerous testing scenarios using SchemaUploadTestCase .java as a template / guidance.

No comments:

Post a Comment