1
from twisted.internet.defer import fail, succeed
3
from ensemble.errors import (
4
EnvironmentNotFound, EnvironmentPending, MachineNotFound, MachineNotReady)
5
from ensemble.lib.testing import TestCase
6
from ensemble.providers.common.findzookeepers import find_zookeepers
9
class DummyProvider(object):
11
def __init__(self, state):
15
return succeed(self.state)
18
class FindZookeepersTest(TestCase):
20
def test_no_state(self):
21
provider = DummyProvider(False)
22
d = find_zookeepers(provider, self.mocker.mock())
23
self.assertFailure(d, EnvironmentNotFound)
26
def test_empty_state(self):
27
provider = DummyProvider({})
28
d = find_zookeepers(provider, self.mocker.mock())
29
self.assertFailure(d, EnvironmentNotFound)
32
def test_get_machine_error_aborts(self):
33
provider = DummyProvider({"zookeeper-instances": ["porter", "carter"]})
34
get_machine = self.mocker.mock()
35
get_machine(provider, "porter")
37
class SomeError(Exception):
39
self.mocker.result(fail(SomeError()))
42
d = find_zookeepers(provider, get_machine)
43
self.assertFailure(d, SomeError)
46
def test_bad_machine(self):
47
provider = DummyProvider({"zookeeper-instances": ["porter"]})
48
get_machine = self.mocker.mock()
49
get_machine(provider, "porter")
50
self.mocker.result(fail(MachineNotFound("porter")))
53
d = find_zookeepers(provider, get_machine)
54
self.assertFailure(d, EnvironmentNotFound)
57
def test_pending_machine(self):
58
provider = DummyProvider({"zookeeper-instances": ["porter"]})
59
get_machine = self.mocker.mock()
60
get_machine(provider, "porter")
61
self.mocker.result(fail(MachineNotReady("porter")))
64
d = find_zookeepers(provider, get_machine)
65
self.assertFailure(d, EnvironmentPending)
68
def test_pending_overrides_bad(self):
69
provider = DummyProvider({"zookeeper-instances": ["porter", "carter"]})
70
get_machine = self.mocker.mock()
71
get_machine(provider, "porter")
72
self.mocker.result(fail(MachineNotReady("porter")))
73
get_machine(provider, "carter")
74
self.mocker.result(fail(MachineNotFound("carter")))
77
d = find_zookeepers(provider, get_machine)
78
self.assertFailure(d, EnvironmentPending)
81
def test_good_machine(self):
82
provider = DummyProvider({"zookeeper-instances": ["porter"]})
83
get_machine = self.mocker.mock()
84
get_machine(provider, "porter")
86
self.mocker.result(succeed(machine))
89
d = find_zookeepers(provider, get_machine)
91
def verify_machine(result):
92
self.assertEquals(result, [machine])
93
d.addCallback(verify_machine)
96
def test_first_good_always_wins(self):
97
provider = DummyProvider(
98
{"zookeeper-instances": ["porter", "carter", "miller", "baker"]})
99
get_machine = self.mocker.mock()
100
get_machine(provider, "porter")
101
self.mocker.result(fail(MachineNotFound("porter")))
102
get_machine(provider, "carter")
103
self.mocker.result(fail(MachineNotReady("carter")))
104
get_machine(provider, "miller")
106
self.mocker.result(succeed(machine))
109
d = find_zookeepers(provider, get_machine)
111
def verify_machine(result):
112
self.assertEquals(result, [machine])
113
d.addCallback(verify_machine)