Skip to content

Commit ef33880

Browse files
author
Aaron Sierra
committed
dns: gandi: Add API request checking
* Fix test_update_zone
1 parent f6dd97d commit ef33880

2 files changed

Lines changed: 144 additions & 4 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<methodResponse>
3+
<params>
4+
<param>
5+
<value>
6+
<struct>
7+
<member>
8+
<name>date_updated</name>
9+
<value><dateTime.iso8601>20101028T12:38:17</dateTime.iso8601></value>
10+
</member>
11+
<member>
12+
<name>domains</name>
13+
<value><int>0</int></value>
14+
</member>
15+
<member>
16+
<name>id</name>
17+
<value><int>47234</int></value>
18+
</member>
19+
<member>
20+
<name>name</name>
21+
<value><string>other.com</string></value>
22+
</member>
23+
<member>
24+
<name>owner</name>
25+
<value><string>AB3917-GANDI</string></value>
26+
</member>
27+
<member>
28+
<name>public</name>
29+
<value><boolean>0</boolean></value>
30+
</member>
31+
<member>
32+
<name>version</name>
33+
<value><int>1</int></value>
34+
</member>
35+
<member>
36+
<name>versions</name>
37+
<value><array><data></data></array></value>
38+
</member>
39+
</struct>
40+
</value>
41+
</param>
42+
</params>
43+
</methodResponse>

libcloud/test/dns/test_gandi.py

Lines changed: 101 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class GandiTests(unittest.TestCase):
2828
def setUp(self):
2929
GandiDNSDriver.connectionCls.conn_class = GandiMockHttp
3030
GandiMockHttp.type = None
31+
GandiMockHttp.history.clear()
3132
self.driver = GandiDNSDriver(*DNS_GANDI)
3233

3334
def test_list_record_types(self):
@@ -37,6 +38,12 @@ def test_list_record_types(self):
3738

3839
def test_list_zones(self):
3940
zones = self.driver.list_zones()
41+
42+
sent = GandiMockHttp.history.pop()
43+
self.assertEqual(sent.method, "POST")
44+
self.assertEqual(sent.url, "/xmlrpc/")
45+
self.assertIn("<methodName>domain.zone.list</", sent.body)
46+
4047
self.assertEqual(len(zones), 5)
4148

4249
zone = zones[0]
@@ -47,6 +54,14 @@ def test_list_zones(self):
4754
def test_list_records(self):
4855
zone = self.driver.list_zones()[0]
4956
records = self.driver.list_records(zone=zone)
57+
58+
sent = GandiMockHttp.history.pop()
59+
self.assertEqual(sent.method, "POST")
60+
self.assertEqual(sent.url, "/xmlrpc/")
61+
data = sent.body.replace(">/n<", "><")
62+
self.assertIn("<methodName>domain.zone.record.list</", data)
63+
self.assertIn("<value><int>47234</int></", data)
64+
5065
self.assertEqual(len(records), 4)
5166

5267
record = records[1]
@@ -65,6 +80,14 @@ def test_list_records(self):
6580

6681
def test_get_zone(self):
6782
zone = self.driver.get_zone(zone_id="47234")
83+
84+
sent = GandiMockHttp.history.pop()
85+
self.assertEqual(sent.method, "POST")
86+
self.assertEqual(sent.url, "/xmlrpc/")
87+
data = sent.body.replace(">/n<", "><")
88+
self.assertIn("<methodName>domain.zone.info</", data)
89+
self.assertIn("<value><int>47234</int></", data)
90+
6891
self.assertEqual(zone.id, "47234")
6992
self.assertEqual(zone.type, "master")
7093
self.assertEqual(zone.domain, "t.com")
@@ -119,18 +142,39 @@ def test_get_record_record_does_not_exist(self):
119142

120143
def test_create_zone(self):
121144
zone = self.driver.create_zone(domain="t.com", type="master", ttl=None, extra=None)
145+
146+
sent = GandiMockHttp.history.pop()
147+
self.assertEqual(sent.method, "POST")
148+
self.assertEqual(sent.url, "/xmlrpc/")
149+
data = sent.body.replace(">/n<", "><")
150+
self.assertIn("<methodName>domain.zone.create</", data)
151+
self.assertIn("<value><string>t.com</string></", data)
152+
122153
self.assertEqual(zone.id, "47234")
123154
self.assertEqual(zone.domain, "t.com")
124155

125156
def test_update_zone(self):
126-
zone = self.driver.get_zone(zone_id="47234")
127-
zone = self.driver.update_zone(zone, domain="t.com")
157+
pre_zone = self.driver.get_zone(zone_id="47234")
158+
zone = self.driver.update_zone(pre_zone, domain="other.com")
159+
160+
sent = GandiMockHttp.history.pop()
161+
self.assertEqual(sent.method, "POST")
162+
self.assertEqual(sent.url, "/xmlrpc/")
163+
data = sent.body.replace(">/n<", "><")
164+
self.assertIn("<methodName>domain.zone.update</", data)
165+
self.assertIn("<value><int>47234</int></", data)
166+
self.assertIn("<value><string>other.com</string></", data)
167+
168+
self.assertEqual(pre_zone.domain, "t.com")
169+
128170
self.assertEqual(zone.id, "47234")
129171
self.assertEqual(zone.type, "master")
130-
self.assertEqual(zone.domain, "t.com")
172+
self.assertEqual(zone.domain, "other.com")
131173

132174
def test_create_record(self):
133175
zone = self.driver.list_zones()[0]
176+
GandiMockHttp.history.clear()
177+
134178
record = self.driver.create_record(
135179
name="www",
136180
zone=zone,
@@ -139,6 +183,19 @@ def test_create_record(self):
139183
extra={"ttl": 30},
140184
)
141185

186+
# [0] domain.version.new
187+
# [1] domain.zone.record.add
188+
# [2] domain.version.set
189+
sent = GandiMockHttp.history[1]
190+
self.assertEqual(sent.method, "POST")
191+
self.assertEqual(sent.url, "/xmlrpc/")
192+
data = sent.body.replace(">/n<", "><")
193+
self.assertIn("<methodName>domain.zone.record.add</", data)
194+
self.assertIn(f"<value><int>{zone.id}</int></", data)
195+
self.assertIn("<value><string>www</string></", data)
196+
self.assertIn("<value><string>127.0.0.1</string></", data)
197+
self.assertIn("<value><int>30</int></", data)
198+
142199
self.assertEqual(record.id, "A:www")
143200
self.assertEqual(record.name, "www")
144201
self.assertEqual(record.zone, zone)
@@ -148,6 +205,7 @@ def test_create_record(self):
148205
def test_update_record(self):
149206
zone = self.driver.list_zones()[0]
150207
record = self.driver.list_records(zone=zone)[1]
208+
GandiMockHttp.history.clear()
151209

152210
params = {
153211
"record": record,
@@ -158,6 +216,21 @@ def test_update_record(self):
158216
}
159217
updated_record = self.driver.update_record(**params)
160218

219+
# [0] domain.version.new
220+
# [1] domain.zone.record.delete
221+
# [2] domain.zone.record.add
222+
# [3] domain.version.set
223+
sent = GandiMockHttp.history[2]
224+
self.assertEqual(sent.method, "POST")
225+
self.assertEqual(sent.url, "/xmlrpc/")
226+
data = sent.body.replace(">/n<", "><")
227+
self.assertIn("<methodName>domain.zone.record.add</", data)
228+
self.assertIn(f"<value><int>{zone.id}</int></", data)
229+
self.assertIn("<value><string>www</string></", data)
230+
self.assertIn("<value><string>A</string></", data)
231+
self.assertIn("<value><string>127.0.0.1</string></", data)
232+
self.assertIn("<value><int>30</int></", data)
233+
161234
self.assertEqual(record.data, "208.111.35.173")
162235

163236
self.assertEqual(updated_record.id, "A:www")
@@ -169,6 +242,14 @@ def test_update_record(self):
169242
def test_delete_zone(self):
170243
zone = self.driver.list_zones()[0]
171244
status = self.driver.delete_zone(zone=zone)
245+
246+
sent = GandiMockHttp.history.pop()
247+
self.assertEqual(sent.method, "POST")
248+
self.assertEqual(sent.url, "/xmlrpc/")
249+
data = sent.body.replace(">/n<", "><")
250+
self.assertIn("<methodName>domain.zone.delete</", data)
251+
self.assertIn(f"<value><int>{zone.id}</int></", data)
252+
172253
self.assertTrue(status)
173254

174255
def test_delete_zone_does_not_exist(self):
@@ -186,7 +267,22 @@ def test_delete_zone_does_not_exist(self):
186267
def test_delete_record(self):
187268
zone = self.driver.list_zones()[0]
188269
record = self.driver.list_records(zone=zone)[0]
270+
GandiMockHttp.history.clear()
271+
189272
status = self.driver.delete_record(record=record)
273+
274+
# [0] domain.version.new
275+
# [1] domain.zone.record.delete
276+
# [2] domain.version.set
277+
sent = GandiMockHttp.history[1]
278+
self.assertEqual(sent.method, "POST")
279+
self.assertEqual(sent.url, "/xmlrpc/")
280+
data = sent.body.replace(">/n<", "><")
281+
self.assertIn("<methodName>domain.zone.record.delete</", data)
282+
self.assertIn(f"<value><int>{zone.id}</int></", data)
283+
self.assertIn("<value><int>1</int></", data)
284+
self.assertIn(f"<value><string>{record.name}</string></", data)
285+
190286
self.assertTrue(status)
191287

192288
def test_delete_record_does_not_exist(self):
@@ -203,13 +299,14 @@ def test_delete_record_does_not_exist(self):
203299

204300
class GandiMockHttp(BaseGandiMockHttp):
205301
fixtures = DNSFileFixtures("gandi")
302+
keep_history = True
206303

207304
def _xmlrpc__domain_zone_create(self, method, url, body, headers):
208305
body = self.fixtures.load("create_zone.xml")
209306
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
210307

211308
def _xmlrpc__domain_zone_update(self, method, url, body, headers):
212-
body = self.fixtures.load("get_zone.xml")
309+
body = self.fixtures.load("update_zone.xml")
213310
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
214311

215312
def _xmlrpc__domain_zone_list(self, method, url, body, headers):

0 commit comments

Comments
 (0)