OLD | NEW |
| (Empty) |
1 from twisted.internet.defer import succeed | |
2 | |
3 from juju.errors import EnvironmentNotFound | |
4 from juju.lib.serializer import dump | |
5 from juju.lib.testing import TestCase | |
6 from juju.providers.orchestra import MachineProvider | |
7 from juju.providers.orchestra.machine import OrchestraMachine | |
8 | |
9 from .common import OrchestraTestMixin | |
10 | |
11 CONFIG = {"orchestra-server": "somewhe.re", | |
12 "storage-url": "http://somewhe.re/webdav", | |
13 "orchestra-user": "user", | |
14 "orchestra-pass": "pass", | |
15 "acquired-mgmt-class": "acquired", | |
16 "available-mgmt-class": "available"} | |
17 | |
18 | |
19 class FindZookeepersTest(TestCase, OrchestraTestMixin): | |
20 | |
21 def get_provider(self): | |
22 return MachineProvider("tetrascape", CONFIG) | |
23 | |
24 def mock_load_state(self, code, content): | |
25 self.mock_fs_get( | |
26 "http://somewhe.re/webdav/provider-state", code, content) | |
27 | |
28 def assert_no_environment(self): | |
29 provider = self.get_provider() | |
30 d = provider.get_zookeeper_machines() | |
31 self.assertFailure(d, EnvironmentNotFound) | |
32 return d | |
33 | |
34 def verify_no_environment(self, code, content): | |
35 self.mock_load_state(code, content) | |
36 self.mocker.replay() | |
37 return self.assert_no_environment() | |
38 | |
39 def test_no_state(self): | |
40 self.setup_mocks() | |
41 self.verify_no_environment(404, None) | |
42 | |
43 def test_empty_state(self): | |
44 self.setup_mocks() | |
45 self.verify_no_environment(200, dump([])) | |
46 | |
47 def test_no_hosts(self): | |
48 self.setup_mocks() | |
49 self.verify_no_environment(200, dump({"abc": 123})) | |
50 | |
51 def test_bad_instance(self): | |
52 self.setup_mocks() | |
53 self.mock_load_state(200, dump({"zookeeper-instances": ["foo"]})) | |
54 self.proxy_m.callRemote("get_systems") | |
55 self.mocker.result(succeed([])) | |
56 self.mocker.replay() | |
57 | |
58 return self.assert_no_environment() | |
59 | |
60 def _system(self, uid, name, mgmt_classes): | |
61 return {"uid": uid, | |
62 "name": name, | |
63 "mgmt_classes": mgmt_classes, | |
64 "netboot_enabled": True} | |
65 | |
66 def test_eventual_success(self): | |
67 self.setup_mocks() | |
68 self.mock_load_state(200, dump({ | |
69 "zookeeper-instances": ["bad", "foo", "missing", "bar"]})) | |
70 for _ in range(4): | |
71 self.proxy_m.callRemote("get_systems") | |
72 self.mocker.result(succeed([ | |
73 self._system("bad", "whatever", ["whatever"]), | |
74 self._system("foo", "foo", ["acquired"]), | |
75 self._system("bar", "bar", ["acquired"])])) | |
76 self.mocker.replay() | |
77 | |
78 provider = self.get_provider() | |
79 d = provider.get_zookeeper_machines() | |
80 | |
81 def verify_machine(machines): | |
82 (foo, bar) = machines | |
83 self.assertTrue(isinstance(foo, OrchestraMachine)) | |
84 self.assertEquals(foo.instance_id, "foo") | |
85 self.assertTrue(isinstance(bar, OrchestraMachine)) | |
86 self.assertEquals(bar.instance_id, "bar") | |
87 d.addCallback(verify_machine) | |
88 return d | |
OLD | NEW |