2011-01-25 14:01:22 -06:00
|
|
|
import os
|
|
|
|
import mock
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
from novaclient.shell import OpenStackComputeShell
|
|
|
|
from novaclient import exceptions
|
|
|
|
from tests.v1_0 import fakes
|
|
|
|
from tests import utils
|
2011-01-25 14:01:22 -06:00
|
|
|
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
class ShellTest(utils.TestCase):
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def setUp(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
"""Run before each test."""
|
|
|
|
self.old_environment = os.environ.copy()
|
|
|
|
os.environ = {
|
2011-08-03 17:41:33 -04:00
|
|
|
'NOVA_USERNAME': 'username',
|
2011-11-09 07:10:46 -08:00
|
|
|
'NOVA_PASSWORD': 'password',
|
2011-08-04 10:52:53 -04:00
|
|
|
'NOVA_PROJECT_ID': 'project_id',
|
|
|
|
'NOVA_VERSION': '1.0',
|
2011-08-03 17:41:33 -04:00
|
|
|
}
|
2011-08-04 09:13:46 -04:00
|
|
|
|
|
|
|
self.shell = OpenStackComputeShell()
|
|
|
|
self.shell.get_api_class = lambda *_: fakes.FakeClient
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def tearDown(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
os.environ = self.old_environment
|
|
|
|
|
|
|
|
def run_command(self, cmd):
|
2011-08-04 10:52:53 -04:00
|
|
|
self.shell.main(cmd.split())
|
2011-08-04 09:13:46 -04:00
|
|
|
|
|
|
|
def assert_called(self, method, url, body=None):
|
|
|
|
return self.shell.cs.assert_called(method, url, body)
|
|
|
|
|
|
|
|
def assert_called_anytime(self, method, url, body=None):
|
|
|
|
return self.shell.cs.assert_called_anytime(method, url, body)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_backup_schedule(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('backup-schedule 1234')
|
|
|
|
self.assert_called('GET', '/servers/1234/backup_schedule')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('backup-schedule sample-server --weekly monday')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers/1234/backup_schedule',
|
|
|
|
{'backupSchedule': {'enabled': True, 'daily': 'DISABLED',
|
|
|
|
'weekly': 'MONDAY'}}
|
2011-01-25 14:01:22 -06:00
|
|
|
)
|
|
|
|
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('backup-schedule sample-server '
|
2011-08-03 17:41:33 -04:00
|
|
|
'--weekly disabled --daily h_0000_0200')
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers/1234/backup_schedule',
|
|
|
|
{'backupSchedule': {'enabled': True, 'daily': 'H_0000_0200',
|
|
|
|
'weekly': 'DISABLED'}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('backup-schedule sample-server --disable')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers/1234/backup_schedule',
|
|
|
|
{'backupSchedule': {'enabled': False, 'daily': 'DISABLED',
|
|
|
|
'weekly': 'DISABLED'}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_backup_schedule_delete(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('backup-schedule-delete 1234')
|
|
|
|
self.assert_called('DELETE', '/servers/1234/backup_schedule')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_boot(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('boot --image 1 some-server')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-20 22:22:22 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server', 'imageId': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'min_count': 1, 'max_count': 1}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-06 18:15:35 -07:00
|
|
|
self.run_command('boot --image 1 --meta foo=bar'
|
|
|
|
' --meta spam=eggs some-server ')
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-20 22:22:22 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server', 'imageId': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'min_count': 1, 'max_count': 1,
|
|
|
|
'metadata': {'foo': 'bar', 'spam': 'eggs'}}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_boot_files(self):
|
|
|
|
testfile = os.path.join(os.path.dirname(__file__), 'testfile.txt')
|
|
|
|
expected_file_data = open(testfile).read().encode('base64')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-06 18:15:35 -07:00
|
|
|
self.run_command('boot some-server --image 1 '
|
|
|
|
'--file /tmp/foo=%s --file /tmp/bar=%s' %
|
|
|
|
(testfile, testfile))
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-20 22:22:22 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server', 'imageId': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'min_count': 1, 'max_count': 1,
|
|
|
|
'personality': [
|
2011-08-06 18:15:35 -07:00
|
|
|
{'path': '/tmp/bar', 'contents': expected_file_data},
|
|
|
|
{'path': '/tmp/foo', 'contents': expected_file_data}
|
2011-08-03 17:41:33 -04:00
|
|
|
]}
|
|
|
|
}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_boot_invalid_file(self):
|
2011-08-06 18:15:35 -07:00
|
|
|
invalid_file = os.path.join(os.path.dirname(__file__),
|
|
|
|
'asdfasdfasdfasdf')
|
|
|
|
self.assertRaises(exceptions.CommandError, self.run_command,
|
|
|
|
'boot some-server --image 1 '
|
|
|
|
'--file /foo=%s' % invalid_file)
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_boot_key_auto(self):
|
|
|
|
mock_exists = mock.Mock(return_value=True)
|
|
|
|
mock_open = mock.Mock()
|
|
|
|
mock_open.return_value = mock.Mock()
|
|
|
|
mock_open.return_value.read = mock.Mock(return_value='SSHKEY')
|
|
|
|
|
|
|
|
@mock.patch('os.path.exists', mock_exists)
|
|
|
|
@mock.patch('__builtin__.open', mock_open)
|
|
|
|
def test_shell_call():
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('boot some-server --image 1 --key')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-06 18:15:35 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server',
|
2011-08-20 22:22:22 -07:00
|
|
|
'imageId': 1, 'min_count': 1, 'max_count': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'personality': [{
|
|
|
|
'path': '/root/.ssh/authorized_keys2',
|
|
|
|
'contents': ('SSHKEY').encode('base64')},
|
|
|
|
]}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
test_shell_call()
|
|
|
|
|
|
|
|
def test_boot_key_auto_no_keys(self):
|
|
|
|
mock_exists = mock.Mock(return_value=False)
|
|
|
|
|
|
|
|
@mock.patch('os.path.exists', mock_exists)
|
|
|
|
def test_shell_call():
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assertRaises(exceptions.CommandError, self.run_command,
|
2011-08-03 17:41:33 -04:00
|
|
|
'boot some-server --image 1 --key')
|
|
|
|
|
|
|
|
test_shell_call()
|
|
|
|
|
|
|
|
def test_boot_key_file(self):
|
|
|
|
testfile = os.path.join(os.path.dirname(__file__), 'testfile.txt')
|
|
|
|
expected_file_data = open(testfile).read().encode('base64')
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('boot some-server --image 1 --key %s' % testfile)
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-20 22:22:22 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server', 'imageId': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'min_count': 1, 'max_count': 1,
|
|
|
|
'personality': [
|
|
|
|
{'path': '/root/.ssh/authorized_keys2', 'contents':
|
|
|
|
expected_file_data},
|
|
|
|
]}
|
|
|
|
}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_boot_invalid_keyfile(self):
|
2011-08-06 18:15:35 -07:00
|
|
|
invalid_file = os.path.join(os.path.dirname(__file__),
|
|
|
|
'asdfasdfasdfasdf')
|
|
|
|
self.assertRaises(exceptions.CommandError, self.run_command,
|
|
|
|
'boot some-server --image 1 --key %s' % invalid_file)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_boot_ipgroup(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('boot --image 1 --ipgroup 1 some-server')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-20 22:22:22 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server', 'imageId': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'sharedIpGroupId': 1, 'min_count': 1, 'max_count': 1}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_boot_ipgroup_name(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('boot --image 1 --ipgroup group1 some-server')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers',
|
2011-08-20 22:22:22 -07:00
|
|
|
{'server': {'flavorId': 1, 'name': 'some-server', 'imageId': 1,
|
2011-08-03 17:41:33 -04:00
|
|
|
'sharedIpGroupId': 1, 'min_count': 1, 'max_count': 1}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_flavor_list(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('flavor-list')
|
|
|
|
self.assert_called_anytime('GET', '/flavors/detail')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_image_list(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('image-list')
|
|
|
|
self.assert_called('GET', '/images/detail')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_snapshot_create(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('image-create sample-server mysnapshot')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/images',
|
|
|
|
{'image': {'name': 'mysnapshot', 'serverId': 1234}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_image_delete(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('image-delete 1')
|
|
|
|
self.assert_called('DELETE', '/images/1')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_ip_share(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ip-share sample-server 1 1.2.3.4')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'PUT', '/servers/1234/ips/public/1.2.3.4',
|
|
|
|
{'shareIp': {'sharedIpGroupId': 1, 'configureServer': True}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_ip_unshare(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ip-unshare sample-server 1.2.3.4')
|
|
|
|
self.assert_called('DELETE', '/servers/1234/ips/public/1.2.3.4')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_ipgroup_list(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ipgroup-list')
|
2011-08-03 17:41:33 -04:00
|
|
|
assert ('GET', '/shared_ip_groups/detail', None) in \
|
2011-08-04 09:13:46 -04:00
|
|
|
self.shell.cs.client.callstack
|
|
|
|
self.assert_called('GET', '/servers/5678')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_ipgroup_show(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ipgroup-show 1')
|
|
|
|
self.assert_called('GET', '/shared_ip_groups/1')
|
|
|
|
self.run_command('ipgroup-show group2')
|
2011-08-03 17:41:33 -04:00
|
|
|
# does a search, not a direct GET
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assert_called('GET', '/shared_ip_groups/detail')
|
2011-08-03 17:41:33 -04:00
|
|
|
|
|
|
|
def test_ipgroup_create(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ipgroup-create a-group')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/shared_ip_groups',
|
|
|
|
{'sharedIpGroup': {'name': 'a-group'}}
|
|
|
|
)
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ipgroup-create a-group sample-server')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/shared_ip_groups',
|
|
|
|
{'sharedIpGroup': {'name': 'a-group', 'server': 1234}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_ipgroup_delete(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('ipgroup-delete group1')
|
|
|
|
self.assert_called('DELETE', '/shared_ip_groups/1')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_list(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('list')
|
|
|
|
self.assert_called('GET', '/servers/detail')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_reboot(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('reboot sample-server')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'reboot': {'type': 'SOFT'}})
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('reboot sample-server --hard')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'reboot': {'type': 'HARD'}})
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_rebuild(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('rebuild sample-server 1')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'rebuild': {'imageId': 1}})
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_rename(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('rename sample-server newname')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('PUT', '/servers/1234',
|
|
|
|
{'server': {'name': 'newname'}})
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_resize(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('resize sample-server 1')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'resize': {'flavorId': 1}})
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_resize_confirm(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('resize-confirm sample-server')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'confirmResize': None})
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_resize_revert(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('resize-revert sample-server')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('POST', '/servers/1234/action',
|
|
|
|
{'revertResize': None})
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_backup(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('backup sample-server mybackup daily 1')
|
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/servers/1234/action',
|
|
|
|
{'createBackup': {'name': 'mybackup', 'backup_type': 'daily',
|
|
|
|
'rotation': 1}}
|
|
|
|
)
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
@mock.patch('getpass.getpass', mock.Mock(return_value='p'))
|
|
|
|
def test_root_password(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('root-password sample-server')
|
2011-08-06 18:15:35 -07:00
|
|
|
self.assert_called('PUT', '/servers/1234',
|
|
|
|
{'server': {'adminPass': 'p'}})
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_show(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('show 1234')
|
2011-08-03 17:41:33 -04:00
|
|
|
# XXX need a way to test multiple calls
|
2011-08-04 09:13:46 -04:00
|
|
|
# self.assert_called('GET', '/servers/1234')
|
|
|
|
self.assert_called('GET', '/images/2')
|
2011-02-09 11:16:51 -04:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_delete(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('delete 1234')
|
|
|
|
self.assert_called('DELETE', '/servers/1234')
|
|
|
|
self.run_command('delete sample-server')
|
|
|
|
self.assert_called('DELETE', '/servers/1234')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_zone(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('zone 1')
|
|
|
|
self.assert_called('GET', '/zones/1')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-06 18:15:35 -07:00
|
|
|
self.run_command('zone 1 --api_url=http://zzz '
|
2011-11-09 07:10:46 -08:00
|
|
|
'--zone_username=frank --zone_password=xxx')
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'PUT', '/zones/1',
|
2011-08-30 07:13:44 -07:00
|
|
|
{'zone': {'username': 'frank', 'password': 'xxx',
|
|
|
|
'api_url': 'http://zzz'}}
|
2011-08-03 17:41:33 -04:00
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_zone_add(self):
|
2011-08-30 07:27:37 -07:00
|
|
|
self.run_command('zone-add child_zone http://zzz '
|
2011-11-09 07:10:46 -08:00
|
|
|
'--zone_username=frank --zone_password=xxx '
|
2011-08-30 07:27:37 -07:00
|
|
|
'--weight_offset=0.0 --weight_scale=1.0')
|
2011-08-04 09:13:46 -04:00
|
|
|
self.assert_called(
|
2011-08-03 17:41:33 -04:00
|
|
|
'POST', '/zones',
|
2011-08-31 11:55:01 -07:00
|
|
|
{'zone': {'name': 'child_zone',
|
2011-08-30 07:13:44 -07:00
|
|
|
'api_url': 'http://zzz', 'username': 'frank',
|
2011-08-03 17:41:33 -04:00
|
|
|
'password': 'xxx',
|
|
|
|
'weight_offset': '0.0', 'weight_scale': '1.0'}}
|
|
|
|
)
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-30 07:13:44 -07:00
|
|
|
def test_zone_add_optional(self):
|
|
|
|
self.run_command('zone-add child_zone http://zzz')
|
|
|
|
self.assert_called(
|
|
|
|
'POST', '/zones',
|
2011-08-31 11:55:01 -07:00
|
|
|
{'zone': {'name': 'child_zone',
|
2011-08-30 07:13:44 -07:00
|
|
|
'api_url': 'http://zzz',
|
|
|
|
'username': None,
|
|
|
|
'password': None,
|
|
|
|
'weight_offset': 0.0, 'weight_scale': 1.0}}
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_zone_delete(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('zone-delete 1')
|
|
|
|
self.assert_called('DELETE', '/zones/1')
|
2011-01-25 14:01:22 -06:00
|
|
|
|
2011-08-03 17:41:33 -04:00
|
|
|
def test_zone_list(self):
|
2011-08-04 09:13:46 -04:00
|
|
|
self.run_command('zone-list')
|
|
|
|
assert ('GET', '/zones/detail', None) in self.shell.cs.client.callstack
|