1 /*
2  * Copyright (C) 2006-2021 Registro.br. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  * 1. Redistribution of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY REGISTRO.BR ``AS IS AND ANY EXPRESS OR
14  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIE OF FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
16  * EVENT SHALL REGISTRO.BR BE LIABLE FOR ANY DIRECT, INDIRECT,
17  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
18  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
19  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
21  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
22  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
23  * DAMAGE.
24  */
25 /* $Id$ */
26 
27 #include <memory>
28 #include <string>
29 
30 #include "libepp_nicbr.H"
31 
32 #include "DefRegTransferTest.H"
33 #include "DefRegTransfer.H"
34 #include "FileUtil.H"
35 #include "IoException.H"
36 #include "XmlException.H"
37 
38 LIBEPP_NICBR_NS_USE
39 
40 CPPUNIT_TEST_SUITE_REGISTRATION(DefRegTransferTest);
41 
DefRegTransferTest()42 DefRegTransferTest::DefRegTransferTest() {}
43 
~DefRegTransferTest()44 DefRegTransferTest::~DefRegTransferTest() {}
45 
setUp()46 void DefRegTransferTest::setUp() {}
47 
tearDown()48 void DefRegTransferTest::tearDown() {}
49 
set_xml_template_test()50 void DefRegTransferTest::set_xml_template_test()
51 {
52 	string to_be_parsed =
53 		"<command>"
54 		"<transfer op=\"$(operation)$\">"
55 		"<defReg:transfer "
56 		"xmlns:defReg=\"http://nic.br/epp/defReg-1.0\" "
57 		"xsi:schemaLocation=\"http://nic.br/epp/defReg-1.0 "
58 		"defReg-1.0.xsd\">"
59 		"<defReg:roid>$(roid)$</defReg:roid>"
60 		"$(period)$"
61 		"$(auth_info)$"
62 		"</defReg:transfer>"
63 		"</transfer>"
64 		"$(clTRID)$"
65 		"</command>";
66 
67 	DefRegTransfer def_reg_transfer;
68 	DefRegTransferCmd* def_reg_transfer_cmd = def_reg_transfer.get_command();
69 	def_reg_transfer_cmd->set_operation(TransferOperation::QUERY);
70 	def_reg_transfer_cmd->set_roid("EXAMPLE1-REP");
71 
72 	AuthInfo auth;
73 	auth.set_roid("SH8013-REP");
74 	auth.set_pw("abc123");
75 	def_reg_transfer_cmd->set_authInfo(auth);
76 
77 	def_reg_transfer.get_command()->set_clTRID("ABC-12345");
78 	def_reg_transfer.set_xml_template(to_be_parsed);
79 
80 	string expected =
81 		"<command>"
82 		"<transfer op=\"query\">"
83 		"<defReg:transfer xmlns:defReg=\"http://nic.br/epp/defReg-1.0\" "
84 		"xsi:schemaLocation=\"http://nic.br/epp/defReg-1.0 "
85 		"defReg-1.0.xsd\">"
86 		"<defReg:roid>EXAMPLE1-REP</defReg:roid>"
87 		"<defReg:authInfo>"
88 		"<defReg:pw roid=\"SH8013-REP\">abc123</defReg:pw>"
89 		"</defReg:authInfo>"
90 		"</defReg:transfer>"
91 		"</transfer>"
92 		"<clTRID>ABC-12345</clTRID>"
93 		"</command>";
94 
95 	CPPUNIT_ASSERT_EQUAL(expected, def_reg_transfer.get_xml());
96 
97 	// tests reset method
98 	def_reg_transfer_cmd->reset();
99 	CPPUNIT_ASSERT_EQUAL(TransferOperation::NONE, def_reg_transfer_cmd->get_operation());
100 	CPPUNIT_ASSERT(def_reg_transfer_cmd->get_roid().empty());
101 	CPPUNIT_ASSERT(def_reg_transfer_cmd->get_authInfo().get_pw().empty());
102 	CPPUNIT_ASSERT(def_reg_transfer_cmd->get_authInfo().get_roid().empty());
103 	CPPUNIT_ASSERT_EQUAL(0, def_reg_transfer_cmd->get_period().time);
104 	CPPUNIT_ASSERT(def_reg_transfer_cmd->get_period().unit.empty());
105 
106 	// parent attribute
107 	CPPUNIT_ASSERT(def_reg_transfer_cmd->get_clTRID() == "");
108 }
109 
command_test()110 void DefRegTransferTest::command_test()
111 {
112 	DefRegTransfer def_reg_transfer;
113 	DefRegTransferCmd* def_reg_transfer_cmd = def_reg_transfer.get_command();
114 	def_reg_transfer_cmd->set_operation(TransferOperation::QUERY);
115 	def_reg_transfer_cmd->set_roid("EXAMPLE1-REP");
116 
117 	AuthInfo auth;
118 	auth.set_roid("SH8013-REP");
119 	auth.set_pw("abc123");
120 	def_reg_transfer_cmd->set_authInfo(auth);
121 
122 	bool exception_caught = false;
123 	try {
124 		string xml_template =
125 			FileUtil::read_file("../docs/templates/def_reg_transfer.xml");
126 
127 		def_reg_transfer.get_command()->set_clTRID("ABC-12345");
128 		def_reg_transfer.set_xml_template(xml_template);
129 
130 		DomParser parser;
131 		parser.enable_validation("../docs/schemas");
132 		parser.parse_command(def_reg_transfer.get_xml());
133 	} catch (const IoException &e) {
134 		exception_caught = true;
135 		printf("\nIO Exception: code [%d] message [%s]",
136 		       e.get_code(), e.get_msg().c_str());
137 	} catch (const XmlException &e) {
138 		exception_caught = true;
139 		printf("\nXml Exception: code [%d] message [%s] low level message [%s]\n",
140 		       e.get_code(), e.get_msg().c_str(), e.get_low_level_msg().c_str());
141 	}
142 
143 	CPPUNIT_ASSERT(!exception_caught);
144 }
145 
response_test()146 void DefRegTransferTest::response_test()
147 {
148 	string expected =
149 		"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>"
150 		"<epp xmlns=\"urn:ietf:params:xml:ns:epp-1.0\" "
151 		"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
152 		"xsi:schemaLocation=\"urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd\">"
153 		"<response>"
154 		"<result code=\"1000\">"
155 		"<msg>Command completed successfully</msg>"
156 		"</result>"
157 		"<resData>"
158 		"<defReg:trnData "
159 		"xmlns:defReg=\"http://nic.br/epp/defReg-1.0\" "
160 		"xsi:schemaLocation=\"http://nic.br/epp/defReg-1.0 "
161 		"defReg-1.0.xsd\">"
162 		"<defReg:roid>EXAMPLE1-REP</defReg:roid>"
163 		"<defReg:trStatus>pending</defReg:trStatus>"
164 		"<defReg:reID>ClientX</defReg:reID>"
165 		"<defReg:reDate>2000-06-06T22:00:00.0Z</defReg:reDate>"
166 		"<defReg:acID>ClientY</defReg:acID>"
167 		"<defReg:acDate>2000-06-11T22:00:00.0Z</defReg:acDate>"
168 		"<defReg:exDate>2002-09-08T22:00:00.0Z</defReg:exDate>"
169 		"</defReg:trnData>"
170 		"</resData>"
171 		"<trID>"
172 		"<clTRID>ABC-12345</clTRID>"
173 		"<svTRID>54322-XYZ</svTRID>"
174 		"</trID>"
175 		"</response>"
176 		"</epp>";
177 
178 	DomParser parser;
179 	parser.enable_validation("../docs/schemas");
180 
181 	DefRegTransfer def_reg_transfer;
182 
183 	CPPUNIT_ASSERT_NO_THROW(def_reg_transfer.set_response(expected, &parser));
184 	DefRegTransferRsp* def_reg_transfer_rsp = def_reg_transfer.get_response();
185 
186 	string result_code = "1000";
187 
188 	map <Response::ResultCode, Response::ResultInfo> results;
189 	map <Response::ResultCode, Response::ResultInfo>::const_iterator r_it;
190 	results = def_reg_transfer_rsp->get_result_list();
191 	r_it = results.begin();
192 
193 	CPPUNIT_ASSERT(r_it != results.end());
194 	CPPUNIT_ASSERT_EQUAL(Response::OK, r_it->first);
195 
196 	string response =
197 		"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>"
198 		"<epp xmlns=\"urn:ietf:params:xml:ns:epp-1.0\" "
199 		"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
200 		"xsi:schemaLocation=\"urn:ietf:params:xml:ns:epp-1.0 "
201 		"epp-1.0.xsd\">"
202 		"<response>"
203 		"<result code=\"" + result_code + "\">"
204 		"<msg";
205 
206 	string result_lang = def_reg_transfer_rsp->get_result_lang();
207 	if (result_lang != "en") {
208 		response += " lang='" + result_lang + "'";
209 	}
210 
211 	response +=
212 		">" + r_it->second.msg + "</msg>"
213 		"</result>"
214 		"<resData>"
215 		"<defReg:trnData "
216 		"xmlns:defReg=\"http://nic.br/epp/defReg-1.0\" "
217 		"xsi:schemaLocation=\"http://nic.br/epp/defReg-1.0 "
218 		"defReg-1.0.xsd\">";
219 
220 	response += "<defReg:roid>" + def_reg_transfer_rsp->get_roid() + "</defReg:roid>"
221 		"<defReg:trStatus>" + def_reg_transfer_rsp->get_trStatus() + "</defReg:trStatus>"
222 		"<defReg:reID>" + def_reg_transfer_rsp->get_reID() + "</defReg:reID>"
223 		"<defReg:reDate>" + def_reg_transfer_rsp->get_reDate() + "</defReg:reDate>"
224 		"<defReg:acID>" + def_reg_transfer_rsp->get_acID() + "</defReg:acID>"
225 		"<defReg:acDate>" + def_reg_transfer_rsp->get_acDate() + "</defReg:acDate>"
226 		"<defReg:exDate>" + def_reg_transfer_rsp->get_exDate() + "</defReg:exDate>"
227 		"</defReg:trnData>"
228 		"</resData>"
229 		"<trID>"
230 		"<clTRID>" + def_reg_transfer_rsp->get_clTRID() + "</clTRID>"
231 		"<svTRID>" + def_reg_transfer_rsp->get_svTRID() + "</svTRID>"
232 		"</trID>"
233 		"</response>"
234 		"</epp>";
235 
236 	CPPUNIT_ASSERT_EQUAL(expected, response);
237 
238 	// tests reset method
239 	def_reg_transfer_rsp->reset();
240 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_roid());
241 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_trStatus());
242 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_reID());
243 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_reDate());
244 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_acID());
245 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_acDate());
246 	CPPUNIT_ASSERT_EQUAL((const string)"", def_reg_transfer_rsp->get_exDate());
247 }
248