package edu.harvard.i2b2.workpalce.ws;
import static org.junit.Assert.*;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import javax.xml.bind.JAXBElement;
import junit.framework.JUnit4TestAdapter;
import org.apache.axiom.om.OMElement;
import org.junit.BeforeClass;
import org.junit.Test;
import edu.harvard.i2b2.common.util.jaxb.JAXBUnWrapHelper;
import edu.harvard.i2b2.workplace.datavo.i2b2message.ResponseMessageType;
import edu.harvard.i2b2.workplace.datavo.wdo.FolderType;
import edu.harvard.i2b2.workplace.datavo.wdo.FoldersType;
import edu.harvard.i2b2.workplace.util.WorkplaceJAXBUtil;
public class WorkplaceServiceRESTTest extends WorkplaceAxisAbstract{
private static String testFileDir = "";
private static String workplaceTargetEPR =
"http://localhost:9090/i2b2/services/WorkplaceService/";
private static String getFoldersByProject = "getFoldersByProject";
private static String getFoldersByUserId = "getFoldersByUserId";
private static String addChild = "addChild";
private static String getNameInfo = "getNameInfo";
private static String setProtectedAccess = "setProtectedAccess";
// "http://127.0.0.1:8080/i2b2/services/PMService/getServices";
private static String demoIndex = "";
private static String i2b2Index = "";
private static String sharedIndex = "";
private static String findDemographicsIndex = "";
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(WorkplaceServiceRESTTest.class);
}
@BeforeClass
public static void setUp() throws Exception {
testFileDir = "test"; //System.getProperty("testfiledir");
System.out.println("test file dir " + testFileDir);
if (!((testFileDir != null) && (testFileDir.trim().length() > 0))) {
throw new Exception(
"please provide test file directory info -Dtestfiledir");
}
}
@Test
public void GetFoldersByProject() throws Exception {
String filename = testFileDir + "/folders_by_project.xml";
String masterInstanceResult = null;
try {
String requestString = getQueryString(filename);
OMElement requestElement = convertStringToOMElement(requestString);
OMElement responseElement = getServiceClient(workplaceTargetEPR + getFoldersByProject).sendReceive(requestElement);
JAXBElement responseJaxb = WorkplaceJAXBUtil.getJAXBUtil().unMashallFromString(responseElement.toString());
ResponseMessageType r = (ResponseMessageType)responseJaxb.getValue();
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
FoldersType folders = (FoldersType)helper.getObjectByClass(r.getMessageBody().getAny(),FoldersType.class);
for(FolderType folder: folders.getFolder())
{
if (folder.getName().equals("demo"))
{
assertEquals(folder.getName(),"demo");
demoIndex = (folder.getIndex()).replaceAll("\\\\", "\\\\\\\\");
}
if (folder.getName().equals("i2b2"))
{
assertEquals(folder.getName(),"i2b2");
i2b2Index = (folder.getIndex()).replaceAll("\\\\", "\\\\\\\\");
}
if (folder.getName().equals("SHARED"))
{
assertEquals(folder.getName(),"SHARED");
sharedIndex = (folder.getIndex()).replaceAll("\\\\", "\\\\\\\\");
}
}
assertNotNull(folders);
assertTrue(folders.getFolder().size() > 1);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void GetFoldersByUserId() throws Exception {
String filename = testFileDir + "/folders_by_userid.xml";
String masterInstanceResult = null;
try {
String requestString = getQueryString(filename);
OMElement requestElement = convertStringToOMElement(requestString);
OMElement responseElement = getServiceClient(workplaceTargetEPR + getFoldersByUserId).sendReceive(requestElement);
JAXBElement responseJaxb = WorkplaceJAXBUtil.getJAXBUtil().unMashallFromString(responseElement.toString());
ResponseMessageType r = (ResponseMessageType)responseJaxb.getValue();
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
FoldersType folders = (FoldersType)helper.getObjectByClass(r.getMessageBody().getAny(),FoldersType.class);
for(FolderType folder: folders.getFolder())
{
if (folder.getName().equals("demo"))
{
assertEquals(folder.getName(),"demo");
}
if (folder.getName().equals("SHARED"))
{
assertEquals(folder.getName(),"SHARED");
}
}
assertNotNull(folders);
assertTrue(folders.getFolder().size() > 1);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void AddChildOntologyFolder() throws Exception {
String filename1 = testFileDir + "/add_child_ontology_folder.xml";
String filename2 = testFileDir + "/add_child_ontology_folder_2.xml";
String filename3 = testFileDir + "/add_child_ontology_folder_3.xml";
String filename4 = testFileDir + "/add_child_ontology_folder_4.xml";
try {
ResponseMessageType r = serviceRequest(addChild, filename1);
checkResponseStatus(r, "DONE");
r = serviceRequest(addChild, filename2);
checkResponseStatus(r, "DONE");
r = serviceRequest(addChild, filename3);
checkResponseStatus(r, "DONE");
r = serviceRequest(addChild, filename4);
checkResponseStatus(r, "DONE");
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void AddChildOntologyConcept() throws Exception {
ArrayList <String> files = new ArrayList <String>();
files.add(testFileDir + "/add_child_ontology_concept.xml");
files.add(testFileDir + "/add_child_ontology_concept_2.xml");
files.add(testFileDir + "/add_child_ontology_concept_3.xml");
files.add(testFileDir + "/add_child_ontology_concept_4.xml");
files.add(testFileDir + "/add_child_ontology_concept_5.xml");
ResponseMessageType respMsgType = null;
for(String fileName : files){
try {
respMsgType = serviceRequest(addChild, fileName);
checkResponseStatus(respMsgType, "DONE");
respMsgType = null; // resetting ResponseMessageType
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
}
@Test
/*
* <ns4:get_name_info category="demo" max="200" hiddens="false" blob="true" type="core">
* <match_str strategy="contains">11 years old</match_str>
* </ns4:get_name_info>
*/
public void FindDemographics() throws Exception {
String filename = testFileDir + "/find_demographics.xml";
String conceptName = "11 years old demo";
try {
ResponseMessageType r = serviceRequest(getNameInfo, filename);
checkResponseStatus(r, "DONE");
assertTrue(verifyFolder(r, conceptName, true, false, null));
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindWithCategoryMissing() throws Exception {
String filename1 = testFileDir + "/find_category_validation_1.xml"; // category="" in request xml
String filename2 = testFileDir + "/find_category_validation_2.xml"; // category element missing from request xml
String errorstring = "select a valid category";
try {
serviceExecWithErrResp(filename1, errorstring, getNameInfo);
serviceExecWithErrResp(filename2, errorstring, getNameInfo);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindWithMatchStrMissing() throws Exception {
String filename1 = testFileDir + "/find_match_str_validation_1.xml"; // match_str = "" in request xml
String filename2 = testFileDir + "/find_match_str_validation_2.xml"; // match_str element missing from request xml
String errString1 = "Please enter a valid search string" ;
String errString2 = "'match_str' element is missing.";
try {
serviceExecWithErrResp(filename1, errString1, getNameInfo);
serviceExecWithErrResp(filename2, errString2, getNameInfo);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindWithMaxValidation() throws Exception {
String filename1 = testFileDir + "/find_max_validation_1.xml"; // max="-1" in request xml
String filename2 = testFileDir + "/find_max_validation_2.xml"; // max = "0" in request xml
String errorstring = "Please enter a valid 'max' value.";
try {
serviceExecWithErrResp(filename1, errorstring, getNameInfo);
serviceExecWithErrResp(filename2, errorstring, getNameInfo);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindWithStartegyMissing() throws Exception {
String filename1 = testFileDir + "/find_strategy_validation_1.xml"; // strategy="" in request xml
String filename2 = testFileDir + "/find_strategy_validation_2.xml"; // no element strategy provided in request xml
String errorstring = "Strategy is missing.";
String filename3 = testFileDir + "/find_strategy_validation_3.xml"; // strategy="abcd" in request xml
String errorStr2 = "Incorrect strategy provided.";
try {
// Test that response returns error with the given error message
serviceExecWithErrResp(filename1, errorstring, getNameInfo);
serviceExecWithErrResp(filename2, errorstring, getNameInfo);
serviceExecWithErrResp(filename3, errorStr2, getNameInfo);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void setProtectedAccDemographics() throws Exception{
String filename1 = testFileDir + "/setProtectedAcc_demo_1.xml";
String filename2 = testFileDir + "/setProtectedAcc_demo_2.xml";
String conceptName = "11 years old demo";
String nameInfoFilename = testFileDir + "/find_demographics.xml";
try {
//MM OFF
/*
// set protected access to true
ResponseMessageType r = serviceRequest(setProtectedAccess, filename1);
checkResponseStatus(r, "DONE");
// request getNameInfo service and then check if the concept has been
// set protectedAccess = true
ResponseMessageType rspMsgType = serviceRequest(getNameInfo, nameInfoFilename);
checkResponseStatus(rspMsgType, "DONE");
assertTrue(verifyFolder(rspMsgType, conceptName, false, false, true));
// set protected access to false
ResponseMessageType r2 = serviceRequest(setProtectedAccess, filename2);
checkResponseStatus(r2, "DONE");
// request getNameInfo service and then check if the concept has been
// set protectedAccess = false
ResponseMessageType rspMsgType2 = serviceRequest(getNameInfo, nameInfoFilename);
checkResponseStatus(rspMsgType2, "DONE");
assertTrue(verifyFolder(rspMsgType2, conceptName, false, false, false));
*/
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void setProtectedAccIndexValidation() throws Exception{
String filename1 = testFileDir + "/setProtectedAcc_indexValidation_1.xml";
String filename2 = testFileDir + "/setProtectedAcc_indexValidation_2.xml";
String errStr = "folder index is missing";
try {
// <index><index> - empty index element
serviceExecWithErrResp(filename1, errStr, setProtectedAccess);
// <index> element not specified in the request
serviceExecWithErrResp(filename2, errStr, setProtectedAccess);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void setProtectedAccValidation() throws Exception{
String filename1 = testFileDir + "/setProtectedAcc_validation_1.xml";
String filename2 = testFileDir + "/setProtectedAcc_validation_2.xml";
String filename3 = testFileDir + "/setProtectedAcc_validation_3.xml";
String errStr = "Please specify protected access value";
try {
// <protected_access><protected_access> - empty element
serviceExecWithErrResp(filename1, errStr, setProtectedAccess);
// <protected_access> element not specified in the request
serviceExecWithErrResp(filename2, errStr, setProtectedAccess);
// <protected_access>gfgfgf<protected_access> element with incorrect value
serviceExecWithErrResp(filename3, errStr, setProtectedAccess);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
/**
*
* Please Note this method assumes users demo and i2b2 have role of 'DATA_PROT
*
* @throws Exception
*/
/*
@Test
public void setProtectedAccUserValidation() throws Exception{
try {
String filename1 = testFileDir + "/setProtectedAcc_userValidation_1.xml";
String conceptName1 = "11 years old demo";
String nameInfoFilename1 = testFileDir + "/find_demographics.xml";
// manager setting protected access on another user's content within same project
ResponseMessageType r = serviceRequest(setProtectedAccess, filename1);
checkResponseStatus(r, "DONE");
// request getNameInfo service and then check if the concept has been
// set protectedAccess = true
ResponseMessageType rspMsgType = serviceRequest(getNameInfo, nameInfoFilename1);
checkResponseStatus(rspMsgType, "DONE");
assertTrue(verifyFolder(rspMsgType, conceptName1, false, false, true));
String filename2 = testFileDir + "/setProtectedAcc_userValidation_2.xml";
String conceptName2 = "Rheumatism, excluding the back demo";
String nameInfoFilename2 = testFileDir + "/find_hidden_validation_1.xml";
// user setting his/her own content to protected access
ResponseMessageType r2 = serviceRequest(setProtectedAccess, filename2);
checkResponseStatus(r2, "DONE");
// request getNameInfo service and then check if the concept has been
// set protectedAccess = true
ResponseMessageType rspMsgType2 = serviceRequest(getNameInfo, nameInfoFilename2);
checkResponseStatus(rspMsgType2, "DONE");
assertTrue(verifyFolder(rspMsgType2, conceptName2, false, false, true));
String filename3 = testFileDir + "/setProtectedAcc_userValidation_3.xml";
String conceptName3 = "Rheumatism, excluding the back shared";
String nameInfoFilename3 = testFileDir + "/find_user_role_validation_3.xml";
// user setting shared content to protected access=false which is allowed
ResponseMessageType r3 = serviceRequest(setProtectedAccess, filename3);
checkResponseStatus(r3, "DONE");
// request getNameInfo service and then check if the concept has been
// set protectedAccess = false
ResponseMessageType rspMsgType3 = serviceRequest(getNameInfo, nameInfoFilename3);
checkResponseStatus(rspMsgType3, "DONE");
assertTrue(verifyFolder(rspMsgType3, conceptName3, false, false, false));
String filename4 = testFileDir + "/setProtectedAcc_userValidation_4.xml";
String errStr = "User does not have correct privileges";
// user setting protected access to manager's file, which is not allowed
serviceExecWithErrResp(filename4, errStr, setProtectedAccess);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
// This method assumes the root directory 'demo' has index of WxWMM6p2jbSPmtszJaJu
@Test
public void setProtectedAccOnFolder() throws Exception{
String filename1 = testFileDir + "/setProtectedAcc_onFolder.xml";
//String filename2 = testFileDir + "/setProtectedAcc_demo_2.xml";
String conceptName = "11 years old demo";
String nameInfoFilename = testFileDir + "/find_demographics.xml";
String conceptName2 = "Rheumatism, excluding the back demo";
String nameInfoFilename2 = testFileDir + "/find_hidden_validation_1.xml";
String conceptName3a = "Test Folder 1";
String conceptName3b = "Test Folder 2";
String conceptName3c = "Test Folder 3";
String conceptName3d = "Test Folder 4";
String nameInfoFilename3 = testFileDir + "/find_folder.xml";
try {
// set protected access to false on a folder which has concepts as well as
// other folders as child
ResponseMessageType r = serviceRequest(setProtectedAccess, filename1);
checkResponseStatus(r, "DONE");
// check to confirm that all the child folders and concept has been
// set to protected_access =false
// checking child concept
ResponseMessageType rspMsgType = serviceRequest(getNameInfo, nameInfoFilename);
checkResponseStatus(rspMsgType, "DONE");
assertTrue(verifyFolder(rspMsgType, conceptName, false, false, false));
// checking second child concept
ResponseMessageType rspMsgType2 = serviceRequest(getNameInfo, nameInfoFilename2);
checkResponseStatus(rspMsgType2, "DONE");
assertTrue(verifyFolder(rspMsgType2, conceptName2, false, false, false));
// checking all the sub-folders
ResponseMessageType rspMsgType3 = serviceRequest(getNameInfo, nameInfoFilename3);
checkResponseStatus(rspMsgType3, "DONE");
assertTrue(verifyFolder(rspMsgType3, conceptName3a, false, false, false));
assertTrue(verifyFolder(rspMsgType3, conceptName3b, false, false, false));
assertTrue(verifyFolder(rspMsgType3, conceptName3c, false, false, false));
assertTrue(verifyFolder(rspMsgType3, conceptName3d, false, false, false));
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
*/
// This method assumes the root directory 'demo' has index of WxWMM6p2jbSPmtszJaJu
/* fix
@Test
public void setProtectedAccOnRoot() throws Exception{
String filename1 = testFileDir + "/setProtectedAcc_onRoot.xml";
//String filename2 = testFileDir + "/setProtectedAcc_demo_2.xml";
String conceptName = "11 years old demo";
String nameInfoFilename = testFileDir + "/find_demographics.xml";
String conceptName2 = "Rheumatism, excluding the back demo";
String nameInfoFilename2 = testFileDir + "/find_hidden_validation_1.xml";
String conceptName3a = "Test Folder 1";
String conceptName3b = "Test Folder 2";
String conceptName3c = "Test Folder 3";
String conceptName3d = "Test Folder 4";
String nameInfoFilename3 = testFileDir + "/find_folder.xml";
try {
// set protected access to false on a folder which has concepts as well as
// other folders as child
ResponseMessageType r = serviceRequest(setProtectedAccess, filename1);
checkResponseStatus(r, "DONE");
// check to confirm that all the child folders and concept has been
// set to protected_access =false
// checking child concept
ResponseMessageType rspMsgType = serviceRequest(getNameInfo, nameInfoFilename);
checkResponseStatus(rspMsgType, "DONE");
assertTrue(verifyFolder(rspMsgType, conceptName, false, false, true));
// checking second child concept
ResponseMessageType rspMsgType2 = serviceRequest(getNameInfo, nameInfoFilename2);
checkResponseStatus(rspMsgType2, "DONE");
assertTrue(verifyFolder(rspMsgType2, conceptName2, false, false, true));
// checking all the sub-folders
ResponseMessageType rspMsgType3 = serviceRequest(getNameInfo, nameInfoFilename3);
checkResponseStatus(rspMsgType3, "DONE");
assertTrue(verifyFolder(rspMsgType3, conceptName3a, false, false, true));
assertTrue(verifyFolder(rspMsgType3, conceptName3b, false, false, true));
assertTrue(verifyFolder(rspMsgType3, conceptName3c, false, false, true));
assertTrue(verifyFolder(rspMsgType3, conceptName3d, false, false, true));
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
*/
/*
@Test
/*
* <ns4:get_name_info category="dEmo">
* <match_str strategy="right">old demo</match_str>
* </ns4:get_name_info>
public void FindWithParamsMissing() throws Exception {
String xmlFileName = testFileDir + "/find_missing_params.xml"; // only required params given in the request
String conceptName = "11 years old demo";
try {
ResponseMessageType r = serviceRequest(getNameInfo, xmlFileName);
checkResponseStatus(r, "DONE");
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
FoldersType folders = (FoldersType)helper.getObjectByClass(r.getMessageBody().getAny(),FoldersType.class);
assertNotNull(folders);
boolean foundConcept= false;
for(FolderType folder: folders.getFolder())
{
if (folder.getName().toLowerCase().equals(conceptName.toLowerCase())){
foundConcept = true;
// verify workxml is part of the response
// which wil test that blob = true is default
assertTrue(folder.getWorkXml()!=null);
// verify visualattributes is not hidden
// which will test that hidden=false is default
assertFalse(folder.getVisualAttributes().contains("H"));
// verify Entry date is not part of response
// which will test that type="CORE" is default
assertTrue(folder.getEntryDate()==null);
break;
}
}
assertTrue(folders.getFolder().size() >= 1);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindWithStrategyValidation() throws Exception {
HashMap<String, String> fileStrings = new HashMap<String, String>();
fileStrings.put(testFileDir + "/find_strategy_contains.xml", "Rheumatism, excluding the back demo");
fileStrings.put(testFileDir + "/find_strategy_left.xml", "11 years old demo");
fileStrings.put(testFileDir + "/find_strategy_match.xml", "11 years old i2b2");
fileStrings.put(testFileDir + "/find_strategy_right.xml", "Rheumatism, excluding the back shared");
try {
// Test each of the request returned the resulting concept/folder
Iterator<String> it = fileStrings.keySet().iterator();
String xmlFileName= "";
String conceptName = "";
ResponseMessageType r = null;
while (it.hasNext()){
xmlFileName = it.next();
conceptName = fileStrings.get(xmlFileName);
r = serviceRequest(getNameInfo, xmlFileName);
checkResponseStatus(r, "DONE");
assertTrue(verifyFolder(r, conceptName, true, false, null));
}
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
*/
/**
* This test is designed to ensure correct response is provided
* depending on user's accessibility to the workplace/folder
*
* @throws Exception
*/
/*
@Test
public void FindUserValidation() throws Exception {
String filename1 = testFileDir + "/find_user_role_validation_1.xml"; // user accessing manager's file
String errorstring = "User does not have correct privileges";
HashMap<String, String> fileStrings = new HashMap<String, String>();
fileStrings.put(testFileDir + "/find_user_role_validation_2.xml", "11 years old demo"); // user accessing his/her own directory
fileStrings.put(testFileDir + "/find_user_role_validation_3.xml", "Rheumatism, excluding the back shared"); // user accessing shared directory
fileStrings.put(testFileDir + "/find_user_role_validation_4.xml", "11 years old i2b2"); // manager accessing his/her own directory
fileStrings.put(testFileDir + "/find_user_role_validation_5.xml", "11 years old demo"); // manager accessing user's directory
fileStrings.put(testFileDir + "/find_user_role_validation_6.xml", "Rheumatism, excluding the back shared"); // manager accessing shared directory
try {
// Test that response returns error with the given error message
// request has userid = demo and category = i2b2
serviceExecWithErrResp(filename1, errorstring, getNameInfo);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
try {
// Test each of the request returned the resulting concept/folder
Iterator<String> it = fileStrings.keySet().iterator();
String xmlFileName= "";
String conceptName = "";
ResponseMessageType respMsgType = null;
while (it.hasNext()){
xmlFileName = it.next();
conceptName = fileStrings.get(xmlFileName);
respMsgType = serviceRequest(getNameInfo, xmlFileName);
checkResponseStatus(respMsgType, "DONE");
assertTrue(verifyFolder(respMsgType, conceptName, true, false, null));
}
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindHiddenValidation() throws Exception {
String filename1 = testFileDir + "/find_hidden_validation_1.xml"; // hidden=true in request
String conceptName = "Rheumatism, excluding the back demo";
String filename2 = testFileDir + "/find_hidden_validation_2.xml"; // hidden=false in request
try {
// hidden=true in request
// Test that folder/Concept was returned as it had visualattr = ZH
ResponseMessageType r = serviceRequest(getNameInfo, filename1);
checkResponseStatus(r, "DONE");
assertTrue(verifyFolder(r, conceptName, true, false, null));
r = null; //re-setting responseMessageType to null
// hidden=false in request
// Test that folder/Concept was not returned as it had visualattr = ZH
r = serviceRequest(getNameInfo, filename2);
checkResponseStatus(r, "DONE");
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
FoldersType folders = (FoldersType)helper.getObjectByClass(r.getMessageBody().getAny(),FoldersType.class);
assertTrue(folders==null || folders.getFolder().size() <= 0);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindBlobValidation() throws Exception {
String filename1 = testFileDir + "/find_blob_validation_1.xml"; // blob=true in request
String conceptName = "Rheumatism, excluding the back demo";
String filename2 = testFileDir + "/find_blob_validation_2.xml"; // blob=false in request
try {
// blob=true in request
// Test folders were returned along with workxml in response
ResponseMessageType r = serviceRequest(getNameInfo, filename1);
checkResponseStatus(r, "DONE");
verifyFolder(r, conceptName, true, false, null);
r = null; //re-setting responseMessageType to null
// blob=false in request
// Test folders were returned in response but workxml was not returned
r = serviceRequest(getNameInfo, filename2);
checkResponseStatus(r, "DONE");
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
FoldersType folders2 = (FoldersType)helper.getObjectByClass(r.getMessageBody().getAny(),FoldersType.class);
assertNotNull(folders2);
for(FolderType folder: folders2.getFolder())
{
if (folder.getName().toLowerCase().equals(conceptName.toLowerCase())){
assertTrue(folder.getWorkXml()==null);
break;
}
}
assertTrue(folders2.getFolder().size() >= 1);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
@Test
public void FindTypeValidation() throws Exception {
String filename1 = testFileDir + "/find_type_validation_1.xml"; // type=core in request
String conceptName = "Rheumatism, excluding the back i2b2";
String filename2 = testFileDir + "/find_type_validation_2.xml"; // type=all in request
try {
// type=core in request
// Test all elements of folders were returned except the entrydate
ResponseMessageType r = serviceRequest(getNameInfo, filename1);
System.out.println("My Reaponse1:"+ r.toString());
checkResponseStatus(r, "DONE");
verifyFolder(r, conceptName, true, false, null);
r = null; //re-setting responseMessageType to null
// type=all in request
// Test all elements of folders were returned in the response including entrydate
r = serviceRequest(getNameInfo, filename2);
System.out.println("My Reaponse2:"+ r.toString());
checkResponseStatus(r, "DONE");
verifyFolder(r, conceptName, true, true, null);
} catch (Exception e) {
e.printStackTrace();
assertTrue(false);
}
}
*/
/************** PRIVATE METHODS **********************/
/**
* This method executes the error requests
* and verifies the response status is ERROR
* and compares the ERROR string is same as given error string
* This is to ensure that specific error messages are returned in
* response instead of generic Database Error
*
* @param xmlFileName - file containing xml request
* @param compareErrStr - error string in the response
* @param serviceName - service to be requested
* @throws Exception
*/
private void serviceExecWithErrResp(String xmlFileName, String compareErrStr, String serviceName) throws Exception{
ResponseMessageType r = serviceRequest(serviceName, xmlFileName);
checkResponseStatus(r, "ERROR");
String resultErrString = r.getResponseHeader().getResultStatus().getStatus().getValue();
assertTrue(resultErrString.contains(compareErrStr));
//String resultStatusType = r.getResponseHeader().getResultStatus().getStatus().getType();
}
/**
* This method executes the service given as a parameter with the request xml file.
* It returns the object ResponseMessageType containing the response element
*
* @param serviceName - service to be requested
* @param filename - xml request file name
* @return
* @throws Exception
*
*/
private ResponseMessageType serviceRequest(String serviceName, String filename) throws Exception {
String requestString = getQueryString(filename);
OMElement requestElement = convertStringToOMElement(requestString);
OMElement responseElement = getServiceClient(workplaceTargetEPR + serviceName).sendReceive(requestElement);
JAXBElement responseJaxb = WorkplaceJAXBUtil.getJAXBUtil().unMashallFromString(responseElement.toString());
ResponseMessageType rspMsgType = (ResponseMessageType)responseJaxb.getValue();
return rspMsgType;
}
/**
* This method gets the status from response header
* and compares with the param status
*
* @param respMsgType - ResponseMessageType
* @param statusStr - status to compare
* @throws Exception
*/
private void checkResponseStatus(ResponseMessageType respMsgType, String statusStr) throws Exception{
String statusType = respMsgType.getResponseHeader().getResultStatus().getStatus().getType();
assertEquals("Checking for: " + statusType ,statusStr.toUpperCase(), statusType.toUpperCase());
}
/**
* This methods verifies if the folder was returned in response
* Also it checks that number of folders returned in response are more than 0
*
* @param respMsgType - ResponseMessageType
* @param conceptName - foldername to be searched within response
* @param protectedAccess - Its Boolean object type so that we can pass null if not using it
* @return
* @throws Exception
*/
private boolean verifyFolder(ResponseMessageType respMsgType, String conceptName, boolean includesBlob, boolean typeAll, Boolean protectedAccess) throws Exception {
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
FoldersType folders = (FoldersType)helper.getObjectByClass(respMsgType.getMessageBody().getAny(),FoldersType.class);
// verify folders obj is not null
assertNotNull(folders);
boolean foundConcept= false;
for(FolderType folder: folders.getFolder())
{
// verify all the elements only if search file has been found
if (folder.getName().toLowerCase().equals(conceptName.toLowerCase())){
assertTrue(folder.getName()!=null);
assertTrue(folder.getGroupId()!=null);
assertTrue(folder.getIndex()!=null);
assertTrue(folder.getParentIndex()!=null);
assertTrue(folder.getShareId()!=null);
assertTrue(folder.getUserId()!=null);
assertTrue(folder.getVisualAttributes()!=null);
assertTrue(folder.getWorkXmlI2B2Type()!=null);
if(includesBlob)
assertTrue(folder.getWorkXml()!=null);
if(typeAll)
assertTrue(folder.getEntryDate()!=null);
if(protectedAccess != null){
String protectedAccessVal = "N";
if(protectedAccess.booleanValue()== true)
protectedAccessVal = "Y";
else
protectedAccessVal = "N";
assertTrue(folder.getProtectedAccess().equalsIgnoreCase(protectedAccessVal));
}
foundConcept = true;
if (conceptName.equals("11 years old demo"))
findDemographicsIndex = folder.getIndex().replaceAll("\\\\", "\\\\\\\\");
break;
}
}
// verify number of resulting folders are more than/equal to 1
assertTrue(folders.getFolder().size() >= 1);
return foundConcept;
}
public static String getQueryString(String filename) throws Exception {
//StringBuffer queryStr = new StringBuffer();
String queryStr = "";
DataInputStream dataStream = new DataInputStream(new FileInputStream(
filename));
while (dataStream.available() > 0) {
queryStr += (dataStream.readLine() + "\n");
}
queryStr = queryStr.replaceAll("~~~demoIndex~~~", demoIndex);
queryStr = queryStr.replaceAll("~~~sharedIndex~~~", sharedIndex);
queryStr = queryStr.replaceAll("~~~i2b2Index~~~", i2b2Index);
queryStr = queryStr.replaceAll("~~~findDemographicsIndex~~~", findDemographicsIndex);
return queryStr;
}
}