From ae874916f7b34b949c149a0e7119a80d9950567e Mon Sep 17 00:00:00 2001 From: Ren RenJuan Date: Tue, 4 Feb 2014 19:58:44 +0000 Subject: [PATCH] * --- .cproject | 185 +++---------- ACTK1_0/Makefile | 5 +- ACTK1_0/se/LPE/LPCrtCmdExtension.cpp | 3 +- ACTK1_0/se/LPE/LPCrtCmdExtension.hpp | 82 +----- AusRegCliever/Makefile | 8 +- AusRegCliever/include/AC_OTE.h | 371 +++++++++++++++++---------- AusRegCliever/include/donutsOTEB.h | 87 ++++++- AusRegCliever/include/mdJSON.hpp | 14 +- AusRegCliever/include/mdcommon.h | 7 + AusRegCliever/server/cliever-md.cpp | 4 + AusRegCliever/server/mdAusReg.cpp | 266 ++++++++++++++++--- AusRegCliever/server/mdJSON.cpp | 141 ++++++---- json/OTEC.json | 153 ++++++----- 13 files changed, 798 insertions(+), 528 deletions(-) diff --git a/.cproject b/.cproject index d173782..96f0e75 100644 --- a/.cproject +++ b/.cproject @@ -3,8 +3,8 @@ - - + + @@ -16,27 +16,27 @@ - - - - - - - - + + + + + + + + - - + + - - - + + + - - + + @@ -45,19 +45,19 @@ - - - + + + - - + make - libACTK1_0.so + + all true true true @@ -70,44 +70,23 @@ true true - + make - tests + + dclean true true true make + dirs true true true - - make - dclean - true - true - true - - - make - - all - false - true - true - - - make - - build/LPChkExtension.o - true - true - false - - + make clean @@ -115,96 +94,14 @@ true true - + make - all - true - true - true - - - make - tests - true - true - true - - - make - - clean - true - true - true - - - make dirs true true true - - make - apig-cli - true - true - true - - - make - - build/commander.o - true - true - true - - - make - - build/ausreg-cd - true - true - true - - - make - - cliever - true - true - true - - - make - - all - true - true - true - - - make - all - true - true - true - - - make - tests - true - true - true - - - make - clean - true - true - true - make @@ -213,27 +110,19 @@ true true - + make - clean - false - true - true - - - make - distclean - true - true - true - - - make - build/ausreg-md + + all true true true + + + + + diff --git a/ACTK1_0/Makefile b/ACTK1_0/Makefile index 4e79cbd..b5feeaf 100644 --- a/ACTK1_0/Makefile +++ b/ACTK1_0/Makefile @@ -117,7 +117,7 @@ $(BUILD_OBJ_DIR)/%: $(BUILD_OBJ_DIR)/%.o # ARTKOBJS=build/XMLGregorianCalendar.o build/XMLParser.o build/XMLWriter.o build/ACSession.o build/DomainAddRem.o \ build/EnumDomainInfoResponse.o build/log.o build/PostalInfoType.o build/SessionManagerPropertiesImpl.o \ -build/RegistrantObjectType.o build/LPExtension.o build/LPChkCmdExtension.o build/LPCrtCmdExtension.o build/LPCrtRespExtension.o\ +build/RegistrantObjectType.o build/LPExtension.o \ build/AddRemType.o build/DomainCheckResponse.o build/EnumDomainUpdateCommand.o build/Properties.o build/SessionPoolImpl.o \ build/boolean.o build/DomainCreateCommand.o build/EnumType.o build/ProtocolExtensionCommand.o build/SSLException.o \ build/CertificateUserMismatchException.o build/DomainCreateResponse.o build/EPPDateFormatter.o build/ReceiveSE.o build/StandardCommandType.o \ @@ -138,7 +138,8 @@ build/CreateResponse.o build/DomainUpdateSyncCommandExtension build/DataResponse.o build/E164Extension.o build/Logger.o \ build/SMDExtension.o build/ACProxyCommand.o \ build/PollResponse.o build/SessionManagerFactory.o \ -build/Disclose.o build/EnumDomainCreateCommand.o build/LoginCommand.o build/PostalInfo.o build/SessionManagerImpl.o +build/Disclose.o build/EnumDomainCreateCommand.o build/LoginCommand.o build/PostalInfo.o \ +build/SessionManagerImpl.o build/LPChkCmdExtension.o build/LPCrtCmdExtension.o build/LPCrtRespExtension.o .PHONY: tests tests: all $(test_execs) diff --git a/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp b/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp index 6f68a47..cc6b45b 100644 --- a/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp +++ b/ACTK1_0/se/LPE/LPCrtCmdExtension.cpp @@ -17,9 +17,10 @@ namespace { } }; // anonymous namespace -void LPCrtCmdExtension::setSMD() +void LPCrtCmdExtension::setSMD(std::string smdIn) { haveSMD = true; + smdData = smdIn; } void LPCrtCmdExtension::addToCommand(const Command &command) const diff --git a/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp b/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp index ec81964..bf9cf68 100644 --- a/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp +++ b/ACTK1_0/se/LPE/LPCrtCmdExtension.hpp @@ -19,13 +19,15 @@ class LPCrtCmdExtension : public CommandExtension void setNoticeID(string &idVal,string ¬AftVal, string &acceptedVal) { noticeID = idVal; notAfter = notAftVal; acceptedDate = acceptedVal; haveNoticeID = true; } - void setSMD(); + void setSMD(std::string toWhat); private: - bool haveNoticeID,haveSMD; + bool haveNoticeID,haveSMD; + + std::string acceptedDate; std::string lpePhaseName; std::string noticeID; std::string notAfter; - std::string acceptedDate; + std::string smdData; }; @@ -43,78 +45,4 @@ inline LPCrtCmdExtension::LPCrtCmdExtension( const std::string *phaseName) #endif // __DOMAIN_UPDATE_COMMAND_EXTENSION_HPP -// just here for exploratory purposes -static const string smdData( -"DQo8c21kOnNpZ25lZE1hcmsgeG1sbnM6c21kPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOnNpZ25l" -"ZE1hcmstMS4wIiBpZD0iX3NpZ25lZE1hcmsiPjxzbWQ6aWQ+MS0yPC9zbWQ6aWQ+DQogIDwhLS0g" -"aW5zZXJ0IHNtZDppZCAtLT4NCiAgPHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSIyIj4NCiAgICA8" -"c21kOm9yZz5FeGFtcGxlIEluYy48L3NtZDpvcmc+DQogICAgPHNtZDplbWFpbD5zdXBwb3J0QGV4" -"YW1wbGUudGxkPC9zbWQ6ZW1haWw+DQogICAgPHNtZDp1cmw+aHR0cDovL3d3dy5leGFtcGxlLnRs" -"ZDwvc21kOnVybD4NCiAgICA8c21kOnZvaWNlIHg9IjEyMzQiPisxLjcwMzU1NTU1NTU8L3NtZDp2" -"b2ljZT4NCiAgPC9zbWQ6aXNzdWVySW5mbz48c21kOm5vdEJlZm9yZT4yMDA5LTA4LTE2VDA5OjAw" -"OjAwLjBaPC9zbWQ6bm90QmVmb3JlPjxzbWQ6bm90QWZ0ZXI+MjA5OS0wOC0xNlQwOTowMDowMC4w" -"Wjwvc21kOm5vdEFmdGVyPg0KICA8IS0tIGluc2VydCBzbWQ6bm90QmVmb3JlIC0tPg0KICA8IS0t" -"IGluc2VydCBzbWQ6bm90QWZ0ZXIgLS0+DQogIDxtYXJrOm1hcmsgeG1sbnM6bWFyaz0idXJuOmll" -"dGY6cGFyYW1zOnhtbDpuczptYXJrLTEuMCI+DQogICAgPG1hcms6dHJhZGVtYXJrPg0KICAgICAg" -"PG1hcms6aWQ+MTIzNC0yPC9tYXJrOmlkPjxtYXJrOm1hcmtOYW1lPmJvw650ZSBkZSB0ZXN0PC9t" -"YXJrOm1hcmtOYW1lPg0KICAgICAgPCEtLSBpbnNlcnQgbWFyazptYXJrTmFtZSAtLT4NCiAgICAg" -"IDxtYXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPg0KICAgICAgICA8bWFyazpvcmc+RXhh" -"bXBsZSBJbmMuPC9tYXJrOm9yZz4NCiAgICAgICAgPG1hcms6YWRkcj4NCiAgICAgICAgICA8bWFy" -"azpzdHJlZXQ+MTIzIEV4YW1wbGUgRHIuPC9tYXJrOnN0cmVldD4NCiAgICAgICAgICA8bWFyazpz" -"dHJlZXQ+U3VpdGUgMTAwPC9tYXJrOnN0cmVldD4NCiAgICAgICAgICA8bWFyazpjaXR5PlJlc3Rv" -"bjwvbWFyazpjaXR5Pg0KICAgICAgICAgIDxtYXJrOnNwPlZBPC9tYXJrOnNwPg0KICAgICAgICAg" -"IDxtYXJrOnBjPjIwMTkwPC9tYXJrOnBjPg0KICAgICAgICAgIDxtYXJrOmNjPlVTPC9tYXJrOmNj" -"Pg0KICAgICAgICA8L21hcms6YWRkcj4NCiAgICAgIDwvbWFyazpob2xkZXI+DQogICAgICA8bWFy" -"azpqdXJpc2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPg0KICAgICAgPG1hcms6Y2xhc3M+" -"MzU8L21hcms6Y2xhc3M+DQogICAgICA8bWFyazpjbGFzcz4zNjwvbWFyazpjbGFzcz48bWFyazps" -"YWJlbD5ib2l0ZWRldGVzdDwvbWFyazpsYWJlbD48bWFyazpsYWJlbD5ib2l0ZWRlLXRlc3Q8L21h" -"cms6bGFiZWw+PG1hcms6bGFiZWw+Ym9pdGUtZGUtdGVzdDwvbWFyazpsYWJlbD4NCiAgICAgIDwh" -"LS0gaW5zZXJ0IG1hcms6bGFiZWwgLS0+DQogICAgICA8bWFyazpnb29kc0FuZFNlcnZpY2VzPg0K" -"ICAgICAgICBEaXJpZ2VuZGFzIGV0IGVpdXNtb2RpDQogICAgICAgIGZlYXR1cmluZyBpbmZyaW5n" -"byBpbiBhaXJmYXJlIGV0IGNhcnRhbSBzZXJ2aWNpYS4NCiAgICAgIDwvbWFyazpnb29kc0FuZFNl" -"cnZpY2VzPg0KICAgICAgPG1hcms6cmVnTnVtPjIzNDIzNTwvbWFyazpyZWdOdW0+DQogICAgICA8" -"bWFyazpyZWdEYXRlPjIwMDktMDgtMTZUMDk6MDA6MDAuMFo8L21hcms6cmVnRGF0ZT4NCiAgICAg" -"IDxtYXJrOmV4RGF0ZT4yMDk5LTA4LTE2VDA5OjAwOjAwLjBaPC9tYXJrOmV4RGF0ZT4NCiAgICA8" -"L21hcms6dHJhZGVtYXJrPg0KICA8L21hcms6bWFyaz4NCjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6" -"Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxTaWduZWRJbmZvPjxDYW5vbmljYWxpemF0" -"aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMx" -"NG4jIiAvPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx" -"LzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2IiAvPjxSZWZlcmVuY2UgVVJJPSIjX3NpZ25lZE1h" -"cmsiPjxUcmFuc2Zvcm1zPjxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y" -"MDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIgLz48VHJhbnNmb3JtIEFsZ29yaXRo" -"bT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIiAvPjwvVHJhbnNmb3Jt" -"cz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxl" -"bmMjc2hhMjU2IiAvPjxEaWdlc3RWYWx1ZT5CK2R6NWtzdno4K3FQbFMzUE8rKy93UnYxdEFRU1VE" -"NkhjaFZPTzkyN2FFPTwvRGlnZXN0VmFsdWU+PC9SZWZlcmVuY2U+PC9TaWduZWRJbmZvPjxTaWdu" -"YXR1cmVWYWx1ZT5VZ3VJQm5oRElRQXNqUTlkTkFRcXVDR3h5Q2o3UTlYV3FxSHdDa2xKZHpkMi9H" -"bDB2UHVwb282aFV4cUprU3lPbjI5OTZlQ1Z5NjQ0c3AvQVFISzl2N1VFRGJWcmp4WFlPT2JuVUQ1" -"RUlLMEcxbnM0UEh5MkhBSjNiVlNPL1JuVG4rU25KV1o1d0hSWHg2ZjhLd0pIUThVUHg0R3Q5SVZy" -"elRHQ0NwSkduMkU1djFTbjlTTXFDcWY4M1ZiMkxFellQbTg2Zkw4NUNwZmNFK2t0YnNsZHFmZno0" -"RXMyU2lobG9vY1BtaEJIeTg0eVNUS05MVWtmcXI4ZXk1YU1QeThHb2ErMXVHM1UwS2g0Zk5nZGdL" -"RmZUZnhBUHN0RCtYTzEwQTB3OCtxQnRQZFFwcVgwQVZKbUNSR04vRk52UWNCb0RvV1U5K2FsSEtq" -"c29sNXZRTDc0QWc9PTwvU2lnbmF0dXJlVmFsdWU+PEtleUluZm8+PFg1MDlEYXRhPjxYNTA5Q2Vy" -"dGlmaWNhdGU+TUlJRHNEQ0NBcGdDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUF3Z2FFeEN6QUpCZ05W" -"QkFZVEFsVlRNUk13RVFZRFZRUUlEQXBYWVhOb2FXNW5kRzl1TVJFd0R3WURWUVFIREFoQ1pXeHNa" -"WFoxWlRFUE1BMEdBMVVFQ2d3R1JHOXVkWFJ6TVEwd0N3WURWUVFMREFSVVpYTjBNU1V3SXdZRFZR" -"UUREQngwYldOb2RHVnpkSEp2YjNSalpYSjBNUzF2ZEdVdFpHOXVkWFJ6TVNNd0lRWUpLb1pJaHZj" -"TkFRa0JGaFJvYjNOMGJXRnpkR1Z5UUdSdmJuVjBjeTVqYnpBZUZ3MHhNekEzTVRBd05qUTNNelJh" -"RncweU16QTNNRGd3TmpRM016UmFNSUdaTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tW" -"MkZ6YUdsdVozUnZiakVSTUE4R0ExVUVCd3dJUW1Wc2JHVjJkV1V4RHpBTkJnTlZCQW9NQmtSdmJu" -"VjBjekVOTUFzR0ExVUVDd3dFVkdWemRERWRNQnNHQTFVRUF3d1VjMjFrWTJWeWRERXhMVzkwWlMx" -"a2IyNTFkSE14SXpBaEJna3Foa2lHOXcwQkNRRVdGR2h2YzNSdFlYTjBaWEpBWkc5dWRYUnpMbU52" -"TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3dEhkdmRtMTFJaVM5" -"aG02RkM1QlNKNmdEM2kxRGx1S2QyU0dpYWdjOU5WZmFKSW95RlhENlRzMjR5cDdIWHFrcitrMGdq" -"RjF3Tng5R0MrTkV5N0h6Vmo1TFNQQ0p0NEFobEZKWjlVbnVjYWRyWm55bVhuUWZwK2xRSXkyaEor" -"c3UxbTN4c3NXemdRYjgwdWg3QTZwZFJiRTNSNFZLRC9CZ1F1WG1rUnFqeUt3RkZpSTBCdjJQaEVj" -"NllJdTRQV25aYVZmWnovSE1Wbkt6R1dSMXFQazgzNkNaMk5MSkFhKzViak9nMFJHeHB1TDZjWXZa" -"ZHNKTTdqVXBRMFl6SGFJSlJjM0tmd2pEYVRHeTdyeHZHQzlMM250c0l4ZmFnTnZyOEh1MU9HdVcw" -"RSt2TzhHSFNnSExWeGRuZEVYUDFlQUJlS2F2NWFkYzZKcjVJaHE3UkdscndJREFRQUJNQTBHQ1Nx" -"R1NJYjNEUUVCQlFVQUE0SUJBUUJWQ0dHY3I1eTNZM2Ntd0hxNjdUVS96Slhqd3RmcFhQRFQyTTUv" -"YmFUK1ZGQ0s3Z1JQYWJwV3JCdmtodmtKbSt1VE9nQmM5WDdqK1l5aDN6U1IydE84Umx6NHdQZndC" -"cFdkWllkTmZXMUVZdDZ3Q0F4WlM3RlB5eEJ3cmEzUTczNEYyWUsvdjBUOG14WGhlVWVDYXhheHV6" -"aG11U2hRTTd4YkYrQUdRdWlBdmdJRUVhZ3VBcUdCOS9GMjhHYnYyNHpVcmxLcktSUGpReWxnR1V6" -"eXQxVS9tbVBrQ0JCd0ZWWCtlWkY1UjZmdFJDN1ZnaWFLZ3VTYlNyUjVuRjRpUzZXQUVtakdMZ01v" -"RHhzUU5KM3RSQUJMUGJSTHVIYVUxWjZ2UmRtQ3VMczVrcVFTWThZZXB1bGJaYnRyY3hEQU1BcE5q" -"SHVSc2M0a0NSZ1VvNlFHVG1zbTwvWDUwOUNlcnRpZmljYXRlPjwvWDUwOURhdGE+PC9LZXlJbmZv" -"PjwvU2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+"); diff --git a/AusRegCliever/Makefile b/AusRegCliever/Makefile index 889624a..3ef8e08 100644 --- a/AusRegCliever/Makefile +++ b/AusRegCliever/Makefile @@ -16,8 +16,8 @@ Cc=gcc ifeq ($(LOCATION),DEBIAN_7) ifneq ($(ARTKENABLED),0) - ARTKLIB=-L/home/jdaugherty/clients/reg.de/git/ACTK1_0/lib - ARTKINCL=-I/home/jdaugherty/clients/reg.de/git/ACTK1_0 + ARTKLIB=-L/home/jdaugherty/clients/greg/git/ACTK1_0/lib + ARTKINCL=-I/home/jdaugherty/clients/greg/git/ACTK1_0 endif endif @@ -60,11 +60,11 @@ XERCES_LIB = xerces-c XERCES_INC_DIR = /opt/local/include/xercesc/ endif -SLIBS= -L/usr/lib $(BOSTLIB) $(LOG4LIB) $(ARTKLIB) -l boost_system -l boost_thread -l log4cpp -l ACTK1_0 -l jsoncpp +SLIBS= -L/usr/lib $(BOSTLIB) $(LOG4LIB) $(ARTKLIB) -l boost_system -l boost_thread -l log4cpp -l ACTK1_0 -l jsoncpp -l SegFault DLIBS= -L/usr/lib $(BOSTLIB) $(LOG4LIB) $(ARTKLIB) -l boost_system -l boost_thread -l log4cpp SINCL= -I include -I /usr/include/log4cpp -I /usr/include/jsoncpp $(BOSINCL) -CFLAGS= -DCURRENT_DEBUG=1000 -ggdb3 -DARTKENABLED=$(ARTKENABLED) -DAC_MD +CFLAGS= -DCURRENT_DEBUG=1000 -std=gnu++11 -ggdb3 -rdynamic -DARTKENABLED=$(ARTKENABLED) -DAC_MD -w # # ---------- Should not need to change below diff --git a/AusRegCliever/include/AC_OTE.h b/AusRegCliever/include/AC_OTE.h index d6dcbe0..ee2fc06 100644 --- a/AusRegCliever/include/AC_OTE.h +++ b/AusRegCliever/include/AC_OTE.h @@ -8,220 +8,334 @@ #ifndef REGISTRYOTE_H_ #define REGISTRYOTB_H_ -typedef auto_ptr AC_SESSMGR; -typedef auto_ptr AC_SESSION; - - static AC_SESSMGR ac_mgr; - static AC_SESSION ac_sess; - + ACTx *inProgress; int nCases,thisCase; + testDescs theseSpecs; testCases theseCases; testFuncs theseFuncs; + Json::Value theseParms; + bool acTkInitialised = false, fatal = false, done = false, transferGainer, bindError; - const char *thisName = "registrar.ote"; - string thisRegistry("Unknown"), thatAccount("Unknown"), thisAccount("Unknown"), shitName; + const string claims("claims"), dpml("custom"), landrush("landrush"), sunrise("sunrise"); - int cmd=0,debug=1000; - string op("newInstance"); + const char *thisName = "registrar.ote", *thisDesc; - const string claims("claims"), dpml("custom"), landrush("landrush"), sunrise("sunrise"); + string thisRegistry("Unknown"), thatAccount("Unknown"), thisAccount("Unknown"); - std::string ctc("renjuan"); - std::string ctcPW("Ab9dW@rd"); - std::string ctcEmail("juan@acm.org"); - std::string ctcName("Ren Ren-Juan"); - std::string ctcCity("Niagara Falls"); - std::vector - ctcCrib(1,"2926 2nd Strt"); - std::string ctcProv("NY"); - std::string ctcPC("14305"); - std::string ctcGuo("US"); - std::string ctcOrg("American Kybernetik"); + int debug=1000; - std::string pw("Ab9dW@rd"); - std::string RID("renjuan"); + commandFrame *ctxt; - std::vector tech(1,std::string("renjuan") ); - std::vector admin(1,std::string("renjuan") ); - std::vector billing(1,std::string("renjuan") ); - std::vector ns(1,std::string("ns1.google.com") );; + inline bool checkAndSetBool(bool &target,const char *jsonName,const bool defaultValue,bool required) { - const IntPostalInfo ctcPO(ctcName,ctcOrg, - ctcCrib,ctcCity,ctcProv,ctcPC,ctcGuo); + bool value = true; - LPCrtCmdExtension crtE1( &claims ), crtE2( &dpml ); + if (!theseParms.isMember(jsonName)) { + if (required) { + theseLogs->logN(2,"%d - no '%s' boolean field",thisCase+1,jsonName); + ACPRODINOTE::bindError = true; + value = false; + } + } + + // TODO: Check bool type + + target = theseParms.get(jsonName,defaultValue).asBool(); + return value; + + } + + inline bool checkAndSetStr(string &target,const char *jsonName,const char *defaultValue,bool required) { + + bool value = true; + + if (!theseParms.isMember(jsonName)) { + if (required) { + theseLogs->logN(2,"%d - no '%s' string field",thisCase+1,jsonName); + ACPRODINOTE::bindError = true; + value = false; + } + } + + // TODO: Check string type + + target = theseParms.get(jsonName,defaultValue).asString(); + return value; + + } inline bool checkNameOK() { - if (!parms[thisCase].isMember("name")) { - theseLogs->logN(1,"(%d) no 'name' field",cmd); + if (!theseParms.isMember("name")) { + theseLogs->logN(1,"%d - no 'name' field",thisCase+1); ACPRODINOTE::bindError = true; return false; } - shitName = parms[thisCase]["name"].asString(); - thisName = shitName.c_str(); + ctxt->shitName = theseParms.get("name","noname").asString(); + thisName = ctxt->shitName.c_str(); return true; } inline bool checkContOK() { - if (!parms[thisCase].isMember("cont_id")) { - ACPRODINOTE::bindError = true; - theseLogs->logN(1,"(%d) no 'cont_id' field",cmd); - return false; + bool value = checkAndSetStr(ctxt->ctc,"cont_id","renjuan",true); - } + ctxt->thisDesc = theseSpecs[thisCase].case_desc; - return true; + value = value ? true : checkAndSetStr(ctxt->ctc,"cont_name","renjuan",true); + value = value ? true : checkAndSetStr(ctxt->ctcPW,"cont_pw","Ab9dW@rd",true); + value = value ? true : checkAndSetStr(ctxt->ctcEmail,"cont_email","juan@acm.org",true); + checkAndSetStr(ctxt->ctcName,"cont_name","Ren Ren-Juan",false); + checkAndSetStr(ctxt->ctcCity,"cont_city","Niagara Falls",false); + checkAndSetStr(ctxt->ctcProv,"cont_province","NY",false); + checkAndSetStr(ctxt->ctcPC,"cont_postal_code","14305",false); + checkAndSetStr(ctxt->ctcGuo,"cont_guo","US",false); + checkAndSetStr(ctxt->ctcOrg,"cont_org","American Kybernetik",false); + return value; } - inline bool checkPWDOK(Json::Value thisPW) { + inline bool checkPWDOK() { - if (!parms[thisCase].isMember("cont_id")) { - ACPRODINOTE::bindError = true; - theseLogs->logN(1,"(%d) no 'cont_pw' field",cmd); - return false; - - } - - return true; - - } - - void check() { - - - if (checkNameOK()) { - - DomainCheckCommand *c = new DomainCheckCommand(thisName); - DomainCheckResponse *r = new DomainCheckResponse(); - - theseLogs->logN(2,"(%d) Queue Unextended check of %s",cmd++,thisName); - acq.push( new Transaction(c, r) ); - - } + return checkAndSetStr(ctxt->pw,"cont_pw","Ab9dW@rd",true); } - void checkClaims() { + inline bool checkPhaseOK() { - - if (checkNameOK()) { - - DomainCheckCommand *c = new DomainCheckCommand(thisName); - LPChkCmdExtension chkE(&claims); - c->appendExtension(chkE); - DomainCheckResponse *r = new DomainCheckResponse(); - LPChkRespExtension chkRspE; - r->registerExtension(&chkRspE); - - theseLogs->logN(2,"(%d) Queue Claims type Check of %s",cmd++,thisName); - acq.push(new Transaction(c, r)); - - } + return checkAndSetStr(ctxt->thisLaunchPhase,"launch_phase","sunrise",true); } - void create() { + inline bool checkSMD() { + +#define MAX_SMD_SIZE (64*1024) + + bool value = checkAndSetStr(ctxt->smdFileName,"smd_data","",true); + + if (value) { string fullPath = ctxt->smdPath + theseParms.get("smd_data","").asString(); + + if( access( fullPath.c_str(), R_OK ) != -1 ) {struct stat st; int result,size; char *buffer; + stat(fullPath.c_str(), &st); + size = st.st_size; + if (!size || size > MAX_SMD_SIZE) { + theseLogs->logN(2,"%d - '%s' zero size or too big ",thisCase+1,fullPath.c_str() ); + value = false; + goto done; + } + FILE *file; + buffer = (char *)malloc(size); + if (file = fopen(fullPath.c_str(), "r")) + {result = fread (buffer,1,size,file); + fclose(file); + if (result != size) + {theseLogs->logN(2,"%d - error reading '%s' ",thisCase+1,fullPath.c_str() ); value = false;} + else ctxt->smdData = string(buffer); + } + theseLogs->logN(3,"%d - %d bytes SMD data read from '%s' ",thisCase+1,size,fullPath.c_str() ); + } else { + value = false; + theseLogs->logN(2,"%d - can't read SMD data from '%s' ",thisCase+1,fullPath.c_str() ); + } + } + + done: return value; + } + + inline void newCommandFrame() { + + ctxt = new commandFrame(); + + ctxt->ctcOrg = string("American Kybernetik"); + ctxt->ctcProv = string("NY"); + ctxt->ctcPC = string("14305"); + + ctxt->thisDesc = theseSpecs[thisCase].case_desc; + thisDesc = ctxt->thisDesc.c_str(); + + if (!theseParms.isMember("dryrun")) { // TODO: Check bool type + ctxt->thisDryRun = theseParms.get("dryrun",false).asBool(); + theseLogs->logN(0," ... this case disabled transactioning"); + } + + } + + + void check() { newCommandFrame(); + + if (checkNameOK()) { + + TxQ *txq; + txq = new TxQ + (thisName,thisDesc); + + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(2,"%d .. Queue Unextended IETF Standard check of %s",thisCase+1,thisName); + acq.push( txq ); + + } + } + + void finishCase02() { + + TxQ *txq; + txq = (TxQ*) inProgress; + + LPChkRespExtension *lpce = (LPChkRespExtension *)txq->ce; + + theseLogs->logN(2," Claims %s exist for %s.", + (lpce->doClaimsExist() ? "do" : " do not "), txq->ctx->shitName.c_str()); + if (lpce->doClaimsExist()) + theseLogs->logN(2," claim: %s .",lpce->getClaimsKey()); + + } + + void checkClaims() { newCommandFrame(); + + if (checkNameOK()) { + + TxQ *txq; + txq = new TxQ + (&claims, thisName, thisDesc); + txq->c->appendExtension(*txq->ce); + txq->r->registerExtension(txq->re); + + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + txq->finisher = finishCase02; + theseLogs->logN(2,"%d .. Queue Claims type Check of %s",thisCase+1,thisName); + acq.push(txq); + + } + } + + void create() { newCommandFrame(); if (checkNameOK() && checkContOK()) { + TxQ *txq; + txq = new TxQ + ( ctxt->shitName, ctxt->pw, &ctxt->RID ); - DomainCreateCommand *c = new DomainCreateCommand(shitName,pw,&RID, &tech, &ns, &admin, &billing); - DomainCreateResponse *r = new DomainCreateResponse(); + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(3,"%d .. Queue default create of %s ( %s ).",thisCase+1, thisName, thisAccount.c_str()); + acq.push(txq); - theseLogs->logN(3,"(%d) Queue normal create of %s ( %s ).",cmd++, thisName, thisAccount.c_str()); - acq.push(new Transaction(c, r)); - - } + } } - string noticeID("d85159710000000000000008692"), - notAfter("2015-01-01T12:00:00Z"), acceptedDate("2014-01-27T19:00:00Z"); - void createClaimOverride() { + void createClaimOverride() { newCommandFrame(); - if (checkNameOK()) { + if (checkNameOK() && checkPhaseOK() + && checkAndSetStr(ctxt->noticeID,"noticeID","d85159710000000000000008692",true) + && checkAndSetStr(ctxt->notAfter,"notAfter","2015-01-01T12:00:00Z",true) + && checkAndSetStr(ctxt->acceptedDate,"acceptedDate","2014-01-27T19:00:00Z",true) ) + { - DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing); - crtE1.setNoticeID(noticeID, notAfter, acceptedDate); - c->appendExtension(crtE1); - DomainCreateResponse *r; + TxQ *txq; + txq = new TxQ + (ctxt->shitName, ctxt->pw, &ctxt->RID, &ctxt->tech, &ctxt->ns, &ctxt->admin, &ctxt->billing, NULL, &ctxt->thisLaunchPhase); - theseLogs->logN(2,"(%d) Queue create %s w Notice ID test data (TCN).",++cmd,thisName); - acq.push(new Transaction(c, r)); + txq->ce->setNoticeID(ctxt->noticeID, ctxt->notAfter, ctxt->acceptedDate); + txq->c->appendExtension(*txq->ce); + + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(2,"%d .. Queue create %s w Notice ID test data (TCN).",thisCase+1,thisName); + acq.push(txq); } } - void createContact() { + void createContact() { newCommandFrame(); - ContactCreateCommand *c = new ContactCreateCommand(ctc,ctcPW,&ctcPO,ctcEmail); - ContactCreateResponse *r = new ContactCreateResponse(); + if (checkContOK() ) { - theseLogs->logN(2,"(%d) Queue create contact %s.",++cmd,ctc.c_str()); - acq.push(new Transaction(c, r)); + TxQ *txq; + txq = new TxQ + (ctxt->ctc,ctxt->ctcPW,&ctxt->ctcPO,ctxt->ctcEmail); + + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(2,"%d .. Queue create contact %s.",thisCase+1, ctxt->ctc.c_str()); + acq.push(txq); + + } } - void dpmlCreate() { + void dpmlCreate() { newCommandFrame(); + if (checkNameOK() && checkPhaseOK() && checkSMD()) { - if (checkNameOK()) { + TxQ *txq; + txq = new TxQ + (ctxt->shitName, ctxt->pw, ctxt->RID, ctxt->tech, ctxt->ns, ctxt->admin, ctxt->billing); - DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing); - crtE2.setSMD(); - c->appendExtension(crtE2); - DomainCreateResponse *r = new DomainCreateResponse(); + txq->ce->setSMD(ctxt->smdData); + txq->c->appendExtension(*txq->ce); - theseLogs->logN(2,"(%d) Queue DPML block create %s w boitedetest.smd data.",++cmd,thisName); - acq.push(new Transaction(c, r)); + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(2,"(%d) Queue DPML block create %s w boitedetest.smd data.",thisCase+1,thisName); + acq.push(txq); } } - void sunriseCreate() { + void sunriseCreate() { newCommandFrame(); - if (checkNameOK()) { + if (checkNameOK() && checkPhaseOK() && checkSMD()) { - DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing); - c->appendExtension(crtE1); - DomainCreateResponse *r = new DomainCreateResponse(); + TxQ *txq; + txq = new TxQ + (ctxt->shitName, ctxt->pw, &ctxt->RID, &ctxt->tech, &ctxt->ns, &ctxt->admin, &ctxt->billing, NULL, &ctxt->thisLaunchPhase); - theseLogs->logN(2,"(%d) Queue Sunrise create %s with ICANN SMD test data.",++cmd,thisName); - acq.push(new Transaction(c, r)); + txq->ce->setSMD(ctxt->smdData); + txq->c->appendExtension(*txq->ce); + + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(2,"%d .. Queue Sunrise create %s with ICANN SMD test data.",thisCase+1,thisName); + acq.push(txq); } } - void transfer() { + void transfer() { newCommandFrame(); - if (checkNameOK()) { + if (checkNameOK() && checkAndSetBool(transferGainer,"isGainer",true,true)) { - Transaction *thisTest; + if (transferGainer) { - DomainTransferRequestCommand *c0 = new DomainTransferRequestCommand(thisName,ctcPW); - DomainTransferApproveCommand *c1 = new DomainTransferApproveCommand(thisName,ctcPW); - DomainTransferResponse *r = new DomainTransferResponse(); + TxQ *txq; + txq = new TxQ + (ctxt->shitName,ctxt->pw,thisDesc); - thisTest = transferGainer ? new Transaction(c0, r) : new Transaction(c1, r) ; + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(4,"%d .. Queue %s %s -> %s.", (transferGainer ? "Request" : "Approve") ,thisCase+1, + ctxt->shitName.c_str(),thatAccount.c_str(),thisAccount.c_str()); + acq.push(txq); - theseLogs->logN(4,"(%d) Queue %s %s -> %s.", (transferGainer ? "Request" : "Approve") ,cmd++, - thisName,thatAccount.c_str()); + } else { - acq.push(thisTest); + TxQ < DomainTransferApproveCommand , DomainTransferResponse, CommandExtension, ResponseExtension > *txq; + txq = new TxQ< DomainTransferApproveCommand , DomainTransferResponse, CommandExtension, ResponseExtension > + (ctxt->shitName,ctxt->pw,thisDesc); + + txq->set(ctxt,theseSpecs[thisCase].case_name.c_str()); + theseLogs->logN(4,"%d .. Queue %s %s -> %s.", thisCase+1, (transferGainer ? "Request" : "Approve") , + ctxt->shitName.c_str(),thisAccount.c_str() ,thatAccount.c_str()); + acq.push(txq); + + } } @@ -237,8 +351,7 @@ typedef auto_ptr AC_SESSION; theseFuncs["case05"] = createClaimOverride; theseFuncs["case06"] = transfer; - theseLogs->logN(0,"7 test case backends available for scripting"); - + theseLogs->logN(1,"%d test case backends available for scripting",theseFuncs.size()); } diff --git a/AusRegCliever/include/donutsOTEB.h b/AusRegCliever/include/donutsOTEB.h index 7ae46ee..177f9cf 100644 --- a/AusRegCliever/include/donutsOTEB.h +++ b/AusRegCliever/include/donutsOTEB.h @@ -8,6 +8,87 @@ #ifndef DONUTSOTEB_H_ #define DONUTSOTEB_H_ +const char *name1 = "yoda.guru"; +const char *name2 = "unicycles.bike"; +const char *name3 = "test-validate.claimsgasix"; +const char *name4 = "horny.singles"; +const char *name5 = "atmospheric.lighting"; +const char *name6 = "mushroomtheory.management"; + +static const string smdData( +"DQo8c21kOnNpZ25lZE1hcmsgeG1sbnM6c21kPSJ1cm46aWV0ZjpwYXJhbXM6eG1sOm5zOnNpZ25l" +"ZE1hcmstMS4wIiBpZD0iX3NpZ25lZE1hcmsiPjxzbWQ6aWQ+MS0yPC9zbWQ6aWQ+DQogIDwhLS0g" +"aW5zZXJ0IHNtZDppZCAtLT4NCiAgPHNtZDppc3N1ZXJJbmZvIGlzc3VlcklEPSIyIj4NCiAgICA8" +"c21kOm9yZz5FeGFtcGxlIEluYy48L3NtZDpvcmc+DQogICAgPHNtZDplbWFpbD5zdXBwb3J0QGV4" +"YW1wbGUudGxkPC9zbWQ6ZW1haWw+DQogICAgPHNtZDp1cmw+aHR0cDovL3d3dy5leGFtcGxlLnRs" +"ZDwvc21kOnVybD4NCiAgICA8c21kOnZvaWNlIHg9IjEyMzQiPisxLjcwMzU1NTU1NTU8L3NtZDp2" +"b2ljZT4NCiAgPC9zbWQ6aXNzdWVySW5mbz48c21kOm5vdEJlZm9yZT4yMDA5LTA4LTE2VDA5OjAw" +"OjAwLjBaPC9zbWQ6bm90QmVmb3JlPjxzbWQ6bm90QWZ0ZXI+MjA5OS0wOC0xNlQwOTowMDowMC4w" +"Wjwvc21kOm5vdEFmdGVyPg0KICA8IS0tIGluc2VydCBzbWQ6bm90QmVmb3JlIC0tPg0KICA8IS0t" +"IGluc2VydCBzbWQ6bm90QWZ0ZXIgLS0+DQogIDxtYXJrOm1hcmsgeG1sbnM6bWFyaz0idXJuOmll" +"dGY6cGFyYW1zOnhtbDpuczptYXJrLTEuMCI+DQogICAgPG1hcms6dHJhZGVtYXJrPg0KICAgICAg" +"PG1hcms6aWQ+MTIzNC0yPC9tYXJrOmlkPjxtYXJrOm1hcmtOYW1lPmJvw650ZSBkZSB0ZXN0PC9t" +"YXJrOm1hcmtOYW1lPg0KICAgICAgPCEtLSBpbnNlcnQgbWFyazptYXJrTmFtZSAtLT4NCiAgICAg" +"IDxtYXJrOmhvbGRlciBlbnRpdGxlbWVudD0ib3duZXIiPg0KICAgICAgICA8bWFyazpvcmc+RXhh" +"bXBsZSBJbmMuPC9tYXJrOm9yZz4NCiAgICAgICAgPG1hcms6YWRkcj4NCiAgICAgICAgICA8bWFy" +"azpzdHJlZXQ+MTIzIEV4YW1wbGUgRHIuPC9tYXJrOnN0cmVldD4NCiAgICAgICAgICA8bWFyazpz" +"dHJlZXQ+U3VpdGUgMTAwPC9tYXJrOnN0cmVldD4NCiAgICAgICAgICA8bWFyazpjaXR5PlJlc3Rv" +"bjwvbWFyazpjaXR5Pg0KICAgICAgICAgIDxtYXJrOnNwPlZBPC9tYXJrOnNwPg0KICAgICAgICAg" +"IDxtYXJrOnBjPjIwMTkwPC9tYXJrOnBjPg0KICAgICAgICAgIDxtYXJrOmNjPlVTPC9tYXJrOmNj" +"Pg0KICAgICAgICA8L21hcms6YWRkcj4NCiAgICAgIDwvbWFyazpob2xkZXI+DQogICAgICA8bWFy" +"azpqdXJpc2RpY3Rpb24+VVM8L21hcms6anVyaXNkaWN0aW9uPg0KICAgICAgPG1hcms6Y2xhc3M+" +"MzU8L21hcms6Y2xhc3M+DQogICAgICA8bWFyazpjbGFzcz4zNjwvbWFyazpjbGFzcz48bWFyazps" +"YWJlbD5ib2l0ZWRldGVzdDwvbWFyazpsYWJlbD48bWFyazpsYWJlbD5ib2l0ZWRlLXRlc3Q8L21h" +"cms6bGFiZWw+PG1hcms6bGFiZWw+Ym9pdGUtZGUtdGVzdDwvbWFyazpsYWJlbD4NCiAgICAgIDwh" +"LS0gaW5zZXJ0IG1hcms6bGFiZWwgLS0+DQogICAgICA8bWFyazpnb29kc0FuZFNlcnZpY2VzPg0K" +"ICAgICAgICBEaXJpZ2VuZGFzIGV0IGVpdXNtb2RpDQogICAgICAgIGZlYXR1cmluZyBpbmZyaW5n" +"byBpbiBhaXJmYXJlIGV0IGNhcnRhbSBzZXJ2aWNpYS4NCiAgICAgIDwvbWFyazpnb29kc0FuZFNl" +"cnZpY2VzPg0KICAgICAgPG1hcms6cmVnTnVtPjIzNDIzNTwvbWFyazpyZWdOdW0+DQogICAgICA8" +"bWFyazpyZWdEYXRlPjIwMDktMDgtMTZUMDk6MDA6MDAuMFo8L21hcms6cmVnRGF0ZT4NCiAgICAg" +"IDxtYXJrOmV4RGF0ZT4yMDk5LTA4LTE2VDA5OjAwOjAwLjBaPC9tYXJrOmV4RGF0ZT4NCiAgICA8" +"L21hcms6dHJhZGVtYXJrPg0KICA8L21hcms6bWFyaz4NCjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6" +"Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPjxTaWduZWRJbmZvPjxDYW5vbmljYWxpemF0" +"aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMx" +"NG4jIiAvPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx" +"LzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2IiAvPjxSZWZlcmVuY2UgVVJJPSIjX3NpZ25lZE1h" +"cmsiPjxUcmFuc2Zvcm1zPjxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8y" +"MDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIgLz48VHJhbnNmb3JtIEFsZ29yaXRo" +"bT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8xMC94bWwtZXhjLWMxNG4jIiAvPjwvVHJhbnNmb3Jt" +"cz48RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxl" +"bmMjc2hhMjU2IiAvPjxEaWdlc3RWYWx1ZT5CK2R6NWtzdno4K3FQbFMzUE8rKy93UnYxdEFRU1VE" +"NkhjaFZPTzkyN2FFPTwvRGlnZXN0VmFsdWU+PC9SZWZlcmVuY2U+PC9TaWduZWRJbmZvPjxTaWdu" +"YXR1cmVWYWx1ZT5VZ3VJQm5oRElRQXNqUTlkTkFRcXVDR3h5Q2o3UTlYV3FxSHdDa2xKZHpkMi9H" +"bDB2UHVwb282aFV4cUprU3lPbjI5OTZlQ1Z5NjQ0c3AvQVFISzl2N1VFRGJWcmp4WFlPT2JuVUQ1" +"RUlLMEcxbnM0UEh5MkhBSjNiVlNPL1JuVG4rU25KV1o1d0hSWHg2ZjhLd0pIUThVUHg0R3Q5SVZy" +"elRHQ0NwSkduMkU1djFTbjlTTXFDcWY4M1ZiMkxFellQbTg2Zkw4NUNwZmNFK2t0YnNsZHFmZno0" +"RXMyU2lobG9vY1BtaEJIeTg0eVNUS05MVWtmcXI4ZXk1YU1QeThHb2ErMXVHM1UwS2g0Zk5nZGdL" +"RmZUZnhBUHN0RCtYTzEwQTB3OCtxQnRQZFFwcVgwQVZKbUNSR04vRk52UWNCb0RvV1U5K2FsSEtq" +"c29sNXZRTDc0QWc9PTwvU2lnbmF0dXJlVmFsdWU+PEtleUluZm8+PFg1MDlEYXRhPjxYNTA5Q2Vy" +"dGlmaWNhdGU+TUlJRHNEQ0NBcGdDQVFFd0RRWUpLb1pJaHZjTkFRRUZCUUF3Z2FFeEN6QUpCZ05W" +"QkFZVEFsVlRNUk13RVFZRFZRUUlEQXBYWVhOb2FXNW5kRzl1TVJFd0R3WURWUVFIREFoQ1pXeHNa" +"WFoxWlRFUE1BMEdBMVVFQ2d3R1JHOXVkWFJ6TVEwd0N3WURWUVFMREFSVVpYTjBNU1V3SXdZRFZR" +"UUREQngwYldOb2RHVnpkSEp2YjNSalpYSjBNUzF2ZEdVdFpHOXVkWFJ6TVNNd0lRWUpLb1pJaHZj" +"TkFRa0JGaFJvYjNOMGJXRnpkR1Z5UUdSdmJuVjBjeTVqYnpBZUZ3MHhNekEzTVRBd05qUTNNelJh" +"RncweU16QTNNRGd3TmpRM016UmFNSUdaTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tW" +"MkZ6YUdsdVozUnZiakVSTUE4R0ExVUVCd3dJUW1Wc2JHVjJkV1V4RHpBTkJnTlZCQW9NQmtSdmJu" +"VjBjekVOTUFzR0ExVUVDd3dFVkdWemRERWRNQnNHQTFVRUF3d1VjMjFrWTJWeWRERXhMVzkwWlMx" +"a2IyNTFkSE14SXpBaEJna3Foa2lHOXcwQkNRRVdGR2h2YzNSdFlYTjBaWEpBWkc5dWRYUnpMbU52" +"TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3dEhkdmRtMTFJaVM5" +"aG02RkM1QlNKNmdEM2kxRGx1S2QyU0dpYWdjOU5WZmFKSW95RlhENlRzMjR5cDdIWHFrcitrMGdq" +"RjF3Tng5R0MrTkV5N0h6Vmo1TFNQQ0p0NEFobEZKWjlVbnVjYWRyWm55bVhuUWZwK2xRSXkyaEor" +"c3UxbTN4c3NXemdRYjgwdWg3QTZwZFJiRTNSNFZLRC9CZ1F1WG1rUnFqeUt3RkZpSTBCdjJQaEVj" +"NllJdTRQV25aYVZmWnovSE1Wbkt6R1dSMXFQazgzNkNaMk5MSkFhKzViak9nMFJHeHB1TDZjWXZa" +"ZHNKTTdqVXBRMFl6SGFJSlJjM0tmd2pEYVRHeTdyeHZHQzlMM250c0l4ZmFnTnZyOEh1MU9HdVcw" +"RSt2TzhHSFNnSExWeGRuZEVYUDFlQUJlS2F2NWFkYzZKcjVJaHE3UkdscndJREFRQUJNQTBHQ1Nx" +"R1NJYjNEUUVCQlFVQUE0SUJBUUJWQ0dHY3I1eTNZM2Ntd0hxNjdUVS96Slhqd3RmcFhQRFQyTTUv" +"YmFUK1ZGQ0s3Z1JQYWJwV3JCdmtodmtKbSt1VE9nQmM5WDdqK1l5aDN6U1IydE84Umx6NHdQZndC" +"cFdkWllkTmZXMUVZdDZ3Q0F4WlM3RlB5eEJ3cmEzUTczNEYyWUsvdjBUOG14WGhlVWVDYXhheHV6" +"aG11U2hRTTd4YkYrQUdRdWlBdmdJRUVhZ3VBcUdCOS9GMjhHYnYyNHpVcmxLcktSUGpReWxnR1V6" +"eXQxVS9tbVBrQ0JCd0ZWWCtlWkY1UjZmdFJDN1ZnaWFLZ3VTYlNyUjVuRjRpUzZXQUVtakdMZ01v" +"RHhzUU5KM3RSQUJMUGJSTHVIYVUxWjZ2UmRtQ3VMczVrcVFTWThZZXB1bGJaYnRyY3hEQU1BcE5q" +"SHVSc2M0a0NSZ1VvNlFHVG1zbTwvWDUwOUNlcnRpZmljYXRlPjwvWDUwOURhdGE+PC9LZXlJbmZv" +"PjwvU2lnbmF0dXJlPjwvc21kOnNpZ25lZE1hcms+"); + void ausRegEPPTK::doOTEB() { bool addDomains = false, debug=true, contactCreated = true, doTransfers = false, @@ -15,8 +96,8 @@ void ausRegEPPTK::doOTEB() int cmd=0; const char *thatAccount="secura2-ote2", *thisAccount="secura1-ote"; - string op("newInstance"); - const string claims("claims"), dpml("custom"), landrush("landrush"), sunrise("sunrise"); + string op("newInstance"); + const string claims("claims"), dpml("custom"), landrush("landrush"), sunrise("sunrise"); LPCrtCmdExtension crtE1( &claims ), crtE2( &dpml ); @@ -275,7 +356,7 @@ void ausRegEPPTK::doOTEB() theseLogs->logN(2,"(%d) Create %s w ICANN SMD file.",++cmd,dpmlName.c_str()); DomainCreateCommand oteCommand_7(dpmlName,pw,&RID, &tech, &ns, &admin, &billing); - crtE2.setSMD(); + crtE2.setSMD(smdData); oteCommand_7.appendExtension(crtE2); DomainCreateResponse oteResponse_7; diff --git a/AusRegCliever/include/mdJSON.hpp b/AusRegCliever/include/mdJSON.hpp index 1d9392c..923df8e 100644 --- a/AusRegCliever/include/mdJSON.hpp +++ b/AusRegCliever/include/mdJSON.hpp @@ -11,16 +11,22 @@ typedef void (*caseBody)(void); typedef struct { - string desc; + string *desc; const char *caseName; caseBody fBody; - int parms; // Index of JSON Value in testSuite00 + int parms; // Index of JSON Value in testSuiteAC } testCase; + typedef struct { + string case_name; + string case_desc; + } testDesc; + namespace ACPRODINOTE { - typedef std::map testCases; - typedef std::map testFuncs; + typedef std::map testDescs; + typedef std::map testCases; + typedef std::map testFuncs; } diff --git a/AusRegCliever/include/mdcommon.h b/AusRegCliever/include/mdcommon.h index 5b4d82e..abcb70e 100644 --- a/AusRegCliever/include/mdcommon.h +++ b/AusRegCliever/include/mdcommon.h @@ -52,6 +52,13 @@ * */ + +#ifndef AC_ASSERTION +#define AC_ASSERTION +#define AC_ASSERTIONS(P) {if (!P) { theseLogs.logN(2,"AC ASSERT: %s %d",__FILE__,__LINE__); raise(SIGINT);}} +#define AC_ASSERTIONP(P) {if (!P) {theseLogs->logN(2,"AC ASSERT: %s %d",__FILE__,__LINE__); raise(SIGINT);}} +#endif + #ifndef MD_COMMON #define MD_COMMON #define ACTK_CFG_PATH "./etc/toolkit2.conf" diff --git a/AusRegCliever/server/cliever-md.cpp b/AusRegCliever/server/cliever-md.cpp index 6890fa5..9c30de8 100644 --- a/AusRegCliever/server/cliever-md.cpp +++ b/AusRegCliever/server/cliever-md.cpp @@ -169,6 +169,9 @@ void setSignals() { signal(SIGTSTP,SIG_IGN); /* ignore tty signals */ signal(SIGTTOU,SIG_IGN); // both input signal(SIGTTIN,SIG_IGN); // and output +#ifdef AC_ASSERTIONS + signal(SIGINT, signal_handler); // debug +#endif signal(SIGSEGV,signal_handler); signal(SIGUSR1,signal_handler); // commander log messages signal(SIGUSR2,signal_handler); // reserved @@ -182,6 +185,7 @@ void signal_handler(int sig) switch(sig) { case SIGSEGV: theseLogs->logN(0,"SEGV ABEND."); + case SIGINT: if (waitForGDB) { for (i = 0; i < iSaidWaitBiatch; diff --git a/AusRegCliever/server/mdAusReg.cpp b/AusRegCliever/server/mdAusReg.cpp index 8b7776d..f76c308 100644 --- a/AusRegCliever/server/mdAusReg.cpp +++ b/AusRegCliever/server/mdAusReg.cpp @@ -24,17 +24,214 @@ #include #include #include +#include #include +#include +#include +#include #include "mdJSON.hpp" - Json::Value parms[MAX_OTE_CASE]; - bool JSONBatchInProgress = false; + typedef struct CMDFRAME { bool thisDryRun; -namespace ACPRODINOTE { + std::string ctc; + std::string ctcPW; + std::string ctcEmail; + std::string ctcName; + std::string ctcCity; + std::vector + ctcCrib; + std::string ctcProv; + std::string ctcPC; + std::string ctcGuo; + std::string ctcOrg; -typedef boost::heap::priority_queue ACWQ; + std::string pw; + std::string RID; - ACWQ acq; + std::vector admin; + std::vector billing; + std::vector ns; + std::vector tech; + + const IntPostalInfo ctcPO; + + string noticeID, notAfter, acceptedDate , thisLaunchPhase, thisDesc, shitName ; // i mean string name + string smdFileName, smdPath, smdData; + + CMDFRAME() : ctcPO(IntPostalInfo(std::string("Ren Ren-Juan"),std::string("Niagara Falls"),std::string("US"))) { + thisDryRun=false; smdPath = "./smd/";} + } + commandFrame; + + + const char *parms[MAX_OTE_CASE]; + + bool bindDone,JSONBatchInProgress = false; + + static TestEnvironment props; + + static std::string TEST_SE = + ""; + + static std::string nil("nil"); + + namespace ACPRODINOTE { + + bool dryRun; + typedef auto_ptr AC_SESSMGR; + typedef auto_ptr AC_SESSION; + + static AC_SESSION ac_sess; + + class ACTx + { + const char *m; + AC_SESSMGR ac_mgr; + + public: + commandFrame *ctx; + void (*finisher)(void); + Transaction *tx; + // void setSess(std::auto_ptr& sp) {mgr = sp;} + ACTx(const char *msg) + {m=msg; + finisher = NULL; + } + void setSession(AC_SESSMGR p) { ac_mgr = p; } + void setm(const char *toWhat) { m = toWhat; } + ACTx(){tx = NULL;finisher =NULL;m=NULL;ctx=NULL;} + virtual void doIt() { + AC_ASSERTIONP((tx && ctx)) + theseLogs->logN(1,"{ %s",m ? m : ""); + theseLogs->logN(1," '%s'",ctx->thisDesc.c_str()); + if (!dryRun && !ctx->thisDryRun) + ac_mgr->execute(*tx); + if (finisher) + finisher(); + delete tx; + delete ctx; + theseLogs->logN(0,"}"); + } + }; + + template + class TxQ : public ACTx { + private: + std::string name; + public: + CT *c; RT *r; CET *ce; RET *re; + TxQ(const char *msg) : ACTx(msg) { + c = new CT(); + r = new RT(); + ce = new CET(); + re = new RET(); + finisher = NULL; + } + TxQ(std::string ctc,std::string ctcpw, const PostalInfo *poi, + std::string cemail) : ACTx("") { + c = new CT(ctc, ctcpw, poi, cemail ); + r = new RT(); + ce = NULL; + re = NULL; + finisher = NULL; + } + TxQ(const std::string& nom, + const std::string& pw, + const std::string* registrantID, + const std::vector* techContacts = NULL, + const std::vector* nameservers = NULL, + const std::vector* adminContacts = NULL, + const std::vector* billingContacts = NULL, + const Period* period = NULL) : ACTx("default create") { + name = string(nom); + c = new CT(nom,pw,registrantID); + r = new RT(); + ce = NULL; + re = NULL; + finisher = NULL; + } + TxQ(const char *nom,const char *msg) : ACTx(msg) { + name = string(nom); + c = new CT(name); + r = new RT(); + ce = NULL; + re = NULL; + setm(msg); + finisher = NULL; + } + TxQ(const std::string nom,const std::string pw,const char *msg) : ACTx(msg) { + name = nom; + c = new CT(name,pw); + r = new RT(); + ce = NULL; + re = NULL; + finisher = NULL; + } + TxQ(const std::string nom,const char *msg) : ACTx(msg) { + name = nom; + c = new CT(name); + r = new RT(); + ce = NULL; + re = NULL; + finisher = NULL; + } + TxQ(const std::string *lpe,const char *nom,const char *msg) : ACTx(msg) { + name = string(nom); + c = new CT(name); + r = new RT(); + ce = new CET(lpe); + re = NULL; + finisher = NULL; + } + TxQ (const std::string& nom, + const std::string& pw, + const std::string* registrantID, + const std::vector* techContacts, + const std::vector* nameservers, + const std::vector* adminContacts, + const std::vector* billingContacts, + const Period*, + const std::string* lpe) : ACTx("create ") { + name = nom; + c = new CT(nom,pw,registrantID,techContacts,nameservers,adminContacts,billingContacts); + r = new RT(); + ce = new CET(lpe); + re = NULL; + finisher = NULL; + } + TxQ(const std::string &name,const std::string pw, const std::string &RID, + std::vector&tech, std::vector&ns, std::vector&admin, std::vector&billing) {} + TxQ(CT *c1, RT *r1, CET *ce1, RET *re1, const char *msg) + : c(c1), r(r1), ce(ce1), re(re1), ACTx(msg) {} + void operator=(TxQ *t2) {c = t2->c; r = t2->r; ce = t2->ce; re = t2->re; } + ~TxQ() {delete c; delete r; if (ce) delete ce; if (re) delete re;} + Transaction operator=(Transaction &t) {t = Transaction(c,r);} + void set(commandFrame *cmdF,const char *casebe="unknown backend") { + // Guard the transaction. The Boost stuff is compile-time/static, the AC fail-safe. + finisher = NULL; + ctx = cmdF; + setm(casebe); + BOOST_STATIC_ASSERT( (boost::is_base_of::value) ); + BOOST_STATIC_ASSERT( (boost::is_base_of::value) ); + BOOST_STATIC_ASSERT( (boost::is_base_of::value) ); + BOOST_STATIC_ASSERT( (boost::is_base_of::value) ); + bool p1 = std::is_base_of::value; + bool p2 = std::is_base_of::value; + bool p3 = ce == NULL ? false : std::is_base_of::value; + bool p4 = re == NULL ? false : std::is_base_of::value; + AC_ASSERTIONP(p1) + AC_ASSERTIONP(p2) + if (ce) + AC_ASSERTIONP(p3) + if (re) + AC_ASSERTIONP(p4) + ACTx::tx = new Transaction(c,r);} + }; + + + typedef boost::heap::priority_queue ACWQ; + + ACWQ acq; using namespace std; @@ -43,23 +240,6 @@ using namespace std; #define EVENT_SIZE ( sizeof (struct inotify_event) ) #define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) ) -//char *name1 = "bestever.camera"; // -//char *name3 = "pricey.holdings"; // -//char *name5 = "greedy.ventures"; // -//char *name6 = "shady.ventures"; // -//char *name7 = "hemmarhoid.camera"; // -//char *name3 = "pricey.holdings"; // -const char *name1 = "yoda.guru"; -const char *name2 = "unicycles.bike"; -const char *name3 = "test-validate.claimsgasix"; -const char *name4 = "horny.singles"; -const char *name5 = "atmospheric.lighting"; -const char *name6 = "mushroomtheory.management"; - - static TestEnvironment props; - - static std::string TEST_SE = - ""; #include "AC_OTE.h" @@ -89,7 +269,7 @@ void ausRegEPPTK::doOTEA() try { Timer::setTime("20140101.010101"); auto_ptr manager(SessionManagerFactory::newInstance(&props)); - auto_ptr sess(SessionFactory::newInstance(&props)); + auto_ptr sess(SessionFactory::newInstance(&props)); op = "startup"; manager->startup(); op = "run (keep-alive)"; @@ -121,6 +301,7 @@ void ausRegEPPTK::doOTEA() { theseLogs->logN(2,"General Exception during OTE A (%s).",op.c_str()); } + } #include "donutsOTEB.h" void ausRegEPPTK::registryXOTE() { // PROD in OTE @@ -189,9 +370,9 @@ void ausRegEPPTK::registryXOTE() { // PROD in OTE } } - if (actionableFileEvent) { char wxyz[100]; sprintf(wxyz,"/json/%s",event->name); + if (actionableFileEvent) { char wxyz[100]; sprintf(wxyz,"/json/%s",event->name); - while (JSONBatchInProgress) { + while (JSONBatchInProgress) { theseLogs->logN(0, "Waiting for pending batch to complete." ); sleep(2); } @@ -233,7 +414,7 @@ void ausRegEPPTK::registryXOTE() { // PROD in OTE theseLogs->logN(0,"End RegistryXOTE Session."); } void ausRegEPPTK::doPROD() -{ +{ char *endTransMsg; int debug=1000000,hours=0,hoops,minutes=0,seconds=0,idleSeconds=0,lastPolicyHandshake=0, lastSeconds=0,lastMinutes,iqSize=acq.max_size(); string op("newInstance"); @@ -249,40 +430,47 @@ void ausRegEPPTK::doPROD() try { Timer::setTime("20140101.010101"); auto_ptr manager(SessionManagerFactory::newInstance(&props)); - auto_ptr sess(SessionFactory::newInstance(&props)); + auto_ptr sess(SessionFactory::newInstance(&props)); op = "startup"; manager->startup(); op = "run (keep-alive)"; manager->run(); sess->open(); -// ac_mgr = manager; -// ac_sess = sess; while ((1440 - minutes) > EODMARGIN) { - if (!acq.empty()) { - Transaction *tx = acq.top(); + if (!acq.empty() && bindDone ) { + + if (bindError) { + theseLogs->logN(3,"Flushing %d transactions",acq.size()-1); + acq.clear(); + goto postTrans; + } if (debug > 999) - theseLogs->logN(3,"Tx dequeued @ minute %d second %d (%d waiting).",minutes,seconds,acq.size()-1); + theseLogs->logN(3,"Tx dequeued @ minute %d second %d (%d waiting).",(minutes % 60),(seconds % 60),acq.size()-1); - //manager->execute(*tx); + inProgress = acq.top(); + inProgress->setSession(manager); + inProgress->doIt(); + + postTrans: if (debug > 999) - theseLogs->logN(2,"Tx completed @ minute %d second %d.",minutes,seconds); + theseLogs->logN(2,"Tx completed @ minute %d second %d.",(minutes % 60),(seconds % 60)); idleSeconds = 0; + if (!bindError) + acq.pop(); if (!acq.size()) JSONBatchInProgress = false; - acq.pop(); - delete tx; } if (!lastPolicyHandshake || (seconds - lastPolicyHandshake >= (REGISTRY_HANDSHAKE - 5))) - {lastPolicyHandshake = 1; goto skipHandshake; + {if (!lastPolicyHandshake) lastPolicyHandshake = 1; goto skipHandshake; idleSeconds = 0; if (debug > 99) - theseLogs->logN(3,"AC-Registry Policy Handshake %d:%d:%d.",hours-1,minutes,seconds); + theseLogs->logN(3,"AC-Registry Policy Handshake %d:%d:%d.",hours-1,(minutes % 60),(seconds % 60)); lastPolicyHandshake = seconds; sess->writeXML(TEST_SE); sess->read(); @@ -302,7 +490,7 @@ void ausRegEPPTK::doPROD() } if (debug > 9999 && !(seconds % 120)) - theseLogs->logN(3,"AC Production %d:%d:%d.",hours-1,minutes,seconds); + theseLogs->logN(3,"AC Production %d:%d:%d.",hours-1,(minutes % 60),(seconds %60)); } sess->close(); diff --git a/AusRegCliever/server/mdJSON.cpp b/AusRegCliever/server/mdJSON.cpp index 1d930ef..8966030 100644 --- a/AusRegCliever/server/mdJSON.cpp +++ b/AusRegCliever/server/mdJSON.cpp @@ -9,19 +9,21 @@ #include // sort #include #include +#include #include "mdJSON.hpp" - extern bool JSONBatchInProgresse; - - extern Json::Value parms[MAX_OTE_CASE]; + extern bool JSONBatchInProgress,bindDone; + extern const char *parms[MAX_OTE_CASE]; namespace ACPRODINOTE { - extern string thisRegistry, thisAccount, thatAccount; + extern string thisDesc, thisRegistry, thisAccount, thatAccount; + extern testDescs theseSpecs; extern testCases theseCases; extern testFuncs theseFuncs; extern int cmd,thisCase; - extern bool bindError; + extern bool bindError,dryRun; + extern Json::Value theseParms; } using namespace std; @@ -47,8 +49,8 @@ readInputTestFile( const char *path ) bool mdJSON::run() { - bool lastMemberWasString=false,parseError=false,done=false; - int i=0, nCases =0, nThings = 0, debug=1000; + bool lastMemberWasString=false,parseError=false,done=false,parseOnly=false;; + int i=0, mCases=0, nCases =0, debug=100; const Json::Value suite = root["testSuiteAC"]; @@ -67,13 +69,14 @@ bool mdJSON::run() return true; } - theseLogs->logN(1,"'testSuiteAC' - binding %d fields and case objects.",suite.size()); + theseLogs->logN(1,"'testSuiteAC' - parse and bind %d fields and case objects.",suite.size()); Json::Value::Members itemNames = suite.getMemberNames(); string thisTestCase(""), thisTestCaseDesc(""); ACPRODINOTE::thisRegistry = string(""); ACPRODINOTE::thisAccount = string(""); ACPRODINOTE::thatAccount = string(""); + ACPRODINOTE::dryRun = false; for ( i = 0; i < itemNames.size(); ++i ) { const char *thisItem; try { @@ -81,54 +84,85 @@ bool mdJSON::run() Json::Value thisMember = suite.get(thisItem,root); if (debug > 100000) theseLogs->logN(1,"item %s.",thisItem); - if (!stricmp(thisItem,"registry") && thisMember.isString()) { + if (thisMember.isBool()) { + if (!stricmp(thisItem,"dryrun")) { + theseLogs->logN(0,"The script has toggled transactioning."); + ACPRODINOTE::dryRun = thisMember.asBool(); + continue; + } + if (!stricmp(thisItem,"parseonly")) { + theseLogs->logN(0,"The script has toggled execution."); + parseOnly = thisMember.asBool(); + continue; + } + } + if (thisMember.isString()) { + if (!stricmp(thisItem,"registry")) { theseLogs->logN(1,"The primary name provider is '%s'",thisMember.asString().c_str()); ACPRODINOTE::thisRegistry = thisMember.asString(); continue; - } - if (!stricmp(thisItem,"accounta") && thisMember.isString()) { + } + if (!stricmp(thisItem,"accounta")) { theseLogs->logN(1,"The first OTE account is '%s'",thisMember.asString().c_str()); ACPRODINOTE::thisAccount = thisMember.asString(); continue; - } - if (!stricmp(thisItem,"accountb") && thisMember.isString()) { + } + if (!stricmp(thisItem,"accountb")) { theseLogs->logN(1,"The second OTE account is '%s'",thisMember.asString().c_str()); ACPRODINOTE::thatAccount = thisMember.asString(); continue; + } + if (strncmp(thisItem,"Case",4)) continue; + if (strlen(thisItem) < 6) continue; + if (mCases >= 1) { int k; + for (k=0;k < mCases;k++) + if (!strnicmp(ACPRODINOTE::theseSpecs[k].case_name.c_str(),thisItem,6)) { + parseError = true; + theseLogs->logN(1,"multiple '%s', not supported, use multiple files.",thisItem); + } + } + if (debug > 10000) + theseLogs->logN(1,"case desc: %s.",thisMember.asString().c_str()); + ACPRODINOTE::theseSpecs[mCases].case_name = string(thisItem); + ACPRODINOTE::theseSpecs[mCases++].case_desc = thisMember.asString(); } - if (strncmp(thisItem,"case",4)) continue; - if (strlen(thisItem) != 6) continue; - if (debug > 100000) - theseLogs->logN(1,"case %s.",thisItem); - if (!ACPRODINOTE::theseFuncs[thisItem]) { - theseLogs->logN(1,"No logic to bind to '%s', need it.",thisItem); - return false; - } - if (thisMember != root && thisMember.isString()) { - thisTestCase = string(thisItem); - if (!lastMemberWasString) - {thisTestCaseDesc = thisMember.asString(); lastMemberWasString = true;} - else { - parseError = true; - theseLogs->logN(0,"Invalid consecutive strings in outer test suite."); - theseLogs->logN(0,"Must be descriptive comment then test object it describes."); - } - lastMemberWasString = true; - continue; - } - if (thisMember != root && thisMember.isObject()) { - parms[nCases] = suite.get(thisItem,root); - ACPRODINOTE::theseCases[nCases].fBody = ACPRODINOTE::theseFuncs[thisItem]; - ACPRODINOTE::theseCases[nCases++].caseName = thisItem; - lastMemberWasString = false; - ACPRODINOTE::theseCases[nCases++].desc = thisTestCaseDesc; - } + else { char w0[16]; + if (strncmp(thisItem,"case",4)) continue; + if (strlen(thisItem) < 6) continue; + memcpy(w0,thisItem,6); w0[6] =0; + if (thisMember != root && thisMember.isObject() && !parseError) { + if (!ACPRODINOTE::theseFuncs[w0]) { + theseLogs->logN(1,"No logic to bind to '%s', need it.",thisItem); + return true; + } + parms[nCases] = itemNames[i].c_str(); + ACPRODINOTE::theseCases[nCases].fBody = ACPRODINOTE::theseFuncs[w0]; + ACPRODINOTE::theseCases[nCases++].caseName = thisItem; + } + } + } + catch (exception e) + { + //void *array[20]; + //size_t size; + + // get void*'s for all entries on the stack + //size = backtrace(array, 20); + + theseLogs->logN(2,"Item %s fault: %s ",thisItem, e.what()); + //backtrace_symbols_fd(array, size, thisConfig->); + + AC_ASSERTIONP(false) } catch (...) { - theseLogs->logN(1,"Test case parse exception: %s ",thisItem ); - } - } + theseLogs->logN(1,"Test case parse exception: %s ",thisItem ); + AC_ASSERTIONP(false) + } + }// for + + if (mCases != nCases ) { + theseLogs->logN(2,"spec - case body mismatch (%d:%d).", mCases, nCases); parseError = true; } if (ACPRODINOTE::thisRegistry.empty()) { theseLogs->logN(0,"No primary name provider."); parseError = true; } @@ -141,16 +175,21 @@ bool mdJSON::run() return true; } + bindDone = false; ACPRODINOTE::bindError = false; - theseLogs->logN(1,"%d cases parsed, bind and queueing begins.",nCases); + if (parseOnly) { + theseLogs->logN(0,"If you see no errors above, script is valid syntactically."); + JSONBatchInProgress = false; + goto endBind; + } + theseLogs->logN(1,"%d case(s) parsed, bind and queueing begins.",nCases); for (i=0;ilogN(2,"%d Setup %s ...",i+1,ACPRODINOTE::theseCases[i].caseName ); - ACPRODINOTE::thisCase = ACPRODINOTE::theseCases[i].parms; ACPRODINOTE::theseCases[i].fBody(); - theseLogs->logN(3,"%d ... %s %d parameter(s) ",i+1,ACPRODINOTE::theseCases[i].caseName,parms[i].size() ); + theseLogs->logN(3,"%d ... %s %d parameter(s) ",i+1,ACPRODINOTE::theseCases[i].caseName,ACPRODINOTE::theseParms.size() ); } catch (exception e) { @@ -163,11 +202,13 @@ bool mdJSON::run() } if (ACPRODINOTE::bindError) { theseLogs->logN(0,"binding errors, script cannot be run"); - return true; + done = true; + goto endBind; } else - theseLogs->logN(0,"Suite 'testSuiteAC' end bind and queue for execution."); - + theseLogs->logN(0,"Suite 'testSuiteAC' bound and and queued for execution."); + endBind: + bindDone = true; return done; // Should be false if no error. } diff --git a/json/OTEC.json b/json/OTEC.json index 83123d5..37f05d4 100644 --- a/json/OTEC.json +++ b/json/OTEC.json @@ -1,95 +1,106 @@ - { - "_comment" : "mdJSON.cpp will try to bind data and run if it recognizes the leading field name.", - "_comment" : "I'm using convention of inserting a hyphen to disable a test case.", + "_comment" : "This script demonstrates the PRODinOTE JSON EPP scripting mechanism", "testSuites": "Outer block of a set of inputs to mdJSON.cpp to be run by ausRegTK::registryXOTE()", - "testSuites": "Repeat case name casexx as needed, to run needs logic bound in RegistryXOTE.h", + "testSuites": "First 6 chars of 'casexx' name backend logic bound in AC_OTE.h", + + "name" : "bestever.camera", + "name" : "yoda.guru", + "name" : "unicycles.bike", + "name" : "test-validate.claimsgasix", + "parseonly" : "Set this in outer suite object for JSON parse only.", + "dryrun" : "If set in a test case disables transactions, use to test in production.", "testSuiteAC" : { - "Registry" : "Donuts", - "AccountA" : "secura1-ote", - "AccountB" : "secura2-ote2", + "Registry" : "mod_epp", + "AccountA" : "greg1-ote", + "AccountB" : "greg2-ote", - "case00" : "Create a contact", - "case00" : { - - "cont_id": "renjuan2", - "cont_pw": "Ab9dW@rd", - "cont_email": "juan@acm.org", - "cont-name": "Ren Ren-Juan", - "cont-city": "Niagara Falls", - "cont_street1": "2926 2nd Street", - "cont-province": "NY", - "cont-postal-code": "14305", - "cont-guo": "US", - "cont-org": "American Kybernetik" - - }, - - "case01" : "Conventional / Standard/ Unextended Check", - "case01" : { - - "name" : "bestever.camera" - - }, - - "case02" : "Check with Claims Extension", - "case02" : { - - "name" : "unicycles.bike" - }, - - "case03" : "Conventional / Standard / Unextended Create", - "case03" : { - - "name" : "greedy.ventures" - - }, - - "case04" : "DPML Create", - "case04" : { - - "name" : "face.dpml.zone", - "smd-data" : "./smd/face-test.smd" - - }, - - "case00" : "Create another contact", - "case00" : { + "Case00" : "Create a contact", + "case00" : { + "dryrun" : true, "cont_id": "renjuan3", "cont_pw": "Ab9dW@rd", "cont_email": "juan@acm.org", - "cont-name": "Ren Ren-Juan", - "cont-city": "Niagara Falls", + "cont_name": "Ren Ren-Juan", + "cont_city": "Niagara Falls", "cont_street1": "2926 2nd Street", - "cont-province": "NY", - "cont-postal-code": "14305", - "cont-guo": "US", - "cont-org": "American Kybernetik" + "cont_province": "NY", + "cont_postal_code": "14305", + "cont_guo": "US", + "cont_org": "American Kybernetik" }, - "case04" : "DPML Create", - "case04" : { - - "name" : "secura.dpml.zone", - "smd-data" : "./smd/secura-test.smd" + "Case01" : "Conventional / Standard/ Unextended Check", + "case01" : { + "cont_id" : "renjuan", + "name" : "bestever.camera" + }, - "case05" : "Create with TCN Override", + + "Case02" : "Check with Claims Extension", + "case02" : { + + "dryrun" : true, + "cont_id" : "renjuan", + "name" : "unicycles.bike" + + }, + + "Case03" : "Conventional Standard Unextended Create", + "case03" : { + + "cont_id" : "renjuan", + "name" : "mushroomtheory.management" + + }, + + "Case04" : "DPML Create", + "case04" : { + + "dryrun" : true, + "cont_id" : "renjuan", +"launch_phase" : "custom", + "name" : "face.dpml.zone", + "smd_data" : "boitedetest.smd" + + }, + + "Case05" : "Create with TCN Override", "case05" : { - "name" : "greedy.ventures", - "noticeID" : "", - "notBefore" : "", - "acceptedDate" : "" + "dryrun" : true, +"launch_phase" : "sunrise", + "cont_id" : "renjuan", + "name" : "test-validate.claimsgasix", + "noticeID" : "d85159710000000000000008692", + "notAfter" : "2015-01-01T12:00:00Z", + "acceptedDate" : "2014-01-27T19:00:00Z" - } + }, + + "Case06" : "Transfer between secondary name provider accounts", + "case06" : { + + "dryrun" : true, + "isGainer" : false, + "name" : "bestever.camera" + + } - } + } , + + "name" : "nortonkramden.ventures", + "name" : "pricey.holdings", + "name" : "greedy.ventures", + "name" : "shady.ventures", + "name" : "hemmarhoid.camera", + "name" : "pricey.holdings", + "name" : "atmospheric.lighting" }