#include #include "xml/XMLParser.hpp" #include "common/init.hpp" #include "common/Test.hpp" #include "SecDNSDSData.hpp" #include "SecDNSKeyData.hpp" #include "SecDNSDSOrKeyType.hpp" #include "DomainSecDNSInfoResponseExtension.hpp" #include "se/DomainInfoResponse.hpp" using namespace std; void assertFirstDSData(const SecDNSDSData* dsData); void assertKeyData(const SecDNSKeyData* keyData); void assertSecondDSData(const SecDNSDSData* dsData); string getInfoResponseExpectedXml(const string& domainName, bool isMulitpleDs, bool isKeyData, bool isDsData); void buildXmlResponseAfterExtension(ostringstream& result); void buildSecDNSXmlExtension(bool isMulitpleDs, bool isKeyData, bool isDsData, ostringstream& result); void buildXmlResponseBeforeExtension(const string& domainName, ostringstream& result); void testSecDNSInfoExtensionAllFields() { string domainName = "test.mop.biz"; DomainInfoResponse response; DomainSecDNSInfoResponseExtension extension; response.registerExtension(&extension); const string xml = getInfoResponseExpectedXml(domainName, false, false, true); auto_ptr parser(new XMLParser); auto_ptr doc(parser->parse(xml)); response.fromXML(doc.get()); ASSERT_EQ(extension.isInitialised(), true); ASSERT_EQ(response.getName(), domainName); ASSERT_EQ(extension.getInfData()->getDSDataListSize(), 1); assertFirstDSData(extension.getInfData()->getDSData(0).get()); } void testSecDNSInfoExtensionOnlyKeyData() { string domainName = "test.mop.biz"; DomainInfoResponse response; DomainSecDNSInfoResponseExtension extension; response.registerExtension(&extension); const string xml = getInfoResponseExpectedXml(domainName, false, true, false); auto_ptr parser(new XMLParser); auto_ptr doc(parser->parse(xml)); response.fromXML(doc.get()); ASSERT_EQ(extension.isInitialised(), true); ASSERT_EQ(response.getName(), domainName); ASSERT_EQ(extension.getInfData()->getDSDataListSize(), 0); ASSERT_EQ(extension.getInfData()->getKeyDataListSize(), 1); assertKeyData(extension.getInfData()->getKeyData(0).get()); } void testSecDNSInfoExtensionMultipleDsRecords() { string domainName = "test.mop.biz"; DomainInfoResponse response; DomainSecDNSInfoResponseExtension extension; response.registerExtension(&extension); const string xml = getInfoResponseExpectedXml(domainName, true, false, true); auto_ptr parser(new XMLParser); auto_ptr doc(parser->parse(xml)); response.fromXML(doc.get()); ASSERT_EQ(extension.isInitialised(), true); ASSERT_EQ(response.getName(), domainName); ASSERT_EQ(extension.getInfData()->getDSDataListSize(), 2); assertFirstDSData(extension.getInfData()->getDSData(0).get()); assertSecondDSData(extension.getInfData()->getDSData(1).get()); } void testSecDNSInfoNoExtensionInitialised() { string domainName = "test.mop.biz"; DomainInfoResponse response; DomainSecDNSInfoResponseExtension extension; response.registerExtension(&extension); const string xml = getInfoResponseExpectedXml(domainName, false, false, false); auto_ptr parser(new XMLParser); auto_ptr doc(parser->parse(xml)); response.fromXML(doc.get()); ASSERT_EQ(extension.isInitialised(), false); ASSERT_EQ(response.getName(), domainName); ASSERT_EQ(extension.getInfData()->getDSDataListSize(), 0); ASSERT_EQ(extension.getInfData()->getKeyDataListSize(), 0); } void assertFirstDSData(const SecDNSDSData* dsData) { if (dsData != NULL) { ASSERT_EQ(dsData->getKeyTag(), 12345); ASSERT_EQ(dsData->getAlg(), 3); ASSERT_EQ(dsData->getDigestType(), 1); ASSERT_EQ(dsData->getDigest(), "49FD46E6C4B45C55D4AC"); assertKeyData(dsData->getKeyData()); } } void assertKeyData(const SecDNSKeyData* keyData) { if (keyData != NULL) { ASSERT_EQ(keyData->getFlags(), 256); ASSERT_EQ(keyData->getProtocol(), 3); ASSERT_EQ(keyData->getAlg(), 1); ASSERT_EQ(keyData->getPubKey(), "AQPJ////4Q=="); } } void assertSecondDSData(const SecDNSDSData* dsData) { if (dsData != NULL) { ASSERT_EQ(dsData->getKeyTag(), 14321); ASSERT_EQ(dsData->getAlg(), 2); ASSERT_EQ(dsData->getDigestType(), 5); ASSERT_EQ(dsData->getDigest(), "39FD46E6C4B45C55D4AC"); ASSERT_NULL(dsData->getKeyData()); } } string getInfoResponseExpectedXml(const string& domainName, bool isMulitpleDs, bool isKeyData, bool isDsData) { ostringstream result; buildXmlResponseBeforeExtension(domainName, result); if (isKeyData || isDsData) { buildSecDNSXmlExtension(isMulitpleDs, isKeyData, isDsData, result); } buildXmlResponseAfterExtension(result); return result.str(); } void buildXmlResponseAfterExtension(ostringstream& result) { result << "" << "ABC-12345" << "54321-XYZ" << "" << "" << ""; } void buildSecDNSXmlExtension(bool isMulitpleDs, bool isKeyData, bool isDsData, ostringstream& result) { result << "" << "" << "" << "RegistrantName Pty. Ltd." << "123456789" << "Other" << "Registrant Eligi" << "987654321" << "2" << "" << "" << "" << "604800"; if (isDsData) { result << "" << "12345" << "3" << "1" << "49FD46E6C4B45C55D4AC" << "" << "256" << "3" << "1" << "AQPJ////4Q==" << "" << ""; if (isMulitpleDs) { result << "" << "14321" << "2" << "5" << "39FD46E6C4B45C55D4AC" << ""; } } if (isKeyData) { result << "" << "256" << "3" << "1" << "AQPJ////4Q==" << ""; } result << "" << ""; } void buildXmlResponseBeforeExtension(const string& domainName, ostringstream& result) { result << "" << "" << "" << "" << "Command completed successfully" << "" << "" << "" << "" + domainName + "" << "D0000003-AR" << "" << "EXAMPLE" << "EXAMPLE" << "" << "ns1.example.mop.biz" << "ns2.example.mop.biz" << "" << "ns1.example.mop.biz" << "ns2.exmaple.mop.biz" << "Registrar" << "Registrar" << "2006-02-09T15:44:58.0Z" << "2008-02-10T00:00:00.0Z" << "" << "0192pqow" << "" << "" << ""; } int main(int argc, char* argv[]) { init("./etc/toolkit2.conf"); TEST_run(testSecDNSInfoExtensionAllFields); TEST_run(testSecDNSInfoExtensionOnlyKeyData); TEST_run(testSecDNSInfoExtensionMultipleDsRecords); TEST_run(testSecDNSInfoNoExtensionInitialised); return TEST_errorCount(); }