This commit is contained in:
Ren RenJuan 2014-01-31 23:38:13 +00:00
parent 3b7799220e
commit 2bb8a495de
7 changed files with 273 additions and 123 deletions

View File

@ -15,14 +15,17 @@ typedef auto_ptr<Session> AC_SESSION;
static AC_SESSION ac_sess; static AC_SESSION ac_sess;
static int nCases; int nCases,thisCase;
testCases theseCases; testCases theseCases;
testFuncs theseFuncs; testFuncs theseFuncs;
bool acTkInitialised = false, fatal = false, done = false, transferGainer;
const char *thisRegistry="Unknown", *thatAccount="Unknown", *thisAccount="Unknown"; bool acTkInitialised = false, fatal = false, done = false, transferGainer,
char *thisName; bindError;
char *thisName = "registrar.ote";
string thisRegistry("Unknown"), thatAccount("Unknown"), thisAccount("Unknown"),shitName(thisName);
int cmd=0,debug=1000; int cmd=0,debug=1000;
string op("newInstance"); string op("newInstance");
@ -53,22 +56,68 @@ typedef auto_ptr<Session> AC_SESSION;
ctcCrib,ctcCity,ctcProv,ctcPC,ctcGuo); ctcCrib,ctcCity,ctcProv,ctcPC,ctcGuo);
LPCrtCmdExtension crtE1( &claims ), crtE2( &dpml ); LPCrtCmdExtension crtE1( &claims ), crtE2( &dpml );
Transaction *thisTest;
inline bool checkNameOK() {
if (!parms[thisCase].isMember("name")) {
theseLogs->logN(1,"(%d) no 'name' field",cmd);
ACPRODINOTE::bindError = true;
return false;
}
shitName = parms[thisCase]["name"].asString();
thisName = (char *)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;
}
return true;
}
inline bool checkPWDOK(Json::Value thisPW) {
if (thisPW.isNull() || !thisPW.asString().compare("auth.error")) {
theseLogs->logN(1,"(%d) no 'cont_pw' field",cmd);
return false;
}
return true;
}
void check() { void check() {
if (checkNameOK()) {
DomainCheckCommand *c = new DomainCheckCommand(thisName); DomainCheckCommand *c = new DomainCheckCommand(thisName);
DomainCheckResponse *r = new DomainCheckResponse(); DomainCheckResponse *r = new DomainCheckResponse();
theseLogs->logN(2,"Queue (%d) Unextended check of %s",cmd++,thisName); theseLogs->logN(2,"(%d) Queue Unextended check of %s",cmd++,thisName);
acq.push( new Transaction(c, r) ); acq.push( new Transaction(c, r) );
} }
}
void checkClaims() { void checkClaims() {
if (checkNameOK()) {
DomainCheckCommand *c = new DomainCheckCommand(thisName); DomainCheckCommand *c = new DomainCheckCommand(thisName);
LPChkCmdExtension chkE(&claims); LPChkCmdExtension chkE(&claims);
c->appendExtension(chkE); c->appendExtension(chkE);
@ -81,76 +130,102 @@ typedef auto_ptr<Session> AC_SESSION;
} }
}
void create() { void create() {
theseLogs->logN(3,"(%d) Queue normal create of %s ( %s ).",cmd++, thisName, thisAccount); if (checkNameOK() && checkContOK())
DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing); {
DomainCreateCommand *c = new DomainCreateCommand(shitName,pw,&RID, &tech, &ns, &admin, &billing);
DomainCreateResponse *r = new DomainCreateResponse(); DomainCreateResponse *r = new DomainCreateResponse();
theseLogs->logN(3,"(%d) Queue normal create of %s ( %s ).",cmd++, thisName, thisAccount.c_str());
acq.push(new Transaction(c, r)); acq.push(new Transaction(c, r));
} }
}
string noticeID("d85159710000000000000008692"), string noticeID("d85159710000000000000008692"),
notAfter("2015-01-01T12:00:00Z"), acceptedDate("2014-01-27T19:00:00Z"); notAfter("2015-01-01T12:00:00Z"), acceptedDate("2014-01-27T19:00:00Z");
void createClaimOverride() { void createClaimOverride() {
if (checkNameOK()) {
DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing); DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing);
crtE1.setNoticeID(noticeID, notAfter, acceptedDate); crtE1.setNoticeID(noticeID, notAfter, acceptedDate);
c->appendExtension(crtE1); c->appendExtension(crtE1);
DomainCreateResponse *r; DomainCreateResponse *r;
theseLogs->logN(2,"(%d)Queue create %s w Notice ID test data (TCN).",++cmd,thisName); theseLogs->logN(2,"(%d) Queue create %s w Notice ID test data (TCN).",++cmd,thisName);
acq.push(new Transaction(c, r)); acq.push(new Transaction(c, r));
}
} }
void createContact() { void createContact() {
theseLogs->logN(2,"(%d)Queue create contact %s.",++cmd,ctc.c_str());
ContactCreateCommand *c = new ContactCreateCommand(ctc,ctcPW,&ctcPO,ctcEmail); ContactCreateCommand *c = new ContactCreateCommand(ctc,ctcPW,&ctcPO,ctcEmail);
ContactCreateResponse *r = new ContactCreateResponse(); ContactCreateResponse *r = new ContactCreateResponse();
theseLogs->logN(2,"(%d)Queue create contact %s.",++cmd,ctc.c_str()); theseLogs->logN(2,"(%d) Queue create contact %s.",++cmd,ctc.c_str());
acq.push(new Transaction(c, r)); acq.push(new Transaction(c, r));
} }
void dpmlCreate() { std::string dpmlName("face.dpml.zone"); void dpmlCreate() {
DomainCreateCommand *c = new DomainCreateCommand(dpmlName,pw,&RID, &tech, &ns, &admin, &billing);
if (checkNameOK()) {
DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing);
crtE2.setSMD(); crtE2.setSMD();
c->appendExtension(crtE2); c->appendExtension(crtE2);
DomainCreateResponse *r = new DomainCreateResponse(); DomainCreateResponse *r = new DomainCreateResponse();
theseLogs->logN(2,"(%d) Queue DPML block create %s w boitedetest.smd data.",++cmd,dpmlName.c_str()); theseLogs->logN(2,"(%d) Queue DPML block create %s w boitedetest.smd data.",++cmd,thisName);
acq.push(new Transaction(c, r)); acq.push(new Transaction(c, r));
} }
}
void sunriseCreate() { void sunriseCreate() {
if (checkNameOK()) {
DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing); DomainCreateCommand *c = new DomainCreateCommand(thisName,pw,&RID, &tech, &ns, &admin, &billing);
c->appendExtension(crtE1); c->appendExtension(crtE1);
DomainCreateResponse *r = new DomainCreateResponse(); DomainCreateResponse *r = new DomainCreateResponse();
theseLogs->logN(2,"(%d)Queue Sunrise create %s with ICANN SMD test data.",++cmd,thisName); theseLogs->logN(2,"(%d) Queue Sunrise create %s with ICANN SMD test data.",++cmd,thisName);
acq.push(new Transaction(c, r)); acq.push(new Transaction(c, r));
} }
}
void transfer() { void transfer() {
if (checkNameOK()) {
Transaction *thisTest;
DomainTransferRequestCommand *c0 = new DomainTransferRequestCommand(thisName,ctcPW); DomainTransferRequestCommand *c0 = new DomainTransferRequestCommand(thisName,ctcPW);
DomainTransferApproveCommand *c1 = new DomainTransferApproveCommand(thisName,ctcPW); DomainTransferApproveCommand *c1 = new DomainTransferApproveCommand(thisName,ctcPW);
DomainTransferResponse *r = new DomainTransferResponse(); DomainTransferResponse *r = new DomainTransferResponse();
thisTest = transferGainer ? new Transaction(c0, r) : new Transaction(c1, r) ; thisTest = transferGainer ? new Transaction(c0, r) : new Transaction(c1, r) ;
theseLogs->logN(4,"Queue %s (%d) %s -> %s.", (transferGainer ? "Request" : "Approve") ,cmd++, thisName,thatAccount); theseLogs->logN(4,"(%d) Queue %s %s -> %s.", (transferGainer ? "Request" : "Approve") ,cmd++,
thisName,thatAccount.c_str());
acq.push(thisTest); acq.push(thisTest);
}
} // transfer } // transfer
int setFuncs() { int setFuncs() {

View File

@ -11,9 +11,10 @@
typedef void (*caseBody)(void); typedef void (*caseBody)(void);
typedef struct { typedef struct {
string desc;
const char *caseName; const char *caseName;
caseBody fBody; caseBody fBody;
const void *parms; // JSON Value int parms; // Index of JSON Value in testSuite00
} testCase; } testCase;
namespace ACPRODINOTE { namespace ACPRODINOTE {

View File

@ -54,7 +54,7 @@
#ifndef MD_COMMON #ifndef MD_COMMON
#define MD_COMMON #define MD_COMMON
#define ACTK_CFG_PATH "./etc/toolkit2.conf"
#ifndef SANS_BOOST #ifndef SANS_BOOST
#include<boost/asio/datagram_socket_service.hpp> #include<boost/asio/datagram_socket_service.hpp>
#include<boost/heap/priority_queue.hpp> #include<boost/heap/priority_queue.hpp>
@ -65,6 +65,7 @@ using namespace std;
using boost::asio::ip::udp; using boost::asio::ip::udp;
#endif #endif
#define MAX_OTE_CASE 256
#define MAX_SCENARIO 4 // defined by increasing assumption of control from TK #define MAX_SCENARIO 4 // defined by increasing assumption of control from TK
#define MAX_AC 1 #define MAX_AC 1
#define MAX_CLIENTS 1 #define MAX_CLIENTS 1

View File

@ -128,7 +128,7 @@ int masterDaemon::initAusRegTK(void) {
int rc=OK; int rc=OK;
const std::string cfg(thisConfig->cfg_path.empty() ? const std::string cfg(thisConfig->cfg_path.empty() ?
"/home/jdaugherty/etc/toolkit2.conf" : thisConfig->cfg_path ); ACTK_CFG_PATH : thisConfig->cfg_path );
try { try {

View File

@ -27,6 +27,9 @@
#include <json/json.h> #include <json/json.h>
#include "mdJSON.hpp" #include "mdJSON.hpp"
Json::Value parms[MAX_OTE_CASE];
bool JSONBatchInProgress = false;
namespace ACPRODINOTE { namespace ACPRODINOTE {
typedef boost::heap::priority_queue<Transaction *> ACWQ; typedef boost::heap::priority_queue<Transaction *> ACWQ;
@ -143,9 +146,9 @@ void ausRegEPPTK::registryXOTE() { // PROD in OTE
return; return;
} }
theseLogs->logN(0,"Monitoring ./json for changes."); theseLogs->logN(0,"Monitoring /json for changes.");
wd = inotify_add_watch( fd, "./json", IN_MODIFY | IN_CREATE | IN_DELETE ); wd = inotify_add_watch( fd, "/json", IN_MODIFY | IN_CREATE | IN_DELETE );
length = read( fd, buffer, BUF_LEN ); length = read( fd, buffer, BUF_LEN );
if ( length < 0 ) { if ( length < 0 ) {
@ -186,24 +189,32 @@ void ausRegEPPTK::registryXOTE() { // PROD in OTE
} }
} }
if (actionableFileEvent) { char wxyz[100]; sprintf(wxyz,"/json/%s",event->name);
while (JSONBatchInProgress) {
theseLogs->logN(0, "Waiting for pending batch to complete." );
sleep(2);
}
JSONBatchInProgress = true;
if (actionableFileEvent) { char wxyz[100]; sprintf(wxyz,"./json/%s",event->name);
mdJSON scriptor; mdJSON scriptor;
scriptor.setPath(wxyz); scriptor.setPath(wxyz);
if (!scriptor.parse()) { didDie = false; if (!scriptor.parse()) { didDie = false;
if (!scriptor.run()) { if (scriptor.run()) {
if (didDie) { if (didDie) {
monitoring = false; monitoring = false;
theseLogs->logN(1, "Run of %s fatal error. ./json monitoring stops.", event->name ); theseLogs->logN(1, "Run of %s fatal error. /json monitoring stops.", event->name );
theseLogs->logN(0, "Restart process to resume JSON monitoring operations." ); theseLogs->logN(0, "Restart process to resume JSON monitoring operations." );
} else { } else {
theseLogs->logN(1, "Run of %s has errors ./json monitoring continues.", event->name ); theseLogs->logN(1, "Run of %s has errors /json monitoring continues.", event->name );
JSONBatchInProgress = false;
} }
} else } else
theseLogs->logN(1, " %s completed OK. ./json monitoring continues.", event->name ); theseLogs->logN(1, " %s preprocessed OK. /json monitoring continues.", event->name );
} }
else { else {
theseLogs->logN(1, "Parse of %s failed. ./json monitoring continues.", event->name ); theseLogs->logN(1, "Parse of %s failed. /json monitoring continues.", event->name );
JSONBatchInProgress = false;
} }
} }
} }
@ -255,23 +266,27 @@ void ausRegEPPTK::doPROD()
if (debug > 999) 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,seconds,acq.size()-1);
manager->execute(*tx); //manager->execute(*tx);
if (debug > 999) if (debug > 999)
theseLogs->logN(2,"Tx completed @ minute %d second %d.",minutes,seconds); theseLogs->logN(2,"Tx completed @ minute %d second %d.",minutes,seconds);
idleSeconds = 0; idleSeconds = 0;
if (!acq.size())
JSONBatchInProgress = false;
acq.pop(); acq.pop();
delete tx; delete tx;
} }
if (!lastPolicyHandshake || (seconds - lastPolicyHandshake >= (REGISTRY_HANDSHAKE - 5))) if (!lastPolicyHandshake || (seconds - lastPolicyHandshake >= (REGISTRY_HANDSHAKE - 5)))
{idleSeconds = 0; {lastPolicyHandshake = 1; goto skipHandshake;
idleSeconds = 0;
if (debug > 99) 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,seconds);
lastPolicyHandshake = seconds; lastPolicyHandshake = seconds;
sess->writeXML(TEST_SE); sess->writeXML(TEST_SE);
sess->read(); sess->read();
skipHandshake: ;
} }
sleep(PRODINOTESLEEP); sleep(PRODINOTESLEEP);
@ -286,7 +301,7 @@ void ausRegEPPTK::doPROD()
lastMinutes = minutes; lastMinutes = minutes;
} }
if (debug > 9999 && !(seconds % 30)) 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,seconds);
} }

View File

@ -11,10 +11,17 @@
#include <stdio.h> #include <stdio.h>
#include "mdJSON.hpp" #include "mdJSON.hpp"
extern bool JSONBatchInProgresse;
extern Json::Value parms[MAX_OTE_CASE];
namespace ACPRODINOTE { namespace ACPRODINOTE {
extern string thisRegistry, thisAccount, thatAccount;
extern testCases theseCases; extern testCases theseCases;
extern testFuncs theseFuncs; extern testFuncs theseFuncs;
extern int cmd,thisCase;
extern bool bindError;
} }
using namespace std; using namespace std;
@ -40,36 +47,54 @@ readInputTestFile( const char *path )
bool mdJSON::run() bool mdJSON::run()
{ {
bool done=false; bool lastMemberWasString=false,parseError=false,done=false;
int i=0, nCases =0, nThings = 0, debug=1000; int i=0, nCases =0, nThings = 0, debug=1000;
const Json::Value suite = root["testSuite00"]; const Json::Value suite = root["testSuiteAC"];
if (!suite) { if (!suite) {
theseLogs->logN(0,"No 'testSuite00' suite root, can't run."); theseLogs->logN(0,"No 'testSuiteAC' suite root, can't run.");
return true; return true;
} }
if (!suite.isObject()) { if (!suite.isObject()) {
theseLogs->logN(0,"'testSuite00' isn't an object, can't run."); theseLogs->logN(0,"'testSuiteAC' isn't an object, can't run.");
return true; return true;
} }
if (suite.empty()) { if (suite.empty()) {
theseLogs->logN(0,"'testSuite00' contains nothing, can't run."); theseLogs->logN(0,"'testSuiteAC' contains nothing, can't run.");
return true; return true;
} }
theseLogs->logN(1,"'testSuite00' - binding %d fields and case objects.",suite.size()); theseLogs->logN(1,"'testSuiteAC' - binding %d fields and case objects.",suite.size());
Json::Value::Members itemNames = suite.getMemberNames(); Json::Value::Members itemNames = suite.getMemberNames();
string thisTestCase(""), thisTestCaseDesc("");
ACPRODINOTE::thisRegistry = string("");
ACPRODINOTE::thisAccount = string("");
ACPRODINOTE::thatAccount = string("");
for ( i = 0; i < itemNames.size(); ++i ) { const char *thisItem; for ( i = 0; i < itemNames.size(); ++i ) { const char *thisItem;
try { try {
thisItem = itemNames[i].c_str(); thisItem = itemNames[i].c_str();
Json::Value thisMember = suite.get(thisItem,root);
if (debug > 100000) if (debug > 100000)
theseLogs->logN(1,"item %s.",thisItem); theseLogs->logN(1,"item %s.",thisItem);
if (!stricmp(thisItem,"registry")) { if (!stricmp(thisItem,"registry") && thisMember.isString()) {
theseLogs->logN(1,"The primary name provider is '%s'",thisMember.asString().c_str());
ACPRODINOTE::thisRegistry = thisMember.asString();
continue;
}
if (!stricmp(thisItem,"accounta") && thisMember.isString()) {
theseLogs->logN(1,"The first OTE account is '%s'",thisMember.asString().c_str());
ACPRODINOTE::thisAccount = thisMember.asString();
continue;
}
if (!stricmp(thisItem,"accountb") && thisMember.isString()) {
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 (strncmp(thisItem,"case",4)) continue;
if (strlen(thisItem) != 6) continue; if (strlen(thisItem) != 6) continue;
@ -79,27 +104,53 @@ bool mdJSON::run()
theseLogs->logN(1,"No logic to bind to '%s', need it.",thisItem); theseLogs->logN(1,"No logic to bind to '%s', need it.",thisItem);
return false; return false;
} }
//if (!suite[i].isObject()) { if (thisMember != root && thisMember.isString()) {
// theseLogs->logN(1,"'%s' isn't an object, can't use.",thisItem); thisTestCase = string(thisItem);
// continue; if (!lastMemberWasString)
//} {thisTestCaseDesc = thisMember.asString(); lastMemberWasString = true;}
ACPRODINOTE::theseCases[nCases].parms = NULL; 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].fBody = ACPRODINOTE::theseFuncs[thisItem];
ACPRODINOTE::theseCases[nCases++].caseName = thisItem; ACPRODINOTE::theseCases[nCases++].caseName = thisItem;
lastMemberWasString = false;
ACPRODINOTE::theseCases[nCases++].desc = thisTestCaseDesc;
}
} }
catch (...) catch (...)
{ {
theseLogs->logN(1,"Test case binding exception: %s ",thisItem ); theseLogs->logN(1,"Test case parse exception: %s ",thisItem );
} }
} }
theseLogs->logN(1,"%d cases bound, beginning execution.",nCases); if (ACPRODINOTE::thisRegistry.empty()) {
theseLogs->logN(0,"No primary name provider."); parseError = true; }
for (i=0;i<ACPRODINOTE::theseCases.size();i++) { if (ACPRODINOTE::thisAccount.empty() && ACPRODINOTE::thatAccount.empty()) {
theseLogs->logN(0,"At least one account must be specified."); parseError = true; }
if (parseError) {
theseLogs->logN(0,"parse errors, script cannot be run");
return true;
}
ACPRODINOTE::bindError = false;
theseLogs->logN(1,"%d cases parsed, bind and queueing begins.",nCases);
for (i=0;i<ACPRODINOTE::theseCases.size();i++) { ACPRODINOTE::thisCase = i;
ACPRODINOTE::cmd = 0;
try{ try{
theseLogs->logN(2,"%d Begin setup of %s ",i+1,ACPRODINOTE::theseCases[i].caseName ); theseLogs->logN(2,"%d Setup %s ...",i+1,ACPRODINOTE::theseCases[i].caseName );
ACPRODINOTE::thisCase = ACPRODINOTE::theseCases[i].parms;
ACPRODINOTE::theseCases[i].fBody(); ACPRODINOTE::theseCases[i].fBody();
theseLogs->logN(2,"%d End setup of %s ",i+1,ACPRODINOTE::theseCases[i].caseName ); theseLogs->logN(3,"%d ... %s %d parameter(s) ",i+1,ACPRODINOTE::theseCases[i].caseName,parms[i].size() );
} }
catch (exception e) catch (exception e)
{ {
@ -110,9 +161,16 @@ bool mdJSON::run()
theseLogs->logN(1,"Unknown test case fault in %s ",ACPRODINOTE::theseCases[i].caseName ); theseLogs->logN(1,"Unknown test case fault in %s ",ACPRODINOTE::theseCases[i].caseName );
} }
} }
theseLogs->logN(0,"Suite 'testSuite00' end execution."); if (ACPRODINOTE::bindError) {
} theseLogs->logN(0,"binding errors, script cannot be run");
return true;
}
else
theseLogs->logN(0,"Suite 'testSuiteAC' end bind and queue for execution.");
return done; // Should be false if no error.
}
static bool static bool
parseValueTree( const std::string &input, const std::string &kind, Json::Value &root, const Json::Features &features) parseValueTree( const std::string &input, const std::string &kind, Json::Value &root, const Json::Features &features)
{ {

View File

@ -7,58 +7,14 @@
"testSuites": "Outer block of a set of inputs to mdJSON.cpp to be run by ausRegTK::registryXOTE()", "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": "Repeat case name casexx as needed, to run needs logic bound in RegistryXOTE.h",
"testSuite00" : { "testSuiteAC" : {
"Registry" : "Donuts", "Registry" : "Donuts",
"AccountA" : "secura1-ote", "AccountA" : "secura1-ote",
"AccountB" : "secura2-ote2", "AccountB" : "secura2-ote2",
"case00" : "Create a contact", "case00" : "Create a contact",
"case-00" : { "case00" : {
"cont_id": "renjuan",
"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",
"case-01" : {
"name" : "bestever.camera"
},
"case02" : "Check with Claims Extension",
"case-02" : {
"name" : "unicycles.bike"
},
"case03" : "Conventional / Standard / Unextended Create",
"case-03" : {
"name" : "greedy.ventures"
},
"case04" : "DPML Create",
"case-04" : {
"name" : "face.dpml.zone",
"smd-data" : "./smd/face-test.smd"
},
"case00" : "Create another contact",
"case-00" : {
"cont_id": "renjuan2", "cont_id": "renjuan2",
"cont_pw": "Ab9dW@rd", "cont_pw": "Ab9dW@rd",
@ -73,8 +29,52 @@
}, },
"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" : "DPML Create",
"case-04" : { "case04" : {
"name" : "face.dpml.zone",
"smd-data" : "./smd/face-test.smd"
},
"case00" : "Create another contact",
"case00" : {
"cont_id": "renjuan3",
"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"
},
"case04" : "DPML Create",
"case04" : {
"name" : "secura.dpml.zone", "name" : "secura.dpml.zone",
"smd-data" : "./smd/secura-test.smd" "smd-data" : "./smd/secura-test.smd"
@ -82,7 +82,7 @@
}, },
"case05" : "Create with TCN Override", "case05" : "Create with TCN Override",
"case-05" : { "case05" : {
"name" : "greedy.ventures", "name" : "greedy.ventures",
"noticeID" : "", "noticeID" : "",