Merge lp:~therve/landscape-client/remove-recorder into lp:~landscape/landscape-client/trunk

Proposed by Thomas Herve
Status: Merged
Approved by: Geoff Teale
Approved revision: 481
Merged at revision: 479
Proposed branch: lp:~therve/landscape-client/remove-recorder
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 730 lines (+14/-493)
16 files modified
landscape/broker/config.py (+0/-7)
landscape/broker/exchange.py (+5/-12)
landscape/broker/service.py (+2/-8)
landscape/broker/tests/test_exchange.py (+0/-58)
landscape/broker/tests/test_store.py (+1/-0)
landscape/broker/tests/test_transport.py (+2/-125)
landscape/broker/transport.py (+2/-68)
landscape/player/__init__.py (+0/-5)
landscape/player/player.py (+0/-34)
landscape/player/reader.py (+0/-24)
landscape/player/service.py (+0/-37)
landscape/player/tests/test_player.py (+0/-58)
landscape/player/tests/test_reader.py (+0/-42)
landscape/upgraders/__init__.py (+2/-4)
landscape/upgraders/player.py (+0/-3)
scripts/landscape-player (+0/-8)
To merge this branch: bzr merge lp:~therve/landscape-client/remove-recorder
Reviewer Review Type Date Requested Status
Geoff Teale (community) Approve
Free Ekanayaka (community) Approve
Review via email: mp+96308@code.launchpad.net

Description of the change

There were 2 revisions basically to remove.

To post a comment you must log in.
Revision history for this message
Free Ekanayaka (free.ekanayaka) wrote :

Neat, +1!

review: Approve
Revision history for this message
Geoff Teale (tealeg) wrote :

+1, nothing controversial here.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'landscape/broker/config.py'
2--- landscape/broker/config.py 2012-02-24 18:37:30 +0000
3+++ landscape/broker/config.py 2012-03-07 08:45:23 +0000
4@@ -20,10 +20,6 @@
5 def exchange_store_path(self):
6 return os.path.join(self.data_path, "exchange.database")
7
8- @property
9- def record_directory(self):
10- return os.path.join(self.data_path, "exchanges")
11-
12 def make_parser(self):
13 """Parser factory for broker-specific options.
14
15@@ -38,7 +34,6 @@
16 - C{https_proxy}
17 - C{cloud}
18 - C{otp}
19- - C{record}
20 - C{provisioning_otp}
21 """
22 parser = super(BrokerConfiguration, self).make_parser()
23@@ -72,8 +67,6 @@
24 parser.add_option("--tags",
25 help="Comma separated list of tag names to be sent "
26 "to the server.")
27- parser.add_option("--record", action="store_true",
28- help="Record data sent to the server on filesystem.")
29 parser.add_option("--provisioning-otp", default="",
30 help="The OTP to use for a provisioned machine.")
31
32
33=== modified file 'landscape/broker/exchange.py'
34--- landscape/broker/exchange.py 2012-03-05 14:11:42 +0000
35+++ landscape/broker/exchange.py 2012-03-07 08:45:23 +0000
36@@ -111,10 +111,6 @@
37 self.schedule_exchange(urgent=True)
38 return message_id
39
40- def send_at(self, offset, messages):
41- self._exchange_id = self._reactor.call_later(
42- offset, self.exchange, messages)
43-
44 def start(self):
45 """Start scheduling exchanges. The first one will be urgent."""
46 self.schedule_exchange(urgent=True)
47@@ -174,7 +170,7 @@
48 self._urgent_exchange_interval)
49 self._config.write()
50
51- def exchange(self, messages=None):
52+ def exchange(self):
53 """Send pending messages to the server and process responses.
54
55 An C{pre-exchange} reactor event will be emitted just before the
56@@ -195,7 +191,7 @@
57
58 self._reactor.fire("pre-exchange")
59
60- payload = self.make_payload(messages)
61+ payload = self.make_payload()
62
63 start_time = self._create_time()
64 if self._urgent_exchange:
65@@ -275,7 +271,7 @@
66 def _notify_impending_exchange(self):
67 self._reactor.fire("impending-exchange")
68
69- def make_payload(self, messages=None):
70+ def make_payload(self):
71 """Return a dict representing the complete exchange payload.
72
73 The payload will contain all pending messages eligible for
74@@ -284,11 +280,8 @@
75 """
76 store = self._message_store
77 accepted_types_digest = self._hash_types(store.get_accepted_types())
78- if messages is None:
79- messages = store.get_pending_messages(self._max_messages)
80- total_messages = store.count_pending_messages()
81- else:
82- total_messages = len(messages)
83+ messages = store.get_pending_messages(self._max_messages)
84+ total_messages = store.count_pending_messages()
85 if messages:
86 # Each message is tagged with the API that the client was
87 # using at the time the message got added to the store. The
88
89=== modified file 'landscape/broker/service.py'
90--- landscape/broker/service.py 2012-02-22 01:46:37 +0000
91+++ landscape/broker/service.py 2012-03-07 08:45:23 +0000
92@@ -5,7 +5,7 @@
93 from landscape.service import LandscapeService, run_landscape_service
94 from landscape.broker.registration import RegistrationHandler, Identity
95 from landscape.broker.config import BrokerConfiguration
96-from landscape.broker.transport import HTTPTransport, PayloadRecorder
97+from landscape.broker.transport import HTTPTransport
98 from landscape.broker.exchange import MessageExchange
99 from landscape.broker.exchangestore import ExchangeStore
100 from landscape.broker.ping import Pinger
101@@ -48,14 +48,8 @@
102 config.data_path, "%s.bpickle" % (self.service_name,))
103 super(BrokerService, self).__init__(config)
104
105- if config.record is not None:
106- self.payload_recorder = PayloadRecorder(config.record_directory)
107- else:
108- self.payload_recorder = None
109-
110 self.transport = self.transport_factory(
111- self.reactor, config.url, config.ssl_public_key,
112- self.payload_recorder)
113+ self.reactor, config.url, config.ssl_public_key)
114 self.message_store = get_default_message_store(
115 self.persist, config.message_store_path)
116 self.identity = Identity(self.config, self.persist)
117
118=== modified file 'landscape/broker/tests/test_exchange.py'
119--- landscape/broker/tests/test_exchange.py 2011-07-15 21:44:42 +0000
120+++ landscape/broker/tests/test_exchange.py 2012-03-07 08:45:23 +0000
121@@ -873,64 +873,6 @@
122 self.assertTrue(len(ids_after) == len(ids_before) - 1)
123 self.assertFalse('234567' in ids_after)
124
125- def test_make_payload_default_messages(self):
126- """
127- When messages are not passed in to L{make_payload}, L{make_payload}
128- should retrieve messages from the message store.
129- """
130- self.mstore.set_accepted_types(["resynchronize"])
131- self.exchanger.send({"type": "resynchronize",
132- "operation-id": 13579})
133- payload = self.exchanger.make_payload()
134- self.assertEqual(1, len(payload["messages"]))
135- self.assertEqual(1, payload["total-messages"])
136-
137- def test_make_payload_non_default_messages(self):
138- """
139- When messages are passed in to L{make_payload}, L{make_payload}
140- should not retrieve messages from the message store. L{make_payload}
141- should correctly set the message count.
142- """
143- payload = self.exchanger.make_payload(
144- [{"type": "resynchronize",
145- "api": "2.1",
146- "operation-id": 24680},
147- {"type": "resynchronize",
148- "api": "2.1",
149- "operation-id": 24681}])
150- self.assertEqual(2, len(payload["messages"]))
151- self.assertEqual("resynchronize", payload["messages"][0]["type"])
152- self.assertEqual(2, payload["total-messages"])
153-
154- def test_exchange_with_messages(self):
155- """
156- L{exchange} should be able to pass messages to make_payload.
157- """
158- self.exchanger.exchange([{"type": "empty",
159- "timestamp": 0,
160- "api": SERVER_API}])
161- self.assertEqual(len(self.transport.payloads), 1)
162- messages = self.transport.payloads[0]["messages"]
163- self.assertEqual(messages, [{"type": "empty",
164- "timestamp": 0,
165- "api": SERVER_API}])
166-
167- def test_send_at_schedules_an_exchange(self):
168- """
169- L{send_at} should schedule an exchange at the specified time with
170- the supplied messages.
171- """
172- messages = [{"type": "empty",
173- "timestamp": 0,
174- "api": SERVER_API}]
175-
176- self.exchanger.send_at(338, messages)
177-
178- self.assertEqual(1, len(self.reactor._calls))
179- self.assertEqual(338, self.reactor._calls[0][0])
180- self.assertEqual(self.exchanger.exchange, self.reactor._calls[0][1])
181- self.assertEqual(messages, self.reactor._calls[0][2][0])
182-
183
184 class AcceptedTypesMessageExchangeTest(LandscapeTest):
185
186
187=== modified file 'landscape/broker/tests/test_store.py'
188--- landscape/broker/tests/test_store.py 2011-07-14 15:43:11 +0000
189+++ landscape/broker/tests/test_store.py 2012-03-07 08:45:23 +0000
190@@ -176,6 +176,7 @@
191 self.store.add(dict(type=["data", "unaccepted"][i % 2],
192 data=str(i)))
193 self.store.set_pending_offset(2)
194+ il = [m["data"] for m in self.store.get_pending_messages(2)]
195 self.store.set_accepted_types(["data", "unaccepted"])
196 il = [m["data"] for m in self.store.get_pending_messages(20)]
197 self.assertEqual(il, map(str, [4, 6, 8, 1, 3, 5, 7, 9]))
198
199=== modified file 'landscape/broker/tests/test_transport.py'
200--- landscape/broker/tests/test_transport.py 2012-02-24 19:35:56 +0000
201+++ landscape/broker/tests/test_transport.py 2012-03-07 08:45:23 +0000
202@@ -1,13 +1,11 @@
203 import os
204
205 from landscape import VERSION
206-from landscape.broker.transport import HTTPTransport, PayloadRecorder
207+from landscape.broker.transport import HTTPTransport
208 from landscape.lib.fetch import PyCurlError
209-from landscape.lib.fs import create_file, read_file
210 from landscape.lib import bpickle
211
212-from landscape.tests.helpers import (
213- LandscapeTest, LogKeeperHelper, MockerTestCase)
214+from landscape.tests.helpers import LandscapeTest, LogKeeperHelper
215
216 from twisted.web import server, resource
217 from twisted.internet import reactor
218@@ -147,124 +145,3 @@
219 in self.logfile.getvalue())
220 result.addCallback(got_result)
221 return result
222-
223- def test_payload_recording_works(self):
224- """
225- When C{HTTPTransport} is configured with a payload recorder, exchanges
226- with the server should be saved to the filesystem.
227- """
228- path = self.makeDir()
229- recorder = PayloadRecorder(path)
230-
231- def static_filename():
232- return "filename"
233- recorder.get_payload_filename = static_filename
234-
235- transport = HTTPTransport(None, "http://localhost",
236- payload_recorder=recorder)
237-
238- transport._curl = fake_curl
239-
240- transport.exchange("pay load")
241-
242- file_path = os.path.join(path, static_filename())
243- self.assertEqual("pay load", bpickle.loads(read_file(file_path)))
244-
245- def test_exchange_works_without_payload_recording(self):
246- """
247- When C{HTTPTransport} is configured without a payload recorder,
248- exchanges with the server should still complete.
249- """
250- transport = HTTPTransport(None, "http://localhost")
251- self.called = False
252-
253- def fake_curl(param1, param2, param3):
254- """Stub out the curl network call."""
255- self.called = True
256-
257- class Curly(object):
258- def getinfo(self, param1):
259- return 200
260- return (Curly(), bpickle.dumps("pay load response"))
261-
262- transport._curl = fake_curl
263-
264- transport.exchange("pay load")
265-
266- self.assertTrue(self.called)
267-
268-
269-class PayloadRecorderTest(MockerTestCase):
270-
271- def test_get_payload_filename(self):
272- """
273- L{PayloadRecorder.get_payload_filename} should return a filename that
274- is equal to the number of seconds since it was created.
275- """
276- mock = self.mocker.replace("time.time")
277- mock()
278- self.mocker.result(0.0)
279- mock()
280- self.mocker.result(12.3456)
281- self.mocker.replay()
282- recorder = PayloadRecorder(None)
283-
284- payload_name = recorder.get_payload_filename()
285-
286- self.assertEqual("12.346", payload_name)
287-
288- def test_get_payload_filename_no_duplicates(self):
289- """
290- L{PayloadRecorder.get_payload_filename} should not generate duplicate
291- payload names.
292- """
293- mock = self.mocker.replace("time.time")
294- mock()
295- self.mocker.result(0.0)
296- mock()
297- self.mocker.result(12.345)
298- mock()
299- self.mocker.result(12.345)
300- self.mocker.replay()
301-
302- recorder = PayloadRecorder(None)
303-
304- payload_name_1 = recorder.get_payload_filename()
305- payload_name_2 = recorder.get_payload_filename()
306-
307- self.assertEqual("12.345", payload_name_1)
308- self.assertEqual("12.346", payload_name_2)
309-
310- def test_save(self):
311- """L{PayloadRecorder.save} should save the payload to the filesystem.
312- """
313- path = self.makeDir()
314- recorder = PayloadRecorder(path)
315-
316- def static_filename():
317- return "filename"
318- recorder.get_payload_filename = static_filename
319- recorder.save("payload data")
320- file_path = os.path.join(path, static_filename())
321- self.assertEqual("payload data", read_file(file_path))
322-
323- def test_create_destination_dir(self):
324- """
325- L{PayloadRecorder} should create the destination directory if it does
326- not exist.
327- """
328- path = self.makeDir()
329- os.rmdir(path)
330- PayloadRecorder(path)
331- self.assertTrue(os.path.isdir(path))
332-
333- def test_delete_old_payloads(self):
334- """
335- L{PayloadRecorder} should remove all files from the destination
336- directory before writing new files.
337- """
338- path = self.makeDir()
339- create_file(os.path.join(path, "one"), "one")
340- create_file(os.path.join(path, "two"), "two")
341- PayloadRecorder(path)
342- self.assertEqual([], os.listdir(path))
343
344=== modified file 'landscape/broker/transport.py'
345--- landscape/broker/transport.py 2012-02-27 19:14:53 +0000
346+++ landscape/broker/transport.py 2012-03-07 08:45:23 +0000
347@@ -1,5 +1,4 @@
348 """Low-level server communication."""
349-import os
350 import time
351 import logging
352 import pprint
353@@ -7,7 +6,6 @@
354 import pycurl
355
356 from landscape.lib.fetch import fetch
357-from landscape.lib.fs import create_file
358 from landscape.lib import bpickle
359 from landscape.log import format_delta
360 from landscape import SERVER_API, VERSION
361@@ -18,15 +16,12 @@
362
363 @param url: URL of the remote Landscape server message system.
364 @param pubkey: SSH public key used for secure communication.
365- @param payload_recorder: PayloadRecorder used for recording exchanges
366- with the server. If C{None}, exchanges will not be recorded.
367 """
368
369- def __init__(self, reactor, url, pubkey=None, payload_recorder=None):
370+ def __init__(self, reactor, url, pubkey=None):
371 self._reactor = reactor
372 self._url = url
373 self._pubkey = pubkey
374- self._payload_recorder = payload_recorder
375
376 def get_url(self):
377 """Get the URL of the remote message system."""
378@@ -61,8 +56,6 @@
379
380 """
381 spayload = bpickle.dumps(payload)
382- if self._payload_recorder is not None:
383- self._payload_recorder.save(spayload)
384 try:
385 start_time = time.time()
386 if logging.getLogger().getEffectiveLevel() <= logging.DEBUG:
387@@ -92,70 +85,11 @@
388 return response
389
390
391-class PayloadRecorder(object):
392- """
393- L{PayloadRecorder} records client exchanges with the server to disk for
394- later playback.
395-
396- Exchange payloads will be stored one per file, where the file name is
397- the elapsed time since the client was started.
398-
399- @param destination_dir - The directory to record exchanges in.
400- """
401-
402- def __init__(self, destination_dir):
403- self._time_offset = time.time()
404- self._destination_dir = destination_dir
405- self._last_payload_time = -1
406- if self._destination_dir is not None:
407- self._create_destination_dir(self._destination_dir)
408- self._delete_old_payloads()
409-
410- def _create_destination_dir(self, destination_dir):
411- """Create the destination directory if it does not exist.
412-
413- @param destination_dir: The directory to be created.
414- """
415- if not os.path.exists(destination_dir):
416- os.mkdir(destination_dir)
417-
418- def _delete_old_payloads(self):
419- """Delete payloads lying around from a previous session."""
420- for filename in os.listdir(self._destination_dir):
421- file_path = os.path.join(self._destination_dir, filename)
422- if os.path.isfile(file_path):
423- os.unlink(file_path)
424-
425- def save(self, payload):
426- """Persist the given payload to disk.
427-
428- @param payload: The payload to be persisted.
429- """
430- payload_name = self.get_payload_filename()
431- create_file(os.path.join(self._destination_dir, payload_name),
432- payload)
433-
434- def get_payload_filename(self):
435- """
436- Generate a payload filename. This method ensures that payloads
437- will have a unique name.
438- """
439- payload_time = time.time() - self._time_offset
440- last_payload_time = '%.3f' % self._last_payload_time
441- this_payload_time = '%.3f' % payload_time
442- if last_payload_time == this_payload_time:
443- payload_time = payload_time + 0.001
444- self._last_payload_time = payload_time
445- return '%.3f' % payload_time
446-
447-
448 class FakeTransport(object):
449 """Fake transport for testing purposes."""
450
451- def __init__(self, reactor=None, url=None, pubkey=None,
452- payload_recorder=None):
453+ def __init__(self, reactor=None, url=None, pubkey=None):
454 self._pubkey = pubkey
455- self._payload_recorder = payload_recorder
456 self.payloads = []
457 self.responses = []
458 self._current_response = 0
459
460=== removed directory 'landscape/player'
461=== removed file 'landscape/player/__init__.py'
462--- landscape/player/__init__.py 2011-06-30 15:27:36 +0000
463+++ landscape/player/__init__.py 1970-01-01 00:00:00 +0000
464@@ -1,5 +0,0 @@
465-"""
466-The player package contains functionality used for playing back previously
467-recorded server exchanges. This package is not used when landscape-client
468-is running normally. It is used for Landscape Server load testing.
469-"""
470
471=== removed file 'landscape/player/player.py'
472--- landscape/player/player.py 2011-07-18 13:35:59 +0000
473+++ landscape/player/player.py 1970-01-01 00:00:00 +0000
474@@ -1,34 +0,0 @@
475-from landscape.lib import bpickle
476-
477-
478-class PayloadPlayer(object):
479- """A player that replays old messages.
480-
481- @param reader - A L{PayloadReader} that fetches exchanges from the
482- filesystem.
483- @param exchange - The L{MessageExchange} that messages will be played back
484- to.
485- @param playback_speed - The speed multiplier at which to play back messages
486- at.
487- """
488- def __init__(self, reader, exchange, playback_speed):
489- self._exchange = exchange
490- self._reader = reader
491- self._data = []
492- self._playback_speed = playback_speed
493-
494- def load(self):
495- """Retrieve exchanges from the L{PayloadReader} and sort them."""
496- data = self._reader.load()
497- self._data = sorted(data, key=lambda x: float(x[0]))
498-
499- def play(self):
500- """
501- Schedule events with the L{MessageExchange} that will replay the
502- messages at the expected time offset.
503- """
504- for offset_str, payload in self._data:
505- offset = float(offset_str) / self._playback_speed
506- exchange = bpickle.loads(payload)
507- if len(exchange['messages']) > 0:
508- self._exchange.send_at(offset, exchange['messages'])
509
510=== removed file 'landscape/player/reader.py'
511--- landscape/player/reader.py 2011-07-22 16:14:30 +0000
512+++ landscape/player/reader.py 1970-01-01 00:00:00 +0000
513@@ -1,24 +0,0 @@
514-import os
515-
516-from landscape.lib.fs import read_file
517-
518-
519-class PayloadReader(object):
520- """A reader that reads old exchanges from the filesystem.
521-
522- @param source_dir - The directory to read old exchanges from
523- """
524- def __init__(self, source_dir):
525- self._source_dir = source_dir
526-
527- def load(self):
528- """Load old exchanges from the filesystem.
529-
530- @return: file data in the format [(filename1, file_contents1),
531- (filename2, file_contents2)]
532- """
533- result = []
534- for filename in sorted(os.listdir(self._source_dir)):
535- full_path = os.path.join(self._source_dir, filename)
536- result.append((filename, read_file(full_path)))
537- return result
538
539=== removed file 'landscape/player/service.py'
540--- landscape/player/service.py 2011-07-15 22:06:36 +0000
541+++ landscape/player/service.py 1970-01-01 00:00:00 +0000
542@@ -1,37 +0,0 @@
543-"""Deployment code for the player."""
544-
545-from landscape.service import run_landscape_service
546-from landscape.broker.config import BrokerConfiguration
547-from landscape.broker.service import BrokerService
548-from landscape.player.player import PayloadPlayer
549-from landscape.player.reader import PayloadReader
550-
551-
552-class PlaybackService(BrokerService):
553- service_name = "player"
554-
555- def __init__(self, config):
556- """
557- @param config: A L{BrokerConfiguration}.
558- """
559- # Disable recording while in playback mode.
560- config.record = None
561- super(PlaybackService, self).__init__(config)
562-
563- self.payload_reader = PayloadReader(config.record_directory)
564- self.player = PayloadPlayer(self.payload_reader, self.exchanger, 1)
565-
566- def startService(self):
567- """Start the broker.
568-
569- Start the L{MessageExchange}, L{Pinger} and L{Player} services.
570- """
571- self.exchanger.start()
572- self.pinger.start()
573- self.player.load()
574- self.player.play()
575-
576-
577-def run(args):
578- """Run the application, given some command line arguments."""
579- run_landscape_service(BrokerConfiguration, PlaybackService, args)
580
581=== removed directory 'landscape/player/tests'
582=== removed file 'landscape/player/tests/__init__.py'
583=== removed file 'landscape/player/tests/test_player.py'
584--- landscape/player/tests/test_player.py 2011-07-14 15:43:11 +0000
585+++ landscape/player/tests/test_player.py 1970-01-01 00:00:00 +0000
586@@ -1,58 +0,0 @@
587-from landscape.lib import bpickle
588-from landscape.player.player import PayloadPlayer
589-from landscape.tests.helpers import LandscapeTest
590-
591-
592-class PayloadReaderTest(LandscapeTest):
593-
594- def test_load_calls_reader(self):
595- """Exchanges should be loaded from C{PayloadPlayer}."""
596- calls = []
597-
598- class Reader(object):
599- def __init__(self, calls):
600- self.calls = calls
601-
602- def load(self):
603- self.calls.append(True)
604- return []
605-
606- player = PayloadPlayer(Reader(calls), None, 1)
607- player.load()
608- self.assertTrue(calls[0])
609-
610- def test_load_orders_data(self):
611- """Exchanges should be ordered according to time offset."""
612-
613- class Reader(object):
614-
615- def load(self):
616- return [
617- ("55.55", bpickle.dumps({"type": "message type"})),
618- ("6.66", bpickle.dumps({"type": "message type 2"})),
619- ]
620-
621- player = PayloadPlayer(Reader(), None, 1)
622- player.load()
623- self.assertEqual("6.66", player._data[0][0])
624-
625- def test_play_should_schedule_exchanges(self):
626- """
627- Exchanges with messages should be scheduled for delivery.
628- """
629- calls = []
630-
631- class Exchange(object):
632-
633- def __init__(self, calls):
634- self.calls = calls
635-
636- def send_at(self, offset, messages):
637- self.calls.append((offset, messages))
638-
639- player = PayloadPlayer(None, Exchange(calls), 1)
640- player._data = [("6", bpickle.dumps({"messages": ["in a bottle"]}))]
641- player.play()
642-
643- self.assertEqual(6, int(calls[0][0]))
644- self.assertEqual(["in a bottle"], calls[0][1])
645
646=== removed file 'landscape/player/tests/test_reader.py'
647--- landscape/player/tests/test_reader.py 2011-07-18 13:35:59 +0000
648+++ landscape/player/tests/test_reader.py 1970-01-01 00:00:00 +0000
649@@ -1,42 +0,0 @@
650-from landscape.broker.transport import PayloadRecorder
651-from landscape.player.reader import PayloadReader
652-from landscape.tests.helpers import LandscapeTest
653-
654-
655-class PayloadReaderTest(LandscapeTest):
656-
657- def test_load_returns_filename(self):
658- """
659- Each server exchange is saved in a file with the filename being the
660- offset in seconds since recording started. C{PayloadPlayer.load()}
661- should return the filename in addition to the file contents.
662- """
663- path = self.makeDir()
664- recorder = PayloadRecorder(path)
665-
666- def static_filename():
667- return "filename"
668- recorder.get_payload_filename = static_filename
669- recorder.save("payload data")
670-
671- reader = PayloadReader(path)
672- payloads = reader.load()
673-
674- self.assertEqual("filename", payloads[0][0])
675- self.assertEqual("payload data", payloads[0][1])
676-
677- def test_load_returns_multiple_files(self):
678- """
679- Multiple exchanges should be handled in the same manner as
680- a single server exchange.
681- """
682- path = self.makeDir()
683- recorder = PayloadRecorder(path)
684- recorder.save("payload data")
685- recorder.save("other data")
686-
687- reader = PayloadReader(path)
688- payloads = reader.load()
689-
690- self.assertEqual("payload data", payloads[0][1])
691- self.assertEqual("other data", payloads[1][1])
692
693=== modified file 'landscape/upgraders/__init__.py'
694--- landscape/upgraders/__init__.py 2011-07-15 21:44:42 +0000
695+++ landscape/upgraders/__init__.py 2012-03-07 08:45:23 +0000
696@@ -1,4 +1,4 @@
697-from landscape.upgraders import legacy, broker, monitor, package, player
698+from landscape.upgraders import legacy, broker, monitor, package
699
700
701 UPGRADE_MANAGERS = {
702@@ -6,6 +6,4 @@
703 "legacy": legacy.upgrade_manager,
704 "broker": broker.upgrade_manager,
705 "monitor": monitor.upgrade_manager,
706- "package": package.upgrade_manager,
707- "player": player.upgrade_manager,
708- }
709+ "package": package.upgrade_manager}
710
711=== removed file 'landscape/upgraders/player.py'
712--- landscape/upgraders/player.py 2011-06-30 15:27:36 +0000
713+++ landscape/upgraders/player.py 1970-01-01 00:00:00 +0000
714@@ -1,3 +0,0 @@
715-from landscape.patch import UpgradeManager
716-
717-upgrade_manager = UpgradeManager()
718
719=== removed file 'scripts/landscape-player'
720--- scripts/landscape-player 2011-06-30 15:27:36 +0000
721+++ scripts/landscape-player 1970-01-01 00:00:00 +0000
722@@ -1,8 +0,0 @@
723-#!/usr/bin/python
724-import sys, os
725-if os.path.dirname(os.path.abspath(sys.argv[0])) == os.path.abspath("scripts"):
726- sys.path.insert(0, "./")
727-
728-from landscape.player.service import run
729-
730-run(sys.argv)

Subscribers

People subscribed via source and target branches

to all changes: