Merge lp:~therve/landscape-client/fake-package-installer into lp:~landscape/landscape-client/trunk

Proposed by Thomas Herve
Status: Merged
Approved by: Kevin McDermott
Approved revision: 358
Merged at revision: 359
Proposed branch: lp:~therve/landscape-client/fake-package-installer
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 155 lines (+129/-2)
3 files modified
landscape/manager/fakepackagemanager.py (+57/-0)
landscape/manager/tests/test_fakepackagemanager.py (+70/-0)
landscape/manager/tests/test_packagemanager.py (+2/-2)
To merge this branch: bzr merge lp:~therve/landscape-client/fake-package-installer
Reviewer Review Type Date Requested Status
Kevin McDermott (community) Approve
Free Ekanayaka (community) Approve
Review via email: mp+71312@code.launchpad.net

Description of the change

This is meant to be used on load-testing, so that we can create package activities against the clients which are running on the same machine. It's pretty basic right now, but we can enhance later if necessary (ie, require approvals, or fail sometimes).

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

Looks good, +1!

Out of curiosity do you plan to run a real "master" client on a machine alongside a bunch of fake ones? Otherwise I guess this fake will reply the right thing but won't actually modify the machine's state.

Revision history for this message
Free Ekanayaka (free.ekanayaka) :
review: Approve
Revision history for this message
Kevin McDermott (bigkevmcd) wrote :

Looks fine to me, +1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'landscape/manager/fakepackagemanager.py'
2--- landscape/manager/fakepackagemanager.py 1970-01-01 00:00:00 +0000
3+++ landscape/manager/fakepackagemanager.py 2011-08-12 08:22:23 +0000
4@@ -0,0 +1,57 @@
5+import logging
6+import os
7+import random
8+
9+from twisted.internet.utils import getProcessOutput
10+from twisted.internet.defer import succeed
11+
12+from landscape.package.store import PackageStore
13+from landscape.package.changer import PackageChanger
14+from landscape.package.releaseupgrader import ReleaseUpgrader
15+from landscape.manager.plugin import ManagerPlugin
16+from landscape.manager.manager import SUCCEEDED
17+
18+
19+class FakePackageManager(ManagerPlugin):
20+
21+ run_interval = 1800
22+ randint = random.randint
23+
24+ def register(self, registry):
25+ super(FakePackageManager, self).register(registry)
26+ self.config = registry.config
27+
28+ registry.register_message("change-packages",
29+ self.handle_change_packages)
30+ registry.register_message("change-package-locks",
31+ self.handle_change_package_locks)
32+ registry.register_message("release-upgrade",
33+ self.handle_release_upgrade)
34+
35+ def _handle(self, response):
36+ delay = self.randint(30, 300)
37+ self.registry.reactor.call_later(
38+ delay, self.manager.broker.send_message, response, urgent=True)
39+
40+ def handle_change_packages(self, message):
41+ response = {"type": "change-packages-result",
42+ "operation-id": message.get("operation-id"),
43+ "result-code": 1,
44+ "result-text": "OK done."}
45+ return self._handle(response)
46+
47+ def handle_change_package_locks(self, message):
48+ response = {"type": "operation-result",
49+ "operation-id": message.get("operation-id"),
50+ "status": SUCCEEDED,
51+ "result-text": "Package locks successfully changed.",
52+ "result-code": 0}
53+ return self._handle(response)
54+
55+ def handle_release_upgrade(self, message):
56+ response = {"type": "operation-result",
57+ "operation-id": message.get("operation-id"),
58+ "status": SUCCEEDED,
59+ "result-text": "Successful release upgrade.",
60+ "result-code": 0}
61+ return self._handle(response)
62
63=== added file 'landscape/manager/tests/test_fakepackagemanager.py'
64--- landscape/manager/tests/test_fakepackagemanager.py 1970-01-01 00:00:00 +0000
65+++ landscape/manager/tests/test_fakepackagemanager.py 2011-08-12 08:22:23 +0000
66@@ -0,0 +1,70 @@
67+from landscape.manager.plugin import SUCCEEDED
68+
69+from landscape.manager.fakepackagemanager import FakePackageManager
70+from landscape.tests.helpers import LandscapeTest, ManagerHelper
71+
72+
73+class FakePackageManagerTest(LandscapeTest):
74+ """Tests for the fake package manager plugin."""
75+
76+ helpers = [ManagerHelper]
77+
78+ def setUp(self):
79+ super(FakePackageManagerTest, self).setUp()
80+ self.package_manager = FakePackageManager()
81+ self.package_manager.randint = lambda x, y: 0
82+
83+ def test_handle_change_packages(self):
84+ """
85+ L{FakePackageManager} is able to handle a C{change-packages} message,
86+ creating a C{change-packages-result} in response.
87+ """
88+ self.manager.add(self.package_manager)
89+ service = self.broker_service
90+ service.message_store.set_accepted_types(["change-packages-result"])
91+ message = {"type": "change-packages", "operation-id": 1}
92+ self.manager.dispatch_message(message)
93+ self.manager.reactor.advance(1)
94+
95+ self.assertMessages(service.message_store.get_pending_messages(),
96+ [{"type": "change-packages-result",
97+ "result-text": "OK done.",
98+ "result-code": 1, "operation-id": 1}])
99+
100+ def test_handle_change_package_locks(self):
101+ """
102+ L{FakePackageManager} is able to handle a C{change-package-locks}
103+ message, creating a C{operation-result} in response.
104+ """
105+ self.manager.add(self.package_manager)
106+ service = self.broker_service
107+ service.message_store.set_accepted_types(["operation-result"])
108+ message = {"type": "change-package-locks", "operation-id": 1}
109+ self.manager.dispatch_message(message)
110+ self.manager.reactor.advance(1)
111+
112+ self.assertMessages(service.message_store.get_pending_messages(),
113+ [{"type": "operation-result",
114+ "result-text":
115+ "Package locks successfully changed.",
116+ "result-code": 0, "status": SUCCEEDED,
117+ "operation-id": 1}])
118+
119+ def test_handle_release_upgrade(self):
120+ """
121+ L{FakePackageManager} is able to handle a C{release-upgrade} message,
122+ creating a C{operation-result} in response.
123+ """
124+ self.manager.add(self.package_manager)
125+ service = self.broker_service
126+ service.message_store.set_accepted_types(["operation-result"])
127+ message = {"type": "release-upgrade", "operation-id": 1}
128+ self.manager.dispatch_message(message)
129+ self.manager.reactor.advance(1)
130+
131+ self.assertMessages(service.message_store.get_pending_messages(),
132+ [{"type": "operation-result",
133+ "result-text":
134+ "Successful release upgrade.",
135+ "result-code": 0, "status": SUCCEEDED,
136+ "operation-id": 1}])
137
138=== modified file 'landscape/manager/tests/test_packagemanager.py'
139--- landscape/manager/tests/test_packagemanager.py 2011-07-05 05:09:11 +0000
140+++ landscape/manager/tests/test_packagemanager.py 2011-08-12 08:22:23 +0000
141@@ -13,12 +13,12 @@
142
143
144 class PackageManagerTest(LandscapeTest):
145- """Tests for the temperature plugin."""
146+ """Tests for the package manager plugin."""
147
148 helpers = [EnvironSaverHelper, ManagerHelper]
149
150 def setUp(self):
151- """Initialize test helpers and create a sample thermal zone."""
152+ """Initialize test helpers and create a sample package store."""
153 super(PackageManagerTest, self).setUp()
154 self.package_store = PackageStore(os.path.join(self.data_path,
155 "package/database"))

Subscribers

People subscribed via source and target branches

to all changes: