package com.ausregistry.jtoolkit2.se;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import org.junit.Test;
import com.ausregistry.jtoolkit2.EPPDateFormatter;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
import com.ausregistry.jtoolkit2.xml.XMLParser;
public class DomainInfoResponseTest {
private static final XMLParser PARSER = new XMLParser();
@Test
public void testFromXML() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
}
@Test
public void testGetPW() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
assertEquals("0192pqow", response.getPW());
}
@Test
public void testGetCreateDate() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
GregorianCalendar exp = EPPDateFormatter.fromXSDateTime("2006-02-09T15:44:58.0Z");
GregorianCalendar act = response.getCreateDate();
assertNotNull(act);
assertEquals(exp, act);
}
@Test
public void testGetExpireDate() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
GregorianCalendar exp = EPPDateFormatter.fromXSDateTime("2008-02-10T00:00:00.0Z");
GregorianCalendar act = response.getExpireDate();
assertEquals(exp, act);
}
@Test
public void testGetRegistrantID() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
String exp = "EXAMPLE";
String act = response.getRegistrantID();
assertEquals(exp, act);
}
@Test
public void testGetTechContacts() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
String[] act = response.getTechContacts();
String[] exp = new String[] { "EXAMPLE" };
assertArrayEquals(exp, act);
}
@Test
public void testGetNameservers() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
String[] act = response.getNameservers();
String[] exp = new String[] { "ns1.example.com.au", "ns2.example.com.au" };
assertArrayEquals(exp, act);
}
@Test
public void testGetSubordinateHosts() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
String[] act = response.getSubordinateHosts();
String[] exp = new String[] { "ns1.example.com.au", "ns2.exmaple.com.au" };
assertArrayEquals(exp, act);
}
@Test
public void testGetStatuses() throws Exception {
DomainInfoResponse response = new DomainInfoResponse();
XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml("example.com.au"));
response.fromXML(doc);
Status[] act = response.getStatuses();
Status[] exp = new Status[] { new Status("ok", null, "lang") };
assertEquals(exp[0].toString(), act[0].toString());
}
@Test
public void testGetIdnName() throws Exception {
final String userForm = "\u0257\u018c\u0661.com";
final String dnsForm = "xn--xha91b83h.com";
final String canonicalForm = "\u0257\u018c1.com";
final DomainInfoResponse response = new DomainInfoResponse();
final DomainIdnaResponseExtension re =
new DomainIdnaResponseExtension(ResponseExtension.INFO);
final XMLDocument doc =
PARSER.parse(getInfoResponseExpectedXml(dnsForm, true, userForm, canonicalForm,
null, null));
response.registerExtension(re);
response.fromXML(doc);
assertEquals(dnsForm, response.getName());
assertTrue("IDN extension should have been initialised", re.isInitialised());
assertEquals(userForm, re.getUserFormName());
assertEquals(canonicalForm, re.getCanonicalForm());
assertEquals("test", re.getLanguage());
}
@Test
public void testGetNoIdn() throws Exception {
final String domainName = "xn--xha91b83h.com";
final DomainInfoResponse response = new DomainInfoResponse();
final DomainIdnaResponseExtension re =
new DomainIdnaResponseExtension(ResponseExtension.INFO);
final XMLDocument doc =
PARSER.parse(getInfoResponseExpectedXml(domainName));
response.registerExtension(re);
response.fromXML(doc);
assertEquals(domainName, response.getName());
assertFalse("IDN extension should not have been initialised", re.isInitialised());
}
@Test
public void testGetVariants() throws Exception {
final String dnsForm = "xn--xha91b83h.com";
final String variantUserForm = "\u0257\u015c\u0661.com";
final String variantDnsForm = "xn--lga31c50h.com";
final DomainInfoResponse response = new DomainInfoResponse();
final DomainVariantResponseExtension variantsExtension =
new DomainVariantResponseExtension(ResponseExtension.INFO);
final XMLDocument doc =
PARSER.parse(getInfoResponseExpectedXml(dnsForm, variantUserForm, variantDnsForm));
response.registerExtension(variantsExtension);
response.fromXML(doc);
assertEquals(dnsForm, response.getName());
assertTrue("Variant extension should have been initialised",
variantsExtension.isInitialised());
final ArrayList<IdnaDomainVariant> variantList = variantsExtension.getVariants();
assertEquals("Incorrect number of variants returned", 1, variantList.size());
assertEquals(variantDnsForm, variantList.get(0).getName());
assertEquals(variantUserForm, variantList.get(0).getUserForm());
}
@Test
public void testGetNoVariants() throws Exception {
final String domainName = "xn--xha91b83h.com";
final DomainInfoResponse response = new DomainInfoResponse();
final DomainVariantResponseExtension variantsExtension =
new DomainVariantResponseExtension(ResponseExtension.INFO);
final XMLDocument doc = PARSER.parse(getInfoResponseExpectedXml(domainName));
response.registerExtension(variantsExtension);
response.fromXML(doc);
assertEquals(domainName, response.getName());
assertFalse("Variant extension should not have been initialised",
variantsExtension.isInitialised());
}
@Test
public void testLdhOnlyGetName() throws Exception {
final DomainInfoResponse response = new DomainInfoResponse();
final DomainIdnaResponseExtension re =
new DomainIdnaResponseExtension(ResponseExtension.INFO);
final XMLDocument doc =
PARSER.parse(getInfoResponseExpectedXml("example.com", true, "example.com"));
response.registerExtension(re);
response.fromXML(doc);
assertEquals("example.com", response.getName());
assertTrue("IDN extension should have been initialised", re.isInitialised());
assertEquals("example.com", re.getUserFormName());
}
private static String getInfoResponseExpectedXml(final String domainName, final boolean isIdn,
final String userForm, final String canonicalForm, final String variantUserForm,
final String variantDnsForm) {
final StringBuilder result = new StringBuilder();
result.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
result.append("<epp xmlns=\"urn:ietf:params:xml:ns:epp-1.0\"");
result.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
result.append(" xsi:schemaLocation=\"urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd\">");
result.append("<response>");
result.append("<result code=\"1000\">");
result.append("<msg>Command completed successfully</msg>");
result.append("</result>");
result.append("<resData>");
result.append("<infData xmlns=\"urn:ietf:params:xml:ns:domain-1.0\"");
result.append(" xsi:schemaLocation=\"urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd\">");
result.append("<name>" + domainName + "</name>");
result.append("<roid>D0000003-AR</roid>");
result.append("<status s=\"ok\" lang=\"en\"/>");
result.append("<registrant>EXAMPLE</registrant>");
result.append("<contact type=\"tech\">EXAMPLE</contact>");
result.append("<ns>");
result.append("<hostObj>ns1.example.com.au</hostObj>");
result.append("<hostObj>ns2.example.com.au</hostObj>");
result.append("</ns>");
result.append("<host>ns1.example.com.au</host>");
result.append("<host>ns2.exmaple.com.au</host>");
result.append("<clID>Registrar</clID>");
result.append("<crID>Registrar</crID>");
result.append("<crDate>2006-02-09T15:44:58.0Z</crDate>");
result.append("<exDate>2008-02-10T00:00:00.0Z</exDate>");
result.append("<authInfo>");
result.append("<pw>0192pqow</pw>");
result.append("</authInfo>");
result.append("</infData>");
result.append("</resData>");
result.append("<extension>");
result.append("<auext:infData xmlns:auext=\"urn:X-au:params:xml:ns:auext-1.2\"");
result.append(" xsi:schemaLocation=\"urn:X-au:params:xml:ns:auext-1.2 auext-1.2.xsd\">");
result.append("<auext:auProperties>");
result.append("<auext:registrantName>RegistrantName Pty. Ltd.</auext:registrantName>");
result.append("<auext:registrantID type=\"ACN\">123456789</auext:registrantID>");
result.append("<auext:eligibilityType>Other</auext:eligibilityType>");
result.append("<auext:eligibilityName>Registrant Eligi</auext:eligibilityName>");
result.append("<auext:eligibilityID type=\"ABN\">987654321</auext:eligibilityID>");
result.append("<auext:policyReason>2</auext:policyReason>");
result.append("</auext:auProperties>");
result.append("</auext:infData>");
if (isIdn || variantDnsForm != null) {
if (isIdn) {
result.append("<infData xmlns=\"urn:X-ar:params:xml:ns:idnadomain-1.0\"");
result.append(" xsi:schemaLocation=\"urn:X-ar:params:xml:ns:idnadomain-1.0 idnadomain-1.0.xsd\">");
result.append("<userForm language=\"test\">" + userForm + "</userForm>");
result.append("<canonicalForm>" + canonicalForm + "</canonicalForm>");
result.append("</infData>");
}
if (variantDnsForm != null && variantUserForm != null) {
result.append("<infData xmlns=\"urn:X-ar:params:xml:ns:variant-1.0\"");
result.append(" xsi:schemaLocation=\"urn:X-ar:params:xml:ns:variant-1.0 variant-1.0.xsd\">");
result.append("<variant userForm=\"" + variantUserForm + "\">" + variantDnsForm + "</variant>");
result.append("</infData>");
}
}
result.append("</extension>");
result.append("<trID>");
result.append("<clTRID>ABC-12345</clTRID>");
result.append("<svTRID>54321-XYZ</svTRID>");
result.append("</trID>");
result.append("</response>");
result.append("</epp>");
return result.toString();
}
private static String getInfoResponseExpectedXml(final String domainName,
final String variantUserForm, final String variantDnsForm) {
return getInfoResponseExpectedXml(domainName, false, null, null, variantUserForm, variantDnsForm);
}
private static String getInfoResponseExpectedXml(final String domainName, final boolean isIdn,
final String userForm) {
return getInfoResponseExpectedXml(domainName, isIdn, userForm, null, null, null);
}
private static String getInfoResponseExpectedXml(final String domainName) {
return getInfoResponseExpectedXml(domainName, false, null, null, null, null);
}
}