1
"""Tests for launching a new server customised for juju using Nova"""
5
from twisted.internet import (
9
from juju import errors
10
from juju.lib import (
14
from juju.machine import (
18
from juju.providers.openstack import (
23
class MockedLaunchProvider(tests.MockedProvider):
25
def launch(self, machine_id, master=False):
26
constraint_set = constraints.ConstraintSet(self.provider_type)
28
'machine-id': machine_id,
29
'constraints': constraint_set.load({}),
31
return launch.NovaLaunchMachine.launch(self, details, master)
33
def expect_launch_setup(self, machine_id):
34
self.port_manager.ensure_groups(machine_id)
35
self.mocker.result(defer.succeed(["juju-x", "juju-y"]))
36
self.nova.list_flavors()
37
self.mocker.result(defer.succeed([
38
{'id': 1, 'name': "standard.xsmall"},
41
def expect_run_server(self, machine_id, response):
43
name="juju testing instance " + machine_id,
46
security_group_names=["juju-x", "juju-y"],
49
self.mocker.result(defer.succeed(response))
51
def expect_available_floating_ip(self, server_id):
52
self.nova.list_floating_ips()
53
self.mocker.result(defer.succeed([
54
{'instance_id': None, 'ip': "198.162.1.0"},
56
self.nova.add_floating_ip(server_id, "198.162.1.0")
57
self.mocker.result(defer.succeed(None))
60
class NovaLaunchMachineTests(testing.TestCase):
62
def test_launch_requires_default_image_id(self):
63
config = dict(MockedLaunchProvider.default_config)
64
del config['default-image-id']
65
provider = MockedLaunchProvider(self.mocker, config)
66
provider.expect_zookeeper_machines(1000)
68
deferred = provider.launch("1")
69
return self.assertFailure(deferred, errors.ProviderError)
71
def test_start_machine(self):
72
provider = MockedLaunchProvider(self.mocker)
73
provider.expect_zookeeper_machines(1000)
74
provider.expect_launch_setup("1")
75
provider.expect_run_server("1", response={
77
'addresses': {'public': []},
80
return provider.launch("1")
82
def test_start_machine_delay(self):
83
provider = MockedLaunchProvider(self.mocker)
84
provider.config["use-floating-ip"] = True
85
provider.expect_zookeeper_machines(1000)
86
provider.expect_launch_setup("1")
87
provider.expect_run_server("1", response={
90
provider.nova.get_server(1001)
91
self.mocker.result(defer.succeed({
93
'addresses': {'public': []},
95
provider.expect_available_floating_ip(1001)
96
self.mocker.result(defer.succeed(None))
98
self.patch(launch.NovaLaunchMachine, "_DELAY_FOR_ADDRESSES", 0)
99
return provider.launch("1")
101
def test_start_machine_master(self):
102
provider = MockedLaunchProvider(self.mocker)
103
provider.expect_swift_public_object_url("juju_master_id")
104
provider.expect_launch_setup("0")
105
provider.expect_run_server("0", response={
107
'addresses': {'public': []},
109
provider.expect_swift_put("juju_master_id", "1000")
110
provider.provider_actions.save_state({'zookeeper-instances': [1000]})
111
self.mocker.result(defer.succeed(None))
113
return provider.launch("0", master=True)