3
3
from landscape import VERSION
4
from landscape.broker.transport import HTTPTransport, PayloadRecorder
4
from landscape.broker.transport import HTTPTransport
5
5
from landscape.lib.fetch import PyCurlError
6
from landscape.lib.fs import create_file, read_file
7
6
from landscape.lib import bpickle
9
from landscape.tests.helpers import (
10
LandscapeTest, LogKeeperHelper, MockerTestCase)
8
from landscape.tests.helpers import LandscapeTest, LogKeeperHelper
12
10
from twisted.web import server, resource
13
11
from twisted.internet import reactor
140
145
in self.logfile.getvalue())
141
146
result.addCallback(got_result)
144
def test_payload_recording_works(self):
146
When C{HTTPTransport} is configured with a payload recorder, exchanges
147
with the server should be saved to the filesystem.
149
path = self.makeDir()
150
recorder = PayloadRecorder(path)
152
def static_filename():
154
recorder.get_payload_filename = static_filename
156
transport = HTTPTransport("http://localhost",
157
payload_recorder=recorder)
159
def fake_curl(param1, param2, param3):
160
"""Stub out the curl network call."""
162
def getinfo(self, param1):
164
return (Curly(), bpickle.dumps("pay load response"))
165
transport._curl = fake_curl
167
transport.exchange("pay load")
169
file_path = os.path.join(path, static_filename())
170
self.assertEqual("pay load", bpickle.loads(read_file(file_path)))
172
def test_exchange_works_without_payload_recording(self):
174
When C{HTTPTransport} is configured without a payload recorder,
175
exchanges with the server should still complete.
177
transport = HTTPTransport("http://localhost")
180
def fake_curl(param1, param2, param3):
181
"""Stub out the curl network call."""
185
def getinfo(self, param1):
187
return (Curly(), bpickle.dumps("pay load response"))
188
transport._curl = fake_curl
190
transport.exchange("pay load")
192
self.assertTrue(self.called)
195
class PayloadRecorderTest(MockerTestCase):
197
def test_get_payload_filename(self):
199
L{PayloadRecorder.get_payload_filename} should return a filename that
200
is equal to the number of seconds since it was created.
202
mock = self.mocker.replace("time.time")
204
self.mocker.result(0.0)
206
self.mocker.result(12.3456)
208
recorder = PayloadRecorder(None)
210
payload_name = recorder.get_payload_filename()
212
self.assertEqual("12.346", payload_name)
214
def test_get_payload_filename_no_duplicates(self):
216
L{PayloadRecorder.get_payload_filename} should not generate duplicate
219
mock = self.mocker.replace("time.time")
221
self.mocker.result(0.0)
223
self.mocker.result(12.345)
225
self.mocker.result(12.345)
228
recorder = PayloadRecorder(None)
230
payload_name_1 = recorder.get_payload_filename()
231
payload_name_2 = recorder.get_payload_filename()
233
self.assertEqual("12.345", payload_name_1)
234
self.assertEqual("12.346", payload_name_2)
237
"""L{PayloadRecorder.save} should save the payload to the filesystem.
239
path = self.makeDir()
240
recorder = PayloadRecorder(path)
242
def static_filename():
244
recorder.get_payload_filename = static_filename
245
recorder.save("payload data")
246
file_path = os.path.join(path, static_filename())
247
self.assertEqual("payload data", read_file(file_path))
249
def test_create_destination_dir(self):
251
L{PayloadRecorder} should create the destination directory if it does
254
path = self.makeDir()
256
PayloadRecorder(path)
257
self.assertTrue(os.path.isdir(path))
259
def test_delete_old_payloads(self):
261
L{PayloadRecorder} should remove all files from the destination
262
directory before writing new files.
264
path = self.makeDir()
265
create_file(os.path.join(path, "one"), "one")
266
create_file(os.path.join(path, "two"), "two")
267
PayloadRecorder(path)
268
self.assertEqual([], os.listdir(path))