Skip to content
Snippets Groups Projects
Commit b81084ef authored by Paul Frederiks's avatar Paul Frederiks
Browse files

Tests around handling different input and improvement for msiLoadMetadataFromXml

parent d54a44ab
Branches
Tags
No related merge requests found
...@@ -92,7 +92,7 @@ set(CPACK_GENERATOR "RPM") ...@@ -92,7 +92,7 @@ set(CPACK_GENERATOR "RPM")
set(CPACK_PACKAGE_NAME "irods-uu-microservices") set(CPACK_PACKAGE_NAME "irods-uu-microservices")
set(CPACK_PACKAGE_VENDOR "Utrecht University <fbyoda@uu.nl>") set(CPACK_PACKAGE_VENDOR "Utrecht University <fbyoda@uu.nl>")
set(CPACK_PACKAGE_CONTACT "Utrecht University <fbyoda@uu.nl>") set(CPACK_PACKAGE_CONTACT "Utrecht University <fbyoda@uu.nl>")
set(CPACK_PACKAGE_VERSION "4.1.11_0.3.0") set(CPACK_PACKAGE_VERSION "4.1.11_0.3.3")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/package/description.txt") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/package/description.txt")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Miscellaneous microservices developed by Utrecht university.") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Miscellaneous microservices developed by Utrecht university.")
......
...@@ -114,12 +114,13 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t ...@@ -114,12 +114,13 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t
/* for new AVU creation */ /* for new AVU creation */
modAVUMetadataInp_t modAVUMetadataInp; modAVUMetadataInp_t modAVUMetadataInp;
const int MAX_ATTR_NAME_LEN = 2700; const size_t MAX_ATTR_NAME_LEN = 2700;
const int MAX_ATTR_VALUE_LEN = 2700; const size_t MAX_ATTR_VALUE_LEN = 2700;
const int MAX_ATTR_UNIT_LEN = 250; const size_t MAX_ATTR_UNIT_LEN = 250;
char* attrName; char* attrName;
char* attrValue; char* attrValue;
char* attrUnit; char* attrUnit;
size_t attrNameLen, attrValueLen, attrUnitLen;
rodsLong_t coll_id; rodsLong_t coll_id;
...@@ -152,16 +153,7 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t ...@@ -152,16 +153,7 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t
} }
/* Get path of XML document */
/*
rei->status = parseMspForDataObjInp (xmlObj, &xmlDataObjInp, &myXmlDataObjInp, 0);
if (rei->status < 0)
{
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: input xmlObj error. status = %d", rei->status);
return (rei->status);
}
*/
if ( strcmp( xmlParam->type, BUF_LEN_MS_T) == 0 && xmlParam->inpOutBuf != NULL) { if ( strcmp( xmlParam->type, BUF_LEN_MS_T) == 0 && xmlParam->inpOutBuf != NULL) {
...@@ -171,6 +163,14 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t ...@@ -171,6 +163,14 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t
} else if ( strcmp( xmlParam->type, STR_MS_T) == 0 || strcmp( xmlParam->type, DataObjInp_MS_T) == 0) { } else if ( strcmp( xmlParam->type, STR_MS_T) == 0 || strcmp( xmlParam->type, DataObjInp_MS_T) == 0) {
/* Get path of XML document */
rei->status = parseMspForDataObjInp (xmlParam, &xmlDataObjInp, &myXmlDataObjInp, 0);
if (rei->status < 0)
{
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: input xmlObj error. status = %d", rei->status);
return (rei->status);
}
/******************************** OPEN AND READ FROM XML OBJECT ********************************/ /******************************** OPEN AND READ FROM XML OBJECT ********************************/
/* Open XML file */ /* Open XML file */
...@@ -264,32 +264,43 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t ...@@ -264,32 +264,43 @@ msiLoadMetadataFromXml(msParam_t *targetObj, msParam_t *xmlParam, ruleExecInfo_t
attrName = (char*)xmlNodeGetContent(getChildNodeByName(nodes->nodeTab[i], "Attribute")); attrName = (char*)xmlNodeGetContent(getChildNodeByName(nodes->nodeTab[i], "Attribute"));
if (!attrName) { if (!attrName) {
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: AVU does not contain an Attribute element"); rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: AVU does not contain an Attribute element");
break; continue;
} }
if (strlen(attrName) > MAX_ATTR_NAME_LEN) { attrNameLen = strlen(attrName);
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute name is too large (>%d) - %s", if (attrNameLen > MAX_ATTR_NAME_LEN) {
MAX_ATTR_NAME_LEN, attrName); rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute name for AVU #%d is too large (%d>%d)",
break; i + 1, attrNameLen, MAX_ATTR_NAME_LEN, attrName);
continue;
} else if (attrNameLen == 0) {
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute name for AVU #%d is empty",
i + 1);
} }
attrValue = (char*)xmlNodeGetContent(getChildNodeByName(nodes->nodeTab[i], "Value")); attrValue = (char*)xmlNodeGetContent(getChildNodeByName(nodes->nodeTab[i], "Value"));
if (!attrValue) { if (!attrValue) {
rodsLog(LOG_ERROR, "msiLoadMetadataFromXml: AVU does not contain an Value element"); rodsLog(LOG_ERROR, "msiLoadMetadataFromXml: AVU #%d does not contain a Value element",
break; i + 1);
continue;
} }
if (strlen(attrValue) > MAX_ATTR_VALUE_LEN) { attrValueLen = strlen(attrValue);
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute value is too large (>%d) - %s", if (attrValueLen > MAX_ATTR_VALUE_LEN) {
MAX_ATTR_VALUE_LEN, attrValue); rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute value is too large (%d>%d) - %s",
break; attrValueLen, MAX_ATTR_VALUE_LEN, attrValue);
continue;
} else if (attrValueLen == 0) {
rodsLog(LOG_ERROR, "msiLoadMetadataFromXml: attribute value in AVU #%d with name '%s' is empty",
i + 1, attrName);
continue;
} }
attrUnit = (char*)xmlNodeGetContent(getChildNodeByName(nodes->nodeTab[i], "Unit")); attrUnit = (char*)xmlNodeGetContent(getChildNodeByName(nodes->nodeTab[i], "Unit"));
/* attrUnit can be null */ /* attrUnit can be null */
if (attrUnit) { if (attrUnit) {
if (strlen(attrUnit) > MAX_ATTR_UNIT_LEN) { attrUnitLen = strlen(attrUnit);
rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute unit is too large (>%d) - %s", if (attrUnitLen > MAX_ATTR_UNIT_LEN) {
MAX_ATTR_UNIT_LEN, attrUnit); rodsLog (LOG_ERROR, "msiLoadMetadataFromXml: attribute unit in AVU #%d is too large (%d>%d)",
break; i + 1, attrUnitLen, MAX_ATTR_UNIT_LEN, attrUnit);
continue;
} }
} }
......
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<!-- This is ment to test msiLoadMetadataFromXml -->
<AVU></AVU>
<AVU>
<Attribute>Test entities</Attribute>
<Value>&apos;Komkommer &amp; Tomaat &gt; Rucola&quot;</Value>
<Unit>kg</Unit>
</AVU>
<AVU>
<Attribute></Attribute>
<Value>Empty Attribute</Value>
</AVU>
<AVU>
<Attribute>Test Empty Value</Attribute>
<Value></Value>
</AVU>
<AVU>
<Attribute>Test No Value</Attribute>
<Unit>N/A</Unit>
</AVU>
<AVU>
<Attribute>Test Chinese</Attribute>
<Value>>価点行思先景録再選町能法日</Value>
<Unit>Chinese</Unit>
</AVU>
<AVU>
<Attribute>Test Chinese Too long</Attribute>
<Value>価点行思先景録再選町能法日。無体予表食棄教山知単北議献堀康二。協稿定用需田教露恒政氷明庭当効。向速兆類日落木逃中学消展審以産今。多信県喫党情茨著説文経憂仲。応著理給着級覧帯脇転術戸。索理価掲読中載中当労残社骨戦。界雨権金断辞故引並竹剤長。報薬上紀京音月年手易和断更戦同体羽先。長井政栂掲端金質未誕意住更衣経外庫用。
金参家針掲層費越辛親謙可。索屋治防陽上茂富全確消分題回速能問。町断情堀宮了海事写祉一土杯況。初羽報評降町困串最現問相権介型国。首斎光同了者幕為祭塚人年講題博。時駐待風偽雲郵書並企間人落授介見経。調均佐高席申稼放中球市方来作権足園専占。同著京禁事署組分館表佐編円載棋企朝。場分探教打川木川浅農構記齢催属谷評。
軽限融後年断式芸歴沿渋並拉一録百将惑。製検試小精旅優勝度中況込利。下野後影済生起景情富不致正聞図毎構長政。滞争趣組載決逮人野紹及名信経洋法南明。帯甲前他陳天活第少室整資険情夜鋭超既。詐元稿筑学合近思地休工絵話月時。紛情帯断読辞社属九格内非広薬会。愛鎮回禁空相独京雪易軽暮剤経。請難最権催道億権芸組図滞真開文芸待変刊理。
上歯録購円供署賦際嗅探提留張男駅。避句親辺系海池記議調護土食売梨真負津市得。競強吾選隊供際激崩読覧迎組運済爆歩。合格情楽学歩販申同倉訴威並投介。再脱年問投全投姫低源入真香聞芸。東伝盗心多左始志測能籍禁荏相阪。子起請伝電都見始例回空続覚資基妨政軽割。属不氷広子稿消金手張意繰社善外取護能明扱。台谷野締細文日漁対独皇必権。
領特記重取以南根日長最本図情権十。写近力人停車関飛係文掲南。必角認実載高使打端読罪水判家衝事。速桂著海場筋評府市止精考年。性材圧開料化運刊提択円一対浮作魚者初。気想暮連上仕収町豊人込光棋。放必自接離式早風遺現同効多明軍刊。経聞情航文場投単職必共応朝社。目迎麦流入更問能内露麻際安前。落吉報準午潟委症歴支小要代金着界高。
超教目放供安詳棋勝付以知府誇動図夏事江馴。切島外援食始前掲動院意武。炎金氏葉読産例無各能脂開進旅止大稿国面。当扱問占球緊着木出寄座隆非必。日周更板立広圧人兼真数掲界魚引。手真弘外真演来路金一泉委相。国住千南調梁真同体規委場増念係供報。復込写前松際崎心載後過得隊択。必展毎齢有届豊面手掲権連。字読量降育治再訴福下拉生約止。
育弁温売上表罪際何外輸画死個不悲場決。社願原制神祝択警挙飲玲掲的武。用松連手日暮政試技覧目王会増惑図務進崎逃。終族昭文体扶森近三別狩税帯高住調芸庁点場。書起社転若方館医収事紙学雇。視主酒元調味画持題開月貝。神運設相舎歩勇一歌自約新要聞加略毎苦問行。橋並月三毎業観達南作教教当。要項済作続野週字民住村戦議対年区必軍供方。
近専評新市備市選下哲中表。活掲祭記事企系書腕民隆前身後掲公週人戦。生告売最本九世指価位月書告稿今供。念九午記町聞対発廷社労古台州早質臼社。置川夜菓阪凍下並要村子大郎産。米以障惑響州僕告検無目夕。券不一転男設作駐決覧生函摩団元電万意月住。最者北番百習治問市熱台井見更佑始一女難日。整層選昌庭公痛差技軒七山読程線宿念商索。
多殊行著必量安供直紹見行格。堀戸球題話巣力制分念使降辺育歌詳券里蘭月。状国良発阪提縁挙景問祝者田取著。会育大用上載楽台発探入程団平。限離経夜橋初史大産申点裁作断具。酸覧設製備型一備原参改会績初覧平下。下定中難結景外掲誇景夜真。校南会入考月定職部投首入好。年形加技前禁魅術坪前国書夫。謙問速機払権無学阪掲冷要年批美治経政。
</Value>
<Unit>Chinese</Unit>
</AVU>
</metadata>
...@@ -6,7 +6,7 @@ myTestRule { ...@@ -6,7 +6,7 @@ myTestRule {
*item2 = 'U123456-ru.nl'; *item2 = 'U123456-ru.nl';
*item3 = '{"type":"PMID","id":"12345"}'; *item3 = '{"type":"PMID","id":"12345"}';
*item4 = '{"type":"arXiv","id":"xyz/abc"}'; *item4 = '{"type":"arXiv","id":"xyz/abc"}';
*item5 = 'null'; *item5 = '1';
*item6 = 'true'; *item6 = 'true';
*item7 = 'false'; *item7 = 'false';
*item8 = '["DICOM","test"]'; *item8 = '["DICOM","test"]';
...@@ -22,23 +22,23 @@ myTestRule { ...@@ -22,23 +22,23 @@ myTestRule {
*ec = errorcode( msi_json_arrayops(*json_str, *item8, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item8, "add", *size) );
# adding null does not supported? # adding null does not supported?
#*ec = errorcode( msi_json_arrayops(*json_str, *item5, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item5, "add", *size) );
# adding those will append additional boolean values to array # adding those will append additional boolean values to array
#*ec = errorcode( msi_json_arrayops(*json_str, *item6, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item6, "add", *size) );
#*ec = errorcode( msi_json_arrayops(*json_str, *item7, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item7, "add", *size) );
# adding those will not change array because they have been presented in it # adding those will not change array because they have been presented in it
#*ec = errorcode( msi_json_arrayops(*json_str, *item1, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item1, "add", *size) );
#*ec = errorcode( msi_json_arrayops(*json_str, *item2, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item2, "add", *size) );
#*ec = errorcode( msi_json_arrayops(*json_str, *item3, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item3, "add", *size) );
#*ec = errorcode( msi_json_arrayops(*json_str, *item4, "add", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item4, "add", *size) );
writeLine("stdout", *json_str ++ " size: " ++ *size); writeLine("stdout", *json_str ++ " size: " ++ *size);
## remove JSON object (rm/find) ## remove JSON object (rm/find)
#*ec = errorcode( msi_json_arrayops(*json_str, *item3, "rm", *size) ); *ec = errorcode( msi_json_arrayops(*json_str, *item3, "rm", *size) );
#writeLine("stdout", *json_str ++ " size: " ++ *size); writeLine("stdout", *json_str ++ " size: " ++ *size);
#*idx = 0; #*idx = 0;
#*ec = errorcode( msi_json_arrayops(*json_str, *item5, "find", *idx) ); #*ec = errorcode( msi_json_arrayops(*json_str, *item5, "find", *idx) );
...@@ -57,7 +57,7 @@ myTestRule { ...@@ -57,7 +57,7 @@ myTestRule {
*ec = errorcode( msi_json_arrayops(*json_str, "", "size", *mysize) ); *ec = errorcode( msi_json_arrayops(*json_str, "", "size", *mysize) );
writeLine("stdout", *json_str ++ " size: " ++ str(*mysize)); writeLine("stdout", *json_str ++ " size: " ++ str(*mysize));
*idx = 0; *idx = 1;
*item1 = ""; *item1 = "";
*ec = errorcode( msi_json_arrayops(*json_str, *item1, "get", *idx) ); *ec = errorcode( msi_json_arrayops(*json_str, *item1, "get", *idx) );
writeLine("stdout", *json_str ++ " " ++ *item1 ++ " at idx: " ++ str(*idx)); writeLine("stdout", *json_str ++ " " ++ *item1 ++ " at idx: " ++ str(*idx));
......
testRule {
if (*objPath=="") {
writeLine("stdout", "\*objPath is a required parameter");
fail;
}
msiGetIcatTime(*timestamp, 'unix');
*str =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<metadata>
<AVU>
<Attribute>TestAttribute1</Attribute>
<Value>TestValue *timestamp</Value>
</AVU>
<AVU>
<Attribute></Attribute>
<Value></Value>
</AVU>
<AVU>
<Attribute>TestAttribute2</Attribute>
<Value>TestValue *timestamp</Value>
<Unit>km/h</Unit>
</AVU>
</metadata>"
msiStrToBytesBuf(*str, *buf);
msiLoadMetadataFromXml(*objPath, *buf);
}
input *objPath=""
output ruleExecOut
testRule {
if (*objPath=="" || *avuXml =="") {
writeLine("stdout", "\*objPath and \*avuXml are a required parameters");
fail;
}
msiLoadMetadataFromXml(*objPath, *avuXml);
}
input *objPath="", *avuXml=""
output ruleExecOut
testRule {
if (*xsltObj=="" || *xmlObj=="") {
writeLine("stdout", "\*xsltObj and \*xmlObj are required parameters");
} else {
msiXsltApply(*xsltObj, *xmlObj, *outputBuf);
writeBytesBuf("stdout", *outputBuf);
}
}
input *xsltObj="", *xmlObj=""
output ruleExecOut
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment