remove unnecessary neutron file under neutronclient/tests
Change-Id: I72d48ced0199399c66949ef692ad965459ae7921
This commit is contained in:
parent
e8debf8d55
commit
2acb813816
@ -1,125 +0,0 @@
|
||||
# Copyright 2013 Big Switch Networks Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: KC Wang, Big Switch Networks Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.fw import firewall
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20FirewallJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_firewall_with_mandatory_params(self):
|
||||
"""firewall-create with mandatory (none) params."""
|
||||
resource = 'firewall'
|
||||
cmd = firewall.CreateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
name = ''
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
policy_id = 'my-policy-id'
|
||||
args = ['--tenant-id', tenant_id, policy_id, ]
|
||||
position_names = ['firewall_policy_id', ]
|
||||
position_values = [policy_id, ]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=True, tenant_id=tenant_id)
|
||||
|
||||
def test_create_firewall_with_all_params(self):
|
||||
"""firewall-create with all params set."""
|
||||
resource = 'firewall'
|
||||
cmd = firewall.CreateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'my-name'
|
||||
description = 'my-desc'
|
||||
policy_id = 'my-policy-id'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
args = ['--description', description,
|
||||
'--shared',
|
||||
'--admin-state-down',
|
||||
'--tenant-id', tenant_id,
|
||||
policy_id]
|
||||
position_names = ['firewall_policy_id', ]
|
||||
position_values = [policy_id, ]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
description=description,
|
||||
shared=True, admin_state_up=False,
|
||||
tenant_id=tenant_id)
|
||||
|
||||
def test_list_firewalls(self):
|
||||
"""firewall-list."""
|
||||
resources = "firewalls"
|
||||
cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_firewalls_pagination(self):
|
||||
"""firewall-list with pagination."""
|
||||
resources = "firewalls"
|
||||
cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_firewalls_sort(self):
|
||||
"""sorted list: firewall-list --sort-key name --sort-key id
|
||||
--sort-key asc --sort-key desc
|
||||
"""
|
||||
resources = "firewalls"
|
||||
cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_firewalls_limit(self):
|
||||
"""size (1000) limited list: firewall-list -P."""
|
||||
resources = "firewalls"
|
||||
cmd = firewall.ListFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_firewall_id(self):
|
||||
"""firewall-show test_id."""
|
||||
resource = 'firewall'
|
||||
cmd = firewall.ShowFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_firewall_id_name(self):
|
||||
"""firewall-show."""
|
||||
resource = 'firewall'
|
||||
cmd = firewall.ShowFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_firewall(self):
|
||||
"""firewall-update myid --name newname --tags a b."""
|
||||
resource = 'firewall'
|
||||
cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_delete_firewall(self):
|
||||
"""firewall-delete my-id."""
|
||||
resource = 'firewall'
|
||||
cmd = firewall.DeleteFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20FirewallXML(CLITestV20FirewallJSON):
|
||||
format = 'xml'
|
@ -1,213 +0,0 @@
|
||||
# Copyright 2013 Big Switch Networks Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: KC Wang, Big Switch Networks Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.neutron.v2_0.fw import firewallpolicy
|
||||
from neutronclient import shell
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20FirewallPolicyJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20FirewallPolicyJSON, self).setUp()
|
||||
|
||||
def test_create_firewall_policy_with_mandatory_params(self):
|
||||
"""firewall-policy-create with mandatory (none) params only."""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.CreateFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
tenant_id = 'my-tenant'
|
||||
name = 'my-name'
|
||||
my_id = 'myid'
|
||||
args = ['--tenant-id', tenant_id,
|
||||
'--admin-state_up',
|
||||
name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=True, tenant_id=tenant_id)
|
||||
|
||||
def test_create_firewall_policy_with_all_params(self):
|
||||
"""firewall-policy-create with all params set."""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.CreateFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
name = 'my-name'
|
||||
description = 'my-desc'
|
||||
firewall_rules_arg = 'rule_id1 rule_id2'
|
||||
firewall_rules_res = ['rule_id1', 'rule_id2']
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'myid'
|
||||
args = ['--description', description,
|
||||
'--shared',
|
||||
'--firewall-rules', firewall_rules_arg,
|
||||
'--audited',
|
||||
'--tenant-id', tenant_id,
|
||||
'--admin-state_up',
|
||||
name]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
description=description, shared=True,
|
||||
firewall_rules=firewall_rules_res,
|
||||
audited=True, admin_state_up=True,
|
||||
tenant_id=tenant_id)
|
||||
|
||||
def test_list_firewall_policies(self):
|
||||
"""firewall-policy-list."""
|
||||
resources = "firewall_policies"
|
||||
cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_firewall_policies_pagination(self):
|
||||
"""firewall-policy-list."""
|
||||
resources = "firewall_policies"
|
||||
cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_firewall_policies_sort(self):
|
||||
"""sorted list: firewall-policy-list --sort-key name --sort-key id
|
||||
--sort-key asc --sort-key desc
|
||||
"""
|
||||
resources = "firewall_policies"
|
||||
cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_firewall_policies_limit(self):
|
||||
"""size (1000) limited list: firewall-policy-list -P."""
|
||||
resources = "firewall_policies"
|
||||
cmd = firewallpolicy.ListFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_firewall_policy_id(self):
|
||||
"""firewall-policy-show test_id."""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.ShowFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_firewall_policy_id_name(self):
|
||||
"""firewall-policy-show."""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.ShowFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_firewall_policy(self):
|
||||
"""firewall-policy-update myid --name newname."""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.UpdateFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_delete_firewall_policy(self):
|
||||
"""firewall-policy-delete my-id."""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.DeleteFirewallPolicy(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
my_id = 'myid1'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
def test_insert_firewall_rule(self):
|
||||
"""firewall-policy-insert-rule myid newruleid
|
||||
--insert-before ruleAid
|
||||
--insert-after ruleBid
|
||||
"""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.FirewallPolicyInsertRule(
|
||||
test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
myid = 'myid'
|
||||
args = ['myid', 'newrule',
|
||||
'--insert-before', 'rule2',
|
||||
'--insert-after', 'rule1']
|
||||
extrafields = {'firewall_rule_id': 'newrule',
|
||||
'insert_before': 'rule2',
|
||||
'insert_after': 'rule1'}
|
||||
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
body = extrafields
|
||||
path = getattr(self.client, resource + "_insert_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path % myid, format=self.format),
|
||||
self.client),
|
||||
'PUT', body=test_cli20.MyComparator(body, self.client),
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token',
|
||||
test_cli20.TOKEN)).AndReturn((test_cli20.MyResp(204), None))
|
||||
args.extend(['--request-format', self.format])
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser(resource + "_insert_rule")
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
|
||||
def test_remove_firewall_rule(self):
|
||||
"""firewall-policy-remove-rule myid ruleid
|
||||
"""
|
||||
resource = 'firewall_policy'
|
||||
cmd = firewallpolicy.FirewallPolicyRemoveRule(
|
||||
test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
myid = 'myid'
|
||||
args = ['myid', 'removerule']
|
||||
extrafields = {'firewall_rule_id': 'removerule', }
|
||||
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
body = extrafields
|
||||
path = getattr(self.client, resource + "_remove_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.MyUrlComparator(
|
||||
test_cli20.end_url(path % myid, format=self.format),
|
||||
self.client),
|
||||
'PUT', body=test_cli20.MyComparator(body, self.client),
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token',
|
||||
test_cli20.TOKEN)).AndReturn((test_cli20.MyResp(204), None))
|
||||
args.extend(['--request-format', self.format])
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser(resource + "_remove_rule")
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
|
||||
|
||||
class CLITestV20FirewallPolicyXML(CLITestV20FirewallPolicyJSON):
|
||||
format = 'xml'
|
@ -1,180 +0,0 @@
|
||||
# Copyright 2013 Big Switch Networks Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: KC Wang, Big Switch Networks Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.fw import firewallrule
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20FirewallRuleJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def _test_create_firewall_rule_with_mandatory_params(self, enabled):
|
||||
"""firewall-rule-create with mandatory (none) params only."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.CreateFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
tenant_id = 'my-tenant'
|
||||
name = ''
|
||||
my_id = 'myid'
|
||||
protocol = 'tcp'
|
||||
action = 'allow'
|
||||
enabled_flag = '--enabled' if enabled else '--disabled'
|
||||
args = ['--tenant-id', tenant_id,
|
||||
'--admin-state-up',
|
||||
'--protocol', protocol,
|
||||
'--action', action,
|
||||
enabled_flag]
|
||||
position_names = []
|
||||
position_values = []
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
protocol=protocol, action=action,
|
||||
enabled=enabled, tenant_id=tenant_id)
|
||||
|
||||
def test_create_enabled_firewall_rule_with_mandatory_params(self):
|
||||
self._test_create_firewall_rule_with_mandatory_params(enabled=True)
|
||||
|
||||
def test_create_disabled_firewall_rule_with_mandatory_params(self):
|
||||
self._test_create_firewall_rule_with_mandatory_params(enabled=False)
|
||||
|
||||
def _setup_create_firewall_rule_with_all_params(self, protocol='tcp'):
|
||||
"""firewall-rule-create with all params set."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.CreateFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
name = 'my-name'
|
||||
description = 'my-desc'
|
||||
source_ip = '192.168.1.0/24'
|
||||
destination_ip = '192.168.2.0/24'
|
||||
source_port = '0:65535'
|
||||
destination_port = '0:65535'
|
||||
action = 'allow'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'myid'
|
||||
args = ['--description', description,
|
||||
'--shared',
|
||||
'--protocol', protocol,
|
||||
'--source-ip-address', source_ip,
|
||||
'--destination-ip-address', destination_ip,
|
||||
'--source-port', source_port,
|
||||
'--destination-port', destination_port,
|
||||
'--action', action,
|
||||
'--enabled',
|
||||
'--admin-state-up',
|
||||
'--tenant-id', tenant_id]
|
||||
position_names = []
|
||||
position_values = []
|
||||
if protocol == 'any':
|
||||
protocol = None
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
description=description, shared=True,
|
||||
protocol=protocol,
|
||||
source_ip_address=source_ip,
|
||||
destination_ip_address=destination_ip,
|
||||
source_port=source_port,
|
||||
destination_port=destination_port,
|
||||
action=action, enabled=True,
|
||||
tenant_id=tenant_id)
|
||||
|
||||
def test_create_firewall_rule_with_all_params(self):
|
||||
self._setup_create_firewall_rule_with_all_params()
|
||||
|
||||
def test_create_firewall_rule_with_proto_any(self):
|
||||
self._setup_create_firewall_rule_with_all_params(protocol='any')
|
||||
|
||||
def test_list_firewall_rules(self):
|
||||
"""firewall-rule-list."""
|
||||
resources = "firewall_rules"
|
||||
cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_firewall_rules_pagination(self):
|
||||
"""firewall-rule-list."""
|
||||
resources = "firewall_rules"
|
||||
cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_firewall_rules_sort(self):
|
||||
"""firewall-rule-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "firewall_rules"
|
||||
cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_firewall_rules_limit(self):
|
||||
"""firewall-rule-list -P."""
|
||||
resources = "firewall_rules"
|
||||
cmd = firewallrule.ListFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_firewall_rule_id(self):
|
||||
"""firewall-rule-show test_id."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.ShowFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_firewall_rule_id_name(self):
|
||||
"""firewall-rule-show."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.ShowFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_firewall_rule(self):
|
||||
"""firewall-rule-update myid --name newname."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.UpdateFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_update_firewall_rule_protocol(self):
|
||||
"""firewall-rule-update myid --protocol any."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.UpdateFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--protocol', 'any'],
|
||||
{'protocol': None, })
|
||||
|
||||
def test_delete_firewall_rule(self):
|
||||
"""firewall-rule-delete my-id."""
|
||||
resource = 'firewall_rule'
|
||||
cmd = firewallrule.DeleteFirewallRule(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
my_id = 'myid1'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20FirewallRuleXML(CLITestV20FirewallRuleJSON):
|
||||
format = 'xml'
|
@ -1,218 +0,0 @@
|
||||
# Copyright 2013 Mirantis Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Ilya Shakhat, Mirantis Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.neutron.v2_0.lb import healthmonitor
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20LbHealthmonitorJSON(test_cli20.CLITestV20Base):
|
||||
def test_create_healthmonitor_with_mandatory_params(self):
|
||||
"""lb-healthmonitor-create with mandatory params only."""
|
||||
resource = 'health_monitor'
|
||||
cmd = healthmonitor.CreateHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
admin_state_up = False
|
||||
delay = '60'
|
||||
max_retries = '2'
|
||||
timeout = '10'
|
||||
type = 'TCP'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
args = ['--admin-state-down',
|
||||
'--delay', delay,
|
||||
'--max-retries', max_retries,
|
||||
'--timeout', timeout,
|
||||
'--type', type,
|
||||
'--tenant-id', tenant_id]
|
||||
position_names = ['admin_state_up', 'delay', 'max_retries', 'timeout',
|
||||
'type', 'tenant_id']
|
||||
position_values = [admin_state_up, delay, max_retries, timeout, type,
|
||||
tenant_id]
|
||||
self._test_create_resource(resource, cmd, '', my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_healthmonitor_with_all_params(self):
|
||||
"""lb-healthmonitor-create with all params set."""
|
||||
resource = 'health_monitor'
|
||||
cmd = healthmonitor.CreateHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
admin_state_up = False
|
||||
delay = '60'
|
||||
expected_codes = '200-202,204'
|
||||
http_method = 'HEAD'
|
||||
max_retries = '2'
|
||||
timeout = '10'
|
||||
type = 'TCP'
|
||||
tenant_id = 'my-tenant'
|
||||
url_path = '/health'
|
||||
my_id = 'my-id'
|
||||
args = ['--admin-state-down',
|
||||
'--delay', delay,
|
||||
'--expected-codes', expected_codes,
|
||||
'--http-method', http_method,
|
||||
'--max-retries', max_retries,
|
||||
'--timeout', timeout,
|
||||
'--type', type,
|
||||
'--tenant-id', tenant_id,
|
||||
'--url-path', url_path]
|
||||
position_names = ['admin_state_up', 'delay',
|
||||
'expected_codes', 'http_method',
|
||||
'max_retries', 'timeout',
|
||||
'type', 'tenant_id', 'url_path']
|
||||
position_values = [admin_state_up, delay,
|
||||
expected_codes, http_method,
|
||||
max_retries, timeout,
|
||||
type, tenant_id, url_path]
|
||||
self._test_create_resource(resource, cmd, '', my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_healthmonitors(self):
|
||||
"""lb-healthmonitor-list."""
|
||||
resources = "health_monitors"
|
||||
cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_healthmonitors_pagination(self):
|
||||
"""lb-healthmonitor-list."""
|
||||
resources = "health_monitors"
|
||||
cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_healthmonitors_sort(self):
|
||||
"""lb-healthmonitor-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "health_monitors"
|
||||
cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_healthmonitors_limit(self):
|
||||
"""lb-healthmonitor-list -P."""
|
||||
resources = "health_monitors"
|
||||
cmd = healthmonitor.ListHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_healthmonitor_id(self):
|
||||
"""lb-healthmonitor-show test_id."""
|
||||
resource = 'health_monitor'
|
||||
cmd = healthmonitor.ShowHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_healthmonitor_id_name(self):
|
||||
"""lb-healthmonitor-show."""
|
||||
resource = 'health_monitor'
|
||||
cmd = healthmonitor.ShowHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_health_monitor(self):
|
||||
"""lb-healthmonitor-update myid --name myname --tags a b."""
|
||||
resource = 'health_monitor'
|
||||
cmd = healthmonitor.UpdateHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--timeout', '5'],
|
||||
{'timeout': '5', })
|
||||
|
||||
def test_delete_healthmonitor(self):
|
||||
"""lb-healthmonitor-delete my-id."""
|
||||
resource = 'health_monitor'
|
||||
cmd = healthmonitor.DeleteHealthMonitor(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
def test_associate_healthmonitor(self):
|
||||
cmd = healthmonitor.AssociateHealthMonitor(
|
||||
test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
resource = 'health_monitor'
|
||||
health_monitor_id = 'hm-id'
|
||||
pool_id = 'p_id'
|
||||
args = [health_monitor_id, pool_id]
|
||||
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
|
||||
body = {resource: {'id': health_monitor_id}}
|
||||
result = {resource: {'id': health_monitor_id}, }
|
||||
result_str = self.client.serialize(result)
|
||||
|
||||
path = getattr(self.client,
|
||||
"associate_pool_health_monitors_path") % pool_id
|
||||
return_tup = (test_cli20.MyResp(200), result_str)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path), 'POST',
|
||||
body=test_cli20.MyComparator(body, self.client),
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(return_tup)
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser('test_' + resource)
|
||||
parsed_args = cmd_parser.parse_args(args)
|
||||
cmd.run(parsed_args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
|
||||
def test_disassociate_healthmonitor(self):
|
||||
cmd = healthmonitor.DisassociateHealthMonitor(
|
||||
test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
resource = 'health_monitor'
|
||||
health_monitor_id = 'hm-id'
|
||||
pool_id = 'p_id'
|
||||
args = [health_monitor_id, pool_id]
|
||||
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
|
||||
path = (getattr(self.client,
|
||||
"disassociate_pool_health_monitors_path") %
|
||||
{'pool': pool_id, 'health_monitor': health_monitor_id})
|
||||
return_tup = (test_cli20.MyResp(204), None)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path), 'DELETE',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(return_tup)
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser('test_' + resource)
|
||||
parsed_args = cmd_parser.parse_args(args)
|
||||
cmd.run(parsed_args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
|
||||
|
||||
class CLITestV20LbHealthmonitorXML(CLITestV20LbHealthmonitorJSON):
|
||||
format = 'xml'
|
@ -1,133 +0,0 @@
|
||||
# Copyright 2013 Mirantis Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Ilya Shakhat, Mirantis Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.lb import member
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20LbMemberJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20LbMemberJSON, self).setUp(plurals={'tags': 'tag'})
|
||||
|
||||
def test_create_member(self):
|
||||
"""lb-member-create with mandatory params only."""
|
||||
resource = 'member'
|
||||
cmd = member.CreateMember(test_cli20.MyApp(sys.stdout), None)
|
||||
address = '10.0.0.1'
|
||||
port = '8080'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
pool_id = 'pool-id'
|
||||
args = ['--address', address, '--protocol-port', port,
|
||||
'--tenant-id', tenant_id, pool_id]
|
||||
position_names = ['address', 'protocol_port', 'tenant_id', 'pool_id',
|
||||
'admin_state_up']
|
||||
position_values = [address, port, tenant_id, pool_id, True]
|
||||
self._test_create_resource(resource, cmd, None, my_id, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=None)
|
||||
|
||||
def test_create_member_all_params(self):
|
||||
"""lb-member-create with all available params."""
|
||||
resource = 'member'
|
||||
cmd = member.CreateMember(test_cli20.MyApp(sys.stdout), None)
|
||||
address = '10.0.0.1'
|
||||
admin_state_up = False
|
||||
port = '8080'
|
||||
weight = '1'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
pool_id = 'pool-id'
|
||||
args = ['--address', address, '--admin-state-down',
|
||||
'--protocol-port', port, '--weight', weight,
|
||||
'--tenant-id', tenant_id, pool_id]
|
||||
position_names = [
|
||||
'address', 'admin_state_up', 'protocol_port', 'weight',
|
||||
'tenant_id', 'pool_id'
|
||||
]
|
||||
position_values = [address, admin_state_up, port, weight,
|
||||
tenant_id, pool_id]
|
||||
self._test_create_resource(resource, cmd, None, my_id, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=None)
|
||||
|
||||
def test_list_members(self):
|
||||
"""lb-member-list."""
|
||||
resources = "members"
|
||||
cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_members_pagination(self):
|
||||
"""lb-member-list."""
|
||||
resources = "members"
|
||||
cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_members_sort(self):
|
||||
"""lb-member-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "members"
|
||||
cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_members_limit(self):
|
||||
"""lb-member-list -P."""
|
||||
resources = "members"
|
||||
cmd = member.ListMember(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_member_id(self):
|
||||
"""lb-member-show test_id."""
|
||||
resource = 'member'
|
||||
cmd = member.ShowMember(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_member_id_name(self):
|
||||
"""lb-member-show."""
|
||||
resource = 'member'
|
||||
cmd = member.ShowMember(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_member(self):
|
||||
"""lb-member-update myid --name myname --tags a b."""
|
||||
resource = 'member'
|
||||
cmd = member.UpdateMember(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'myname', 'tags': ['a', 'b'], })
|
||||
|
||||
def test_delete_member(self):
|
||||
"""lb-member-delete my-id."""
|
||||
resource = 'member'
|
||||
cmd = member.DeleteMember(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20LbMemberXML(CLITestV20LbMemberJSON):
|
||||
format = 'xml'
|
@ -1,172 +0,0 @@
|
||||
# Copyright 2013 Mirantis Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Ilya Shakhat, Mirantis Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.neutron.v2_0.lb import pool
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20LbPoolJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_pool_with_mandatory_params(self):
|
||||
"""lb-pool-create with mandatory params only."""
|
||||
resource = 'pool'
|
||||
cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'my-name'
|
||||
lb_method = 'ROUND_ROBIN'
|
||||
protocol = 'HTTP'
|
||||
subnet_id = 'subnet-id'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
args = ['--lb-method', lb_method,
|
||||
'--name', name,
|
||||
'--protocol', protocol,
|
||||
'--subnet-id', subnet_id,
|
||||
'--tenant-id', tenant_id]
|
||||
position_names = ['admin_state_up', 'lb_method', 'name',
|
||||
'protocol', 'subnet_id', 'tenant_id']
|
||||
position_values = [True, lb_method, name,
|
||||
protocol, subnet_id, tenant_id]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_pool_with_all_params(self):
|
||||
"""lb-pool-create with all params set."""
|
||||
resource = 'pool'
|
||||
cmd = pool.CreatePool(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'my-name'
|
||||
description = 'my-desc'
|
||||
lb_method = 'ROUND_ROBIN'
|
||||
protocol = 'HTTP'
|
||||
subnet_id = 'subnet-id'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
provider = 'lbaas'
|
||||
args = ['--admin-state-down',
|
||||
'--description', description,
|
||||
'--lb-method', lb_method,
|
||||
'--name', name,
|
||||
'--protocol', protocol,
|
||||
'--subnet-id', subnet_id,
|
||||
'--tenant-id', tenant_id,
|
||||
'--provider', provider]
|
||||
position_names = ['admin_state_up', 'description', 'lb_method', 'name',
|
||||
'protocol', 'subnet_id', 'tenant_id', 'provider']
|
||||
position_values = [False, description, lb_method, name,
|
||||
protocol, subnet_id, tenant_id, provider]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_pools(self):
|
||||
"""lb-pool-list."""
|
||||
resources = "pools"
|
||||
cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_pools_pagination(self):
|
||||
"""lb-pool-list."""
|
||||
resources = "pools"
|
||||
cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_pools_sort(self):
|
||||
"""lb-pool-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "pools"
|
||||
cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_pools_limit(self):
|
||||
"""lb-pool-list -P."""
|
||||
resources = "pools"
|
||||
cmd = pool.ListPool(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_pool_id(self):
|
||||
"""lb-pool-show test_id."""
|
||||
resource = 'pool'
|
||||
cmd = pool.ShowPool(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_pool_id_name(self):
|
||||
"""lb-pool-show."""
|
||||
resource = 'pool'
|
||||
cmd = pool.ShowPool(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_pool(self):
|
||||
"""lb-pool-update myid --name newname --tags a b."""
|
||||
resource = 'pool'
|
||||
cmd = pool.UpdatePool(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_delete_pool(self):
|
||||
"""lb-pool-delete my-id."""
|
||||
resource = 'pool'
|
||||
cmd = pool.DeletePool(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
def test_retrieve_pool_stats(self):
|
||||
"""lb-pool-stats test_id."""
|
||||
resource = 'pool'
|
||||
cmd = pool.RetrievePoolStats(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = self.test_id
|
||||
fields = ['bytes_in', 'bytes_out']
|
||||
args = ['--fields', 'bytes_in', '--fields', 'bytes_out', my_id]
|
||||
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
query = "&".join(["fields=%s" % field for field in fields])
|
||||
expected_res = {'stats': {'bytes_in': '1234', 'bytes_out': '4321'}}
|
||||
resstr = self.client.serialize(expected_res)
|
||||
path = getattr(self.client, "pool_path_stats")
|
||||
return_tup = (test_cli20.MyResp(200), resstr)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path % my_id, query), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(return_tup)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
cmd_parser = cmd.get_parser("test_" + resource)
|
||||
parsed_args = cmd_parser.parse_args(args)
|
||||
cmd.run(parsed_args)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
_str = self.fake_stdout.make_string()
|
||||
self.assertIn('bytes_in', _str)
|
||||
self.assertIn('bytes_out', _str)
|
||||
|
||||
|
||||
class CLITestV20LbPoolXML(CLITestV20LbPoolJSON):
|
||||
format = 'xml'
|
@ -1,213 +0,0 @@
|
||||
# Copyright 2013 Mirantis Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Ilya Shakhat, Mirantis Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.lb import vip
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20LbVipJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20LbVipJSON, self).setUp(plurals={'tags': 'tag'})
|
||||
|
||||
def test_create_vip_with_mandatory_params(self):
|
||||
"""lb-vip-create with all mandatory params."""
|
||||
resource = 'vip'
|
||||
cmd = vip.CreateVip(test_cli20.MyApp(sys.stdout), None)
|
||||
pool_id = 'my-pool-id'
|
||||
name = 'my-name'
|
||||
subnet_id = 'subnet-id'
|
||||
protocol_port = '1000'
|
||||
protocol = 'TCP'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
args = ['--name', name,
|
||||
'--protocol-port', protocol_port,
|
||||
'--protocol', protocol,
|
||||
'--subnet-id', subnet_id,
|
||||
'--tenant-id', tenant_id,
|
||||
pool_id]
|
||||
position_names = ['pool_id', 'name', 'protocol_port', 'protocol',
|
||||
'subnet_id', 'tenant_id']
|
||||
position_values = [pool_id, name, protocol_port, protocol,
|
||||
subnet_id, tenant_id]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=True)
|
||||
|
||||
def test_create_vip_with_all_params(self):
|
||||
"""lb-vip-create with all params."""
|
||||
resource = 'vip'
|
||||
cmd = vip.CreateVip(test_cli20.MyApp(sys.stdout), None)
|
||||
pool_id = 'my-pool-id'
|
||||
name = 'my-name'
|
||||
description = 'my-desc'
|
||||
address = '10.0.0.2'
|
||||
admin_state = False
|
||||
connection_limit = '1000'
|
||||
subnet_id = 'subnet-id'
|
||||
protocol_port = '80'
|
||||
protocol = 'TCP'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
args = ['--name', name,
|
||||
'--description', description,
|
||||
'--address', address,
|
||||
'--admin-state-down',
|
||||
'--connection-limit', connection_limit,
|
||||
'--protocol-port', protocol_port,
|
||||
'--protocol', protocol,
|
||||
'--subnet-id', subnet_id,
|
||||
'--tenant-id', tenant_id,
|
||||
pool_id]
|
||||
position_names = ['pool_id', 'name', 'description', 'address',
|
||||
'admin_state_up', 'connection_limit',
|
||||
'protocol_port', 'protocol', 'subnet_id',
|
||||
'tenant_id']
|
||||
position_values = [pool_id, name, description, address,
|
||||
admin_state, connection_limit, protocol_port,
|
||||
protocol, subnet_id,
|
||||
tenant_id]
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_vip_with_session_persistence_params(self):
|
||||
"""lb-vip-create with mandatory and session-persistence params."""
|
||||
resource = 'vip'
|
||||
cmd = vip.CreateVip(test_cli20.MyApp(sys.stdout), None)
|
||||
pool_id = 'my-pool-id'
|
||||
name = 'my-name'
|
||||
subnet_id = 'subnet-id'
|
||||
protocol_port = '1000'
|
||||
protocol = 'TCP'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
args = ['--name', name,
|
||||
'--protocol-port', protocol_port,
|
||||
'--protocol', protocol,
|
||||
'--subnet-id', subnet_id,
|
||||
'--tenant-id', tenant_id,
|
||||
pool_id,
|
||||
'--session-persistence', 'type=dict',
|
||||
'type=cookie,cookie_name=pie',
|
||||
'--optional-param', 'any']
|
||||
position_names = ['pool_id', 'name', 'protocol_port', 'protocol',
|
||||
'subnet_id', 'tenant_id', 'optional_param']
|
||||
position_values = [pool_id, name, protocol_port, protocol,
|
||||
subnet_id, tenant_id, 'any']
|
||||
extra_body = {
|
||||
'session_persistence': {
|
||||
'type': 'cookie',
|
||||
'cookie_name': 'pie',
|
||||
},
|
||||
}
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=True, extra_body=extra_body)
|
||||
|
||||
def test_list_vips(self):
|
||||
"""lb-vip-list."""
|
||||
resources = "vips"
|
||||
cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_vips_pagination(self):
|
||||
"""lb-vip-list."""
|
||||
resources = "vips"
|
||||
cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_vips_sort(self):
|
||||
"""lb-vip-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "vips"
|
||||
cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_vips_limit(self):
|
||||
"""lb-vip-list -P."""
|
||||
resources = "vips"
|
||||
cmd = vip.ListVip(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_vip_id(self):
|
||||
"""lb-vip-show test_id."""
|
||||
resource = 'vip'
|
||||
cmd = vip.ShowVip(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_vip_id_name(self):
|
||||
"""lb-vip-show."""
|
||||
resource = 'vip'
|
||||
cmd = vip.ShowVip(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_vip(self):
|
||||
"""lb-vip-update myid --name myname --tags a b."""
|
||||
resource = 'vip'
|
||||
cmd = vip.UpdateVip(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'myname', 'tags': ['a', 'b'], })
|
||||
|
||||
def test_update_vip_with_session_persistence(self):
|
||||
resource = 'vip'
|
||||
cmd = vip.UpdateVip(test_cli20.MyApp(sys.stdout), None)
|
||||
body = {
|
||||
'session_persistence': {
|
||||
'type': 'source',
|
||||
},
|
||||
}
|
||||
args = ['myid', '--session-persistence', 'type=dict',
|
||||
'type=source']
|
||||
self._test_update_resource(resource, cmd, 'myid', args, body)
|
||||
|
||||
def test_update_vip_with_session_persistence_and_name(self):
|
||||
resource = 'vip'
|
||||
cmd = vip.UpdateVip(test_cli20.MyApp(sys.stdout), None)
|
||||
body = {
|
||||
'name': 'newname',
|
||||
'session_persistence': {
|
||||
'type': 'cookie',
|
||||
'cookie_name': 'pie',
|
||||
},
|
||||
}
|
||||
args = ['myid', '--name', 'newname',
|
||||
'--session-persistence', 'type=dict',
|
||||
'type=cookie,cookie_name=pie']
|
||||
self._test_update_resource(resource, cmd, 'myid', args, body)
|
||||
|
||||
def test_delete_vip(self):
|
||||
"""lb-vip-delete my-id."""
|
||||
resource = 'vip'
|
||||
cmd = vip.DeleteVip(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20LbVipXML(CLITestV20LbVipJSON):
|
||||
format = 'xml'
|
@ -1,50 +0,0 @@
|
||||
# Copyright 2013 Mirantis Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Oleg Bondarev, Mirantis Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import agentscheduler
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20LBaaSAgentScheduler(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_list_pools_on_agent(self):
|
||||
resources = 'pools'
|
||||
cmd = agentscheduler.ListPoolsOnLbaasAgent(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
agent_id = 'agent_id1'
|
||||
path = ((self.client.agent_path + self.client.LOADBALANCER_POOLS) %
|
||||
agent_id)
|
||||
self._test_list_resources(resources, cmd, base_args=[agent_id],
|
||||
path=path)
|
||||
|
||||
def test_get_lbaas_agent_hosting_pool(self):
|
||||
resources = 'agent'
|
||||
cmd = agentscheduler.GetLbaasAgentHostingPool(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
pool_id = 'pool_id1'
|
||||
path = ((self.client.pool_path + self.client.LOADBALANCER_AGENT) %
|
||||
pool_id)
|
||||
contents = {self.id_field: 'myid1', 'alive': True}
|
||||
self._test_list_resources(resources, cmd, base_args=[pool_id],
|
||||
path=path, response_contents=contents)
|
||||
|
||||
|
||||
class CLITestV20LBaaSAgentSchedulerXML(CLITestV20LBaaSAgentScheduler):
|
||||
format = 'xml'
|
@ -1,56 +0,0 @@
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.common import utils
|
||||
from neutronclient.neutron.v2_0 import agent
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20Agent(test_cli20.CLITestV20Base):
|
||||
def test_list_agents(self):
|
||||
contents = {'agents': [{'id': 'myname', 'agent_type': 'mytype',
|
||||
'alive': True}]}
|
||||
args = ['-f', 'json']
|
||||
resources = "agents"
|
||||
|
||||
cmd = agent.ListAgent(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_columns(cmd, resources, contents, args)
|
||||
_str = self.fake_stdout.make_string()
|
||||
|
||||
returned_agents = utils.loads(_str)
|
||||
self.assertEqual(1, len(returned_agents))
|
||||
ag = returned_agents[0]
|
||||
self.assertEqual(3, len(ag))
|
||||
self.assertEqual("alive", ag.keys()[2])
|
||||
|
||||
def test_list_agents_field(self):
|
||||
contents = {'agents': [{'alive': True}]}
|
||||
args = ['-f', 'json']
|
||||
resources = "agents"
|
||||
smile = ':-)'
|
||||
|
||||
cmd = agent.ListAgent(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_columns(cmd, resources, contents, args)
|
||||
_str = self.fake_stdout.make_string()
|
||||
|
||||
returned_agents = utils.loads(_str)
|
||||
self.assertEqual(1, len(returned_agents))
|
||||
ag = returned_agents[0]
|
||||
self.assertEqual(1, len(ag))
|
||||
self.assertEqual("alive", ag.keys()[0])
|
||||
self.assertEqual(smile, ag.values()[0])
|
@ -1,79 +0,0 @@
|
||||
# Copyright 2013 Cisco Systems Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Kyle Mestery, Cisco Systems, Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import credential
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20Credential(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_credential(self):
|
||||
"""Create credential: myid."""
|
||||
resource = 'credential'
|
||||
cmd = credential.CreateCredential(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
type = 'mytype'
|
||||
args = [name, type]
|
||||
position_names = ['credential_name', 'type']
|
||||
position_values = [name, type]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_credentials_detail(self):
|
||||
"""List credentials: -D."""
|
||||
resources = 'credentials'
|
||||
cmd = credential.ListCredential(test_cli20.MyApp(sys.stdout), None)
|
||||
contents = [{'credential_name': 'myname', 'type': 'mytype'}]
|
||||
self._test_list_resources(resources, cmd, True,
|
||||
response_contents=contents)
|
||||
|
||||
def test_list_credential_known_option_after_unknown(self):
|
||||
"""List credential: -- --tags a b --request-format xml."""
|
||||
resources = 'credentials'
|
||||
cmd = credential.ListCredential(test_cli20.MyApp(sys.stdout), None)
|
||||
contents = [{'credential_name': 'myname', 'type': 'mytype'}]
|
||||
self._test_list_resources(resources, cmd, tags=['a', 'b'],
|
||||
response_contents=contents)
|
||||
|
||||
def test_list_credential_fields(self):
|
||||
"""List credential: --fields a --fields b -- --fields c d."""
|
||||
resources = 'credentials'
|
||||
cmd = credential.ListCredential(test_cli20.MyApp(sys.stdout), None)
|
||||
contents = [{'credential_name': 'myname', 'type': 'mytype'}]
|
||||
self._test_list_resources(resources, cmd,
|
||||
fields_1=['a', 'b'], fields_2=['c', 'd'],
|
||||
response_contents=contents)
|
||||
|
||||
def test_show_credential(self):
|
||||
"""Show credential: --fields id --fields name myid."""
|
||||
resource = 'credential'
|
||||
cmd = credential.ShowCredential(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def test_delete_credential(self):
|
||||
"""Delete credential: myid."""
|
||||
resource = 'credential'
|
||||
cmd = credential.DeleteCredential(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
@ -1,137 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2012 Red Hat
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import floatingip as fip
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20FloatingIpsJSON(test_cli20.CLITestV20Base):
|
||||
def test_create_floatingip(self):
|
||||
"""Create floatingip: fip1."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'fip1'
|
||||
myid = 'myid'
|
||||
args = [name]
|
||||
position_names = ['floating_network_id']
|
||||
position_values = [name]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_floatingip_and_port(self):
|
||||
"""Create floatingip: fip1."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'fip1'
|
||||
myid = 'myid'
|
||||
pid = 'mypid'
|
||||
args = [name, '--port_id', pid]
|
||||
position_names = ['floating_network_id', 'port_id']
|
||||
position_values = [name, pid]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
# Test dashed options
|
||||
args = [name, '--port-id', pid]
|
||||
position_names = ['floating_network_id', 'port_id']
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_floatingip_and_port_and_address(self):
|
||||
"""Create floatingip: fip1 with a given port and address."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.CreateFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'fip1'
|
||||
myid = 'myid'
|
||||
pid = 'mypid'
|
||||
addr = '10.0.0.99'
|
||||
args = [name, '--port_id', pid, '--fixed_ip_address', addr]
|
||||
position_names = ['floating_network_id', 'port_id', 'fixed_ip_address']
|
||||
position_values = [name, pid, addr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
# Test dashed options
|
||||
args = [name, '--port-id', pid, '--fixed-ip-address', addr]
|
||||
position_names = ['floating_network_id', 'port_id', 'fixed_ip_address']
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_floatingips(self):
|
||||
"""list floatingips: -D."""
|
||||
resources = 'floatingips'
|
||||
cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_floatingips_pagination(self):
|
||||
resources = 'floatingips'
|
||||
cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_floatingips_sort(self):
|
||||
"""list floatingips: --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = 'floatingips'
|
||||
cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_floatingips_limit(self):
|
||||
"""list floatingips: -P."""
|
||||
resources = 'floatingips'
|
||||
cmd = fip.ListFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_delete_floatingip(self):
|
||||
"""Delete floatingip: fip1."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.DeleteFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_show_floatingip(self):
|
||||
"""Show floatingip: --fields id."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.ShowFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
def test_disassociate_ip(self):
|
||||
"""Disassociate floating IP: myid."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.DisassociateFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid']
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
args, {"port_id": None}
|
||||
)
|
||||
|
||||
def test_associate_ip(self):
|
||||
"""Associate floating IP: myid portid."""
|
||||
resource = 'floatingip'
|
||||
cmd = fip.AssociateFloatingIP(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'portid']
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
args, {"port_id": "portid"}
|
||||
)
|
||||
|
||||
|
||||
class CLITestV20FloatingIpsXML(CLITestV20FloatingIpsJSON):
|
||||
format = 'xml'
|
@ -1,102 +0,0 @@
|
||||
# Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
|
||||
#
|
||||
# Author: Sylvain Afchain <sylvain.afchain@enovance.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import metering
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20MeteringJSON(test_cli20.CLITestV20Base):
|
||||
def test_create_metering_label(self):
|
||||
"""Create a metering label."""
|
||||
resource = 'metering_label'
|
||||
cmd = metering.CreateMeteringLabel(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'my label'
|
||||
myid = 'myid'
|
||||
description = 'my description'
|
||||
args = [name, '--description', description, '--shared']
|
||||
position_names = ['name', 'description', 'shared']
|
||||
position_values = [name, description, True]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_metering_labels(self):
|
||||
resources = "metering_labels"
|
||||
cmd = metering.ListMeteringLabel(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd)
|
||||
|
||||
def test_delete_metering_label(self):
|
||||
"""Delete a metering label."""
|
||||
resource = 'metering_label'
|
||||
cmd = metering.DeleteMeteringLabel(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_show_metering_label(self):
|
||||
resource = 'metering_label'
|
||||
cmd = metering.ShowMeteringLabel(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
def test_create_metering_label_rule(self):
|
||||
resource = 'metering_label_rule'
|
||||
cmd = metering.CreateMeteringLabelRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
metering_label_id = 'aaa'
|
||||
remote_ip_prefix = '10.0.0.0/24'
|
||||
direction = 'ingress'
|
||||
args = [metering_label_id, remote_ip_prefix, '--direction', direction,
|
||||
'--excluded']
|
||||
position_names = ['metering_label_id', 'remote_ip_prefix', 'direction',
|
||||
'excluded']
|
||||
position_values = [metering_label_id, remote_ip_prefix,
|
||||
direction, True]
|
||||
self._test_create_resource(resource, cmd, metering_label_id,
|
||||
myid, args, position_names, position_values)
|
||||
|
||||
def test_list_metering_label_rules(self):
|
||||
resources = "metering_label_rules"
|
||||
cmd = metering.ListMeteringLabelRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd)
|
||||
|
||||
def test_delete_metering_label_rule(self):
|
||||
resource = 'metering_label_rule'
|
||||
cmd = metering.DeleteMeteringLabelRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_show_metering_label_rule(self):
|
||||
resource = 'metering_label_rule'
|
||||
cmd = metering.ShowMeteringLabelRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
|
||||
class CLITestV20MeteringXML(CLITestV20MeteringJSON):
|
||||
format = 'xml'
|
@ -1,532 +0,0 @@
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.common import utils
|
||||
from neutronclient.neutron.v2_0 import network
|
||||
from neutronclient import shell
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20NetworkJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20NetworkJSON, self).setUp(plurals={'tags': 'tag'})
|
||||
|
||||
def test_create_network(self):
|
||||
"""Create net: myname."""
|
||||
resource = 'network'
|
||||
cmd = network.CreateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = [name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_network_with_unicode(self):
|
||||
"""Create net: u'\u7f51\u7edc'."""
|
||||
resource = 'network'
|
||||
cmd = network.CreateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
name = u'\u7f51\u7edc'
|
||||
myid = 'myid'
|
||||
args = [name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_network_tenant(self):
|
||||
"""Create net: --tenant_id tenantid myname."""
|
||||
resource = 'network'
|
||||
cmd = network.CreateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = ['--tenant_id', 'tenantid', name]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
# Test dashed options
|
||||
args = ['--tenant-id', 'tenantid', name]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_network_tags(self):
|
||||
"""Create net: myname --tags a b."""
|
||||
resource = 'network'
|
||||
cmd = network.CreateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = [name, '--tags', 'a', 'b']
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tags=['a', 'b'])
|
||||
|
||||
def test_create_network_state(self):
|
||||
"""Create net: --admin_state_down myname."""
|
||||
resource = 'network'
|
||||
cmd = network.CreateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = ['--admin_state_down', name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=False)
|
||||
|
||||
# Test dashed options
|
||||
args = ['--admin-state-down', name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=False)
|
||||
|
||||
def test_list_nets_empty_with_column(self):
|
||||
resources = "networks"
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
self.mox.StubOutWithMock(network.ListNetwork, "extend_list")
|
||||
network.ListNetwork.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
reses = {resources: []}
|
||||
resstr = self.client.serialize(reses)
|
||||
# url method body
|
||||
query = "id=myfakeid"
|
||||
args = ['-c', 'id', '--', '--id', 'myfakeid']
|
||||
path = getattr(self.client, resources + "_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token',
|
||||
test_cli20.TOKEN)).AndReturn(
|
||||
(test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser("list_" + resources)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
_str = self.fake_stdout.make_string()
|
||||
self.assertEqual('\n', _str)
|
||||
|
||||
def _test_list_networks(self, cmd, detail=False, tags=[],
|
||||
fields_1=[], fields_2=[], page_size=None,
|
||||
sort_key=[], sort_dir=[]):
|
||||
resources = "networks"
|
||||
self.mox.StubOutWithMock(network.ListNetwork, "extend_list")
|
||||
network.ListNetwork.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
self._test_list_resources(resources, cmd, detail, tags,
|
||||
fields_1, fields_2, page_size=page_size,
|
||||
sort_key=sort_key, sort_dir=sort_dir)
|
||||
|
||||
def test_list_nets_pagination(self):
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(network.ListNetwork, "extend_list")
|
||||
network.ListNetwork.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
self._test_list_resources_with_pagination("networks", cmd)
|
||||
|
||||
def test_list_nets_sort(self):
|
||||
"""list nets: --sort-key name --sort-key id --sort-dir asc
|
||||
--sort-dir desc
|
||||
"""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, sort_key=['name', 'id'],
|
||||
sort_dir=['asc', 'desc'])
|
||||
|
||||
def test_list_nets_sort_with_keys_more_than_dirs(self):
|
||||
"""list nets: --sort-key name --sort-key id --sort-dir desc
|
||||
"""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, sort_key=['name', 'id'],
|
||||
sort_dir=['desc'])
|
||||
|
||||
def test_list_nets_sort_with_dirs_more_than_keys(self):
|
||||
"""list nets: --sort-key name --sort-dir desc --sort-dir asc
|
||||
"""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, sort_key=['name'],
|
||||
sort_dir=['desc', 'asc'])
|
||||
|
||||
def test_list_nets_limit(self):
|
||||
"""list nets: -P."""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, page_size=1000)
|
||||
|
||||
def test_list_nets_detail(self):
|
||||
"""list nets: -D."""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, True)
|
||||
|
||||
def test_list_nets_tags(self):
|
||||
"""List nets: -- --tags a b."""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, tags=['a', 'b'])
|
||||
|
||||
def test_list_nets_tags_with_unicode(self):
|
||||
"""List nets: -- --tags u'\u7f51\u7edc'."""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, tags=[u'\u7f51\u7edc'])
|
||||
|
||||
def test_list_nets_detail_tags(self):
|
||||
"""List nets: -D -- --tags a b."""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd, detail=True, tags=['a', 'b'])
|
||||
|
||||
def _test_list_nets_extend_subnets(self, data, expected):
|
||||
def setup_list_stub(resources, data, query):
|
||||
reses = {resources: data}
|
||||
resstr = self.client.serialize(reses)
|
||||
resp = (test_cli20.MyResp(200), resstr)
|
||||
path = getattr(self.client, resources + '_path')
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(resp)
|
||||
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(cmd, 'get_client')
|
||||
self.mox.StubOutWithMock(self.client.httpclient, 'request')
|
||||
cmd.get_client().AndReturn(self.client)
|
||||
setup_list_stub('networks', data, '')
|
||||
cmd.get_client().AndReturn(self.client)
|
||||
filters = ''
|
||||
for n in data:
|
||||
for s in n['subnets']:
|
||||
filters = filters + "&id=%s" % s
|
||||
setup_list_stub('subnets',
|
||||
[{'id': 'mysubid1', 'cidr': '192.168.1.0/24'},
|
||||
{'id': 'mysubid2', 'cidr': '172.16.0.0/24'},
|
||||
{'id': 'mysubid3', 'cidr': '10.1.1.0/24'}],
|
||||
query='fields=id&fields=cidr' + filters)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
args = []
|
||||
cmd_parser = cmd.get_parser('list_networks')
|
||||
parsed_args = cmd_parser.parse_args(args)
|
||||
result = cmd.get_data(parsed_args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
_result = [x for x in result[1]]
|
||||
self.assertEqual(len(_result), len(expected))
|
||||
for res, exp in zip(_result, expected):
|
||||
self.assertEqual(len(res), len(exp))
|
||||
for a, b in zip(res, exp):
|
||||
self.assertEqual(a, b)
|
||||
|
||||
def test_list_nets_extend_subnets(self):
|
||||
data = [{'id': 'netid1', 'name': 'net1', 'subnets': ['mysubid1']},
|
||||
{'id': 'netid2', 'name': 'net2', 'subnets': ['mysubid2',
|
||||
'mysubid3']}]
|
||||
# id, name, subnets
|
||||
expected = [('netid1', 'net1', 'mysubid1 192.168.1.0/24'),
|
||||
('netid2', 'net2',
|
||||
'mysubid2 172.16.0.0/24\nmysubid3 10.1.1.0/24')]
|
||||
self._test_list_nets_extend_subnets(data, expected)
|
||||
|
||||
def test_list_nets_extend_subnets_no_subnet(self):
|
||||
data = [{'id': 'netid1', 'name': 'net1', 'subnets': ['mysubid1']},
|
||||
{'id': 'netid2', 'name': 'net2', 'subnets': ['mysubid4']}]
|
||||
# id, name, subnets
|
||||
expected = [('netid1', 'net1', 'mysubid1 192.168.1.0/24'),
|
||||
('netid2', 'net2', 'mysubid4 ')]
|
||||
self._test_list_nets_extend_subnets(data, expected)
|
||||
|
||||
def test_list_nets_fields(self):
|
||||
"""List nets: --fields a --fields b -- --fields c d."""
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_networks(cmd,
|
||||
fields_1=['a', 'b'], fields_2=['c', 'd'])
|
||||
|
||||
def _test_list_nets_columns(self, cmd, returned_body,
|
||||
args=['-f', 'json']):
|
||||
resources = 'networks'
|
||||
self.mox.StubOutWithMock(network.ListNetwork, "extend_list")
|
||||
network.ListNetwork.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
self._test_list_columns(cmd, resources, returned_body, args=args)
|
||||
|
||||
def test_list_nets_defined_column(self):
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
returned_body = {"networks": [{"name": "buildname3",
|
||||
"id": "id3",
|
||||
"tenant_id": "tenant_3",
|
||||
"subnets": []}]}
|
||||
self._test_list_nets_columns(cmd, returned_body,
|
||||
args=['-f', 'json', '-c', 'id'])
|
||||
_str = self.fake_stdout.make_string()
|
||||
returned_networks = utils.loads(_str)
|
||||
self.assertEqual(1, len(returned_networks))
|
||||
net = returned_networks[0]
|
||||
self.assertEqual(1, len(net))
|
||||
self.assertEqual("id", net.keys()[0])
|
||||
|
||||
def test_list_nets_with_default_column(self):
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
returned_body = {"networks": [{"name": "buildname3",
|
||||
"id": "id3",
|
||||
"tenant_id": "tenant_3",
|
||||
"subnets": []}]}
|
||||
self._test_list_nets_columns(cmd, returned_body)
|
||||
_str = self.fake_stdout.make_string()
|
||||
returned_networks = utils.loads(_str)
|
||||
self.assertEqual(1, len(returned_networks))
|
||||
net = returned_networks[0]
|
||||
self.assertEqual(3, len(net))
|
||||
self.assertEqual(0, len(set(net) ^ set(cmd.list_columns)))
|
||||
|
||||
def test_list_external_nets_empty_with_column(self):
|
||||
resources = "networks"
|
||||
cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
self.mox.StubOutWithMock(network.ListNetwork, "extend_list")
|
||||
network.ListNetwork.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
reses = {resources: []}
|
||||
resstr = self.client.serialize(reses)
|
||||
# url method body
|
||||
query = "router%3Aexternal=True&id=myfakeid"
|
||||
args = ['-c', 'id', '--', '--id', 'myfakeid']
|
||||
path = getattr(self.client, resources + "_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token',
|
||||
test_cli20.TOKEN)).AndReturn(
|
||||
(test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser("list_" + resources)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
_str = self.fake_stdout.make_string()
|
||||
self.assertEqual('\n', _str)
|
||||
|
||||
def _test_list_external_nets(self, resources, cmd,
|
||||
detail=False, tags=[],
|
||||
fields_1=[], fields_2=[]):
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
self.mox.StubOutWithMock(network.ListNetwork, "extend_list")
|
||||
network.ListNetwork.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
reses = {resources: [{'id': 'myid1', },
|
||||
{'id': 'myid2', }, ], }
|
||||
|
||||
resstr = self.client.serialize(reses)
|
||||
|
||||
# url method body
|
||||
query = ""
|
||||
args = detail and ['-D', ] or []
|
||||
if fields_1:
|
||||
for field in fields_1:
|
||||
args.append('--fields')
|
||||
args.append(field)
|
||||
if tags:
|
||||
args.append('--')
|
||||
args.append("--tag")
|
||||
for tag in tags:
|
||||
args.append(tag)
|
||||
if (not tags) and fields_2:
|
||||
args.append('--')
|
||||
if fields_2:
|
||||
args.append("--fields")
|
||||
for field in fields_2:
|
||||
args.append(field)
|
||||
fields_1.extend(fields_2)
|
||||
for field in fields_1:
|
||||
if query:
|
||||
query += "&fields=" + field
|
||||
else:
|
||||
query = "fields=" + field
|
||||
if query:
|
||||
query += '&router%3Aexternal=True'
|
||||
else:
|
||||
query += 'router%3Aexternal=True'
|
||||
for tag in tags:
|
||||
if query:
|
||||
query += "&tag=" + tag
|
||||
else:
|
||||
query = "tag=" + tag
|
||||
if detail:
|
||||
query = query and query + '&verbose=True' or 'verbose=True'
|
||||
path = getattr(self.client, resources + "_path")
|
||||
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser("list_" + resources)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
_str = self.fake_stdout.make_string()
|
||||
|
||||
self.assertIn('myid1', _str)
|
||||
|
||||
def test_list_external_nets_detail(self):
|
||||
"""list external nets: -D."""
|
||||
resources = "networks"
|
||||
cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_external_nets(resources, cmd, True)
|
||||
|
||||
def test_list_external_nets_tags(self):
|
||||
"""List external nets: -- --tags a b."""
|
||||
resources = "networks"
|
||||
cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_external_nets(resources,
|
||||
cmd, tags=['a', 'b'])
|
||||
|
||||
def test_list_external_nets_detail_tags(self):
|
||||
"""List external nets: -D -- --tags a b."""
|
||||
resources = "networks"
|
||||
cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_external_nets(resources, cmd,
|
||||
detail=True, tags=['a', 'b'])
|
||||
|
||||
def test_list_externel_nets_fields(self):
|
||||
"""List external nets: --fields a --fields b -- --fields c d."""
|
||||
resources = "networks"
|
||||
cmd = network.ListExternalNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_external_nets(resources, cmd,
|
||||
fields_1=['a', 'b'],
|
||||
fields_2=['c', 'd'])
|
||||
|
||||
def test_update_network_exception(self):
|
||||
"""Update net: myid."""
|
||||
resource = 'network'
|
||||
cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self.assertRaises(exceptions.CommandError, self._test_update_resource,
|
||||
resource, cmd, 'myid', ['myid'], {})
|
||||
|
||||
def test_update_network(self):
|
||||
"""Update net: myid --name myname --tags a b."""
|
||||
resource = 'network'
|
||||
cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'myname', 'tags': ['a', 'b'], }
|
||||
)
|
||||
|
||||
def test_update_network_with_unicode(self):
|
||||
"""Update net: myid --name u'\u7f51\u7edc' --tags a b."""
|
||||
resource = 'network'
|
||||
cmd = network.UpdateNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', u'\u7f51\u7edc',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': u'\u7f51\u7edc',
|
||||
'tags': ['a', 'b'], }
|
||||
)
|
||||
|
||||
def test_show_network(self):
|
||||
"""Show net: --fields id --fields name myid."""
|
||||
resource = 'network'
|
||||
cmd = network.ShowNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def test_delete_network(self):
|
||||
"""Delete net: myid."""
|
||||
resource = 'network'
|
||||
cmd = network.DeleteNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def _test_extend_list(self, mox_calls):
|
||||
data = [{'id': 'netid%d' % i, 'name': 'net%d' % i,
|
||||
'subnets': ['mysubid%d' % i]}
|
||||
for i in range(10)]
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, 'subnets_path')
|
||||
cmd = network.ListNetwork(test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
mox_calls(path, data)
|
||||
self.mox.ReplayAll()
|
||||
known_args, _vs = cmd.get_parser('create_subnets').parse_known_args()
|
||||
cmd.extend_list(data, known_args)
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def _build_test_data(self, data):
|
||||
subnet_ids = []
|
||||
response = []
|
||||
filters = ""
|
||||
for n in data:
|
||||
if 'subnets' in n:
|
||||
subnet_ids.extend(n['subnets'])
|
||||
for subnet_id in n['subnets']:
|
||||
filters = "%s&id=%s" % (filters, subnet_id)
|
||||
response.append({'id': subnet_id,
|
||||
'cidr': '192.168.0.0/16'})
|
||||
resp_str = self.client.serialize({'subnets': response})
|
||||
resp = (test_cli20.MyResp(200), resp_str)
|
||||
return filters, resp
|
||||
|
||||
def test_extend_list(self):
|
||||
def mox_calls(path, data):
|
||||
filters, response = self._build_test_data(data)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, 'fields=id&fields=cidr' + filters),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(response)
|
||||
|
||||
self._test_extend_list(mox_calls)
|
||||
|
||||
def test_extend_list_exceed_max_uri_len(self):
|
||||
def mox_calls(path, data):
|
||||
sub_data_lists = [data[:len(data) - 1], data[len(data) - 1:]]
|
||||
filters, response = self._build_test_data(data)
|
||||
|
||||
# 1 char of extra URI len will cause a split in 2 requests
|
||||
self.mox.StubOutWithMock(self.client, "_check_uri_length")
|
||||
self.client._check_uri_length(mox.IgnoreArg()).AndRaise(
|
||||
exceptions.RequestURITooLong(excess=1))
|
||||
|
||||
for data in sub_data_lists:
|
||||
filters, response = self._build_test_data(data)
|
||||
self.client._check_uri_length(mox.IgnoreArg()).AndReturn(None)
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path,
|
||||
'fields=id&fields=cidr%s' % filters),
|
||||
'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(response)
|
||||
|
||||
self._test_extend_list(mox_calls)
|
||||
|
||||
|
||||
class CLITestV20NetworkXML(CLITestV20NetworkJSON):
|
||||
format = 'xml'
|
@ -1,110 +0,0 @@
|
||||
# Copyright 2013 Cisco Systems Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Kyle Mestery, Cisco Systems, Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import networkprofile
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20NetworkProfile(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_networkprofile(self):
|
||||
"""Create networkprofile: myid."""
|
||||
resource = 'network_profile'
|
||||
cmd = networkprofile.CreateNetworkProfile(test_cli20.
|
||||
MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
segment_type = 'vlan'
|
||||
args = [name, segment_type]
|
||||
position_names = ['name', 'segment_type']
|
||||
position_values = [name, segment_type]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_networkprofile_detail(self):
|
||||
"""List networkprofile: -D."""
|
||||
resources = 'network_profiles'
|
||||
cmd = networkprofile.ListNetworkProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd, True,
|
||||
response_contents=contents)
|
||||
|
||||
def test_list_networkprofile_known_option_after_unknown(self):
|
||||
"""List networkprofile: -- --tags a b --request-format xml."""
|
||||
resources = 'network_profiles'
|
||||
cmd = networkprofile.ListNetworkProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd, tags=['a', 'b'],
|
||||
response_contents=contents)
|
||||
|
||||
def test_list_networkprofile_fields(self):
|
||||
"""List networkprofile: --fields a --fields b -- --fields c d."""
|
||||
resources = 'network_profiles'
|
||||
cmd = networkprofile.ListNetworkProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd,
|
||||
fields_1=['a', 'b'], fields_2=['c', 'd'],
|
||||
response_contents=contents)
|
||||
|
||||
def test_show_networkprofile(self):
|
||||
"""Show networkprofile: --fields id --fields name myid."""
|
||||
resource = 'network_profile'
|
||||
cmd = networkprofile.ShowNetworkProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def test_delete_networkprofile(self):
|
||||
"""Delete networkprofile: myid."""
|
||||
resource = 'network_profile'
|
||||
cmd = networkprofile.DeleteNetworkProfile(test_cli20.
|
||||
MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_create_networkprofile_trunk(self):
|
||||
"""Create networkprofile: myid."""
|
||||
resource = 'network_profile'
|
||||
cmd = networkprofile.CreateNetworkProfile(test_cli20.
|
||||
MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
segment_type = 'trunk'
|
||||
args = [name, segment_type, '--sub_type', 'vlan']
|
||||
position_names = ['name', 'segment_type', ]
|
||||
position_values = [name, segment_type, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
sub_type='vlan')
|
||||
|
||||
def test_list_networkprofile_trunk_detail(self):
|
||||
"""List networkprofile: -D."""
|
||||
resources = 'network_profiles'
|
||||
cmd = networkprofile.ListNetworkProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'trunk',
|
||||
'--sub_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd, True,
|
||||
response_contents=contents)
|
@ -1,264 +0,0 @@
|
||||
# Copyright 2012 VMware, Inc
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.neutron.v2_0.nsx import networkgateway as nwgw
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20NetworkGatewayJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
gw_resource = "network_gateway"
|
||||
dev_resource = "gateway_device"
|
||||
|
||||
def setUp(self):
|
||||
super(CLITestV20NetworkGatewayJSON, self).setUp(
|
||||
plurals={'devices': 'device',
|
||||
'network_gateways': 'network_gateway'})
|
||||
|
||||
def test_create_gateway(self):
|
||||
cmd = nwgw.CreateNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'gw-test'
|
||||
myid = 'myid'
|
||||
args = [name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(self.gw_resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_gateway_with_tenant(self):
|
||||
cmd = nwgw.CreateNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'gw-test'
|
||||
myid = 'myid'
|
||||
args = ['--tenant_id', 'tenantid', name]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(self.gw_resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_gateway_with_device(self):
|
||||
cmd = nwgw.CreateNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'gw-test'
|
||||
myid = 'myid'
|
||||
args = ['--device', 'device_id=test', name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(self.gw_resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
devices=[{'device_id': 'test'}])
|
||||
|
||||
def test_list_gateways(self):
|
||||
resources = '%ss' % self.gw_resource
|
||||
cmd = nwgw.ListNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_update_gateway(self):
|
||||
cmd = nwgw.UpdateNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(self.gw_resource, cmd, 'myid',
|
||||
['myid', '--name', 'higuain'],
|
||||
{'name': 'higuain'})
|
||||
|
||||
def test_delete_gateway(self):
|
||||
cmd = nwgw.DeleteNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(self.gw_resource, cmd, myid, args)
|
||||
|
||||
def test_show_gateway(self):
|
||||
cmd = nwgw.ShowNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(self.gw_resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def test_connect_network_to_gateway(self):
|
||||
cmd = nwgw.ConnectNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['gw_id', 'net_id',
|
||||
'--segmentation-type', 'edi',
|
||||
'--segmentation-id', '7']
|
||||
self._test_update_resource_action(self.gw_resource, cmd, 'gw_id',
|
||||
'connect_network',
|
||||
args,
|
||||
{'network_id': 'net_id',
|
||||
'segmentation_type': 'edi',
|
||||
'segmentation_id': '7'})
|
||||
|
||||
def test_disconnect_network_from_gateway(self):
|
||||
cmd = nwgw.DisconnectNetworkGateway(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['gw_id', 'net_id',
|
||||
'--segmentation-type', 'edi',
|
||||
'--segmentation-id', '7']
|
||||
self._test_update_resource_action(self.gw_resource, cmd, 'gw_id',
|
||||
'disconnect_network',
|
||||
args,
|
||||
{'network_id': 'net_id',
|
||||
'segmentation_type': 'edi',
|
||||
'segmentation_id': '7'})
|
||||
|
||||
def _test_create_gateway_device(self,
|
||||
name,
|
||||
connector_type,
|
||||
connector_ip,
|
||||
client_certificate=None,
|
||||
client_certificate_file=None,
|
||||
must_raise=False):
|
||||
cmd = nwgw.CreateGatewayDevice(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
extra_body = {'connector_type': connector_type,
|
||||
'connector_ip': connector_ip,
|
||||
'client_certificate': client_certificate}
|
||||
self.mox.StubOutWithMock(nwgw, 'read_cert_file')
|
||||
if client_certificate_file:
|
||||
nwgw.read_cert_file(mox.IgnoreArg()).AndReturn('xyz')
|
||||
extra_body['client_certificate'] = 'xyz'
|
||||
self.mox.ReplayAll()
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
args = []
|
||||
for (k, v) in extra_body.iteritems():
|
||||
if (k == 'client_certificate' and client_certificate_file):
|
||||
v = client_certificate_file
|
||||
k = 'client_certificate_file'
|
||||
# Append argument only if value for it was specified
|
||||
if v:
|
||||
args.extend(['--%s' % k.replace('_', '-'), v])
|
||||
# The following is just for verifying the call fails as expected when
|
||||
# both certificate and certificate file are specified. The extra
|
||||
# argument added is client-certificate since the loop above added
|
||||
# client-certificate-file
|
||||
if client_certificate_file and client_certificate:
|
||||
args.extend(['--client-certificate', client_certificate_file])
|
||||
args.append(name)
|
||||
if must_raise:
|
||||
with test_cli20.capture_std_streams():
|
||||
self.assertRaises(
|
||||
SystemExit, self._test_create_resource,
|
||||
self.dev_resource, cmd, name, myid, args,
|
||||
position_names, position_values, extra_body=extra_body)
|
||||
else:
|
||||
self._test_create_resource(
|
||||
self.dev_resource, cmd, name, myid, args,
|
||||
position_names, position_values, extra_body=extra_body)
|
||||
self.mox.UnsetStubs()
|
||||
|
||||
def test_create_gateway_device(self):
|
||||
self._test_create_gateway_device('dev_test', 'stt', '1.1.1.1', 'xyz')
|
||||
|
||||
def test_create_gateway_device_with_certfile(self):
|
||||
self._test_create_gateway_device('dev_test', 'stt', '1.1.1.1',
|
||||
client_certificate_file='some_file')
|
||||
|
||||
def test_create_gateway_device_invalid_connector_type_fails(self):
|
||||
self._test_create_gateway_device('dev_test', 'ciccio',
|
||||
'1.1.1.1', client_certificate='xyz',
|
||||
must_raise=True)
|
||||
|
||||
def test_create_gateway_device_missing_connector_ip_fails(self):
|
||||
self._test_create_gateway_device('dev_test', 'stt',
|
||||
None, client_certificate='xyz',
|
||||
must_raise=True)
|
||||
|
||||
def test_create_gateway_device_missing_certificates_fails(self):
|
||||
self._test_create_gateway_device('dev_test', 'stt', '1.1.1.1',
|
||||
must_raise=True)
|
||||
|
||||
def test_create_gateway_device_with_cert_and_cert_file_fails(self):
|
||||
self._test_create_gateway_device('dev_test', 'stt', '1.1.1.1',
|
||||
client_certificate='xyz',
|
||||
client_certificate_file='some_file',
|
||||
must_raise=True)
|
||||
|
||||
def _test_update_gateway_device(self,
|
||||
name=None,
|
||||
connector_type=None,
|
||||
connector_ip=None,
|
||||
client_certificate=None,
|
||||
client_certificate_file=None,
|
||||
must_raise=False):
|
||||
cmd = nwgw.UpdateGatewayDevice(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
extra_body = {}
|
||||
self.mox.StubOutWithMock(nwgw, 'read_cert_file')
|
||||
if client_certificate_file:
|
||||
nwgw.read_cert_file(mox.IgnoreArg()).AndReturn('xyz')
|
||||
self.mox.ReplayAll()
|
||||
args = [myid]
|
||||
|
||||
def process_arg(argname, arg):
|
||||
if arg:
|
||||
extra_body[argname] = arg
|
||||
args.extend(['--%s' % argname.replace('_', '-'), arg])
|
||||
|
||||
process_arg('name', name)
|
||||
process_arg('connector_type', connector_type)
|
||||
process_arg('connector_ip', connector_ip)
|
||||
process_arg('client_certificate', client_certificate)
|
||||
if client_certificate_file:
|
||||
extra_body['client_certificate'] = 'xyz'
|
||||
args.extend(['--client-certificate-file',
|
||||
client_certificate_file])
|
||||
if must_raise:
|
||||
with test_cli20.capture_std_streams():
|
||||
self.assertRaises(
|
||||
SystemExit, self._test_update_resource,
|
||||
self.dev_resource, cmd, myid, args,
|
||||
extrafields=extra_body)
|
||||
else:
|
||||
self._test_update_resource(
|
||||
self.dev_resource, cmd, myid, args,
|
||||
extrafields=extra_body)
|
||||
self.mox.UnsetStubs()
|
||||
|
||||
def test_update_gateway_device(self):
|
||||
self._test_update_gateway_device('dev_test', 'stt', '1.1.1.1', 'xyz')
|
||||
|
||||
def test_update_gateway_device_partial_body(self):
|
||||
self._test_update_gateway_device(name='dev_test',
|
||||
connector_type='stt')
|
||||
|
||||
def test_update_gateway_device_with_certfile(self):
|
||||
self._test_update_gateway_device('dev_test', 'stt', '1.1.1.1',
|
||||
client_certificate_file='some_file')
|
||||
|
||||
def test_update_gateway_device_invalid_connector_type_fails(self):
|
||||
self._test_update_gateway_device('dev_test', 'ciccio',
|
||||
'1.1.1.1', client_certificate='xyz',
|
||||
must_raise=True)
|
||||
|
||||
def test_update_gateway_device_with_cert_and_cert_file_fails(self):
|
||||
self._test_update_gateway_device('dev_test', 'stt', '1.1.1.1',
|
||||
client_certificate='xyz',
|
||||
client_certificate_file='some_file',
|
||||
must_raise=True)
|
||||
|
||||
def test_delete_gateway_device(self):
|
||||
cmd = nwgw.DeleteGatewayDevice(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(self.dev_resource, cmd, myid, args)
|
||||
|
||||
def test_show_gateway_device(self):
|
||||
cmd = nwgw.ShowGatewayDevice(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(self.dev_resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
|
||||
class CLITestV20NetworkGatewayXML(CLITestV20NetworkGatewayJSON):
|
||||
format = 'xml'
|
@ -1,86 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2013 VMware Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.nsx import qos_queue as qos
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20QosQueueJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20QosQueueJSON, self).setUp(
|
||||
plurals={'qos_queues': 'qos_queue'})
|
||||
|
||||
def test_create_qos_queue(self):
|
||||
"""Create a qos queue."""
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.CreateQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
name = 'my_queue'
|
||||
default = False
|
||||
args = ['--default', default, name]
|
||||
position_names = ['name', 'default']
|
||||
position_values = [name, default]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_qos_queue_all_values(self):
|
||||
"""Create a qos queue."""
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.CreateQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
name = 'my_queue'
|
||||
default = False
|
||||
min = '10'
|
||||
max = '40'
|
||||
qos_marking = 'untrusted'
|
||||
dscp = '0'
|
||||
args = ['--default', default, '--min', min, '--max', max,
|
||||
'--qos-marking', qos_marking, '--dscp', dscp, name]
|
||||
position_names = ['name', 'default', 'min', 'max', 'qos_marking',
|
||||
'dscp']
|
||||
position_values = [name, default, min, max, qos_marking, dscp]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_qos_queue(self):
|
||||
resources = "qos_queues"
|
||||
cmd = qos.ListQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_show_qos_queue_id(self):
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.ShowQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
def test_delete_qos_queue(self):
|
||||
resource = 'qos_queue'
|
||||
cmd = qos.DeleteQoSQueue(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
|
||||
class CLITestV20QosQueueXML(CLITestV20QosQueueJSON):
|
||||
format = 'xml'
|
@ -1,59 +0,0 @@
|
||||
# Copyright 2014 Alcatel-Lucent USA Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Ronak Shah, Nuage Networks, Alcatel-Lucent USA Inc.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import netpartition
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20NetPartitionJSON(test_cli20.CLITestV20Base):
|
||||
resource = 'net_partition'
|
||||
|
||||
def test_create_netpartition(self):
|
||||
cmd = netpartition.CreateNetPartition(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = [name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(self.resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_netpartitions(self):
|
||||
resources = '%ss' % self.resource
|
||||
cmd = netpartition.ListNetPartition(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_show_netpartition(self):
|
||||
cmd = netpartition.ShowNetPartition(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(self.resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def test_delete_netpartition(self):
|
||||
cmd = netpartition.DeleteNetPartition(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(self.resource, cmd, myid, args)
|
||||
|
||||
|
||||
class CLITestV20NetPartitionXML(CLITestV20NetPartitionJSON):
|
||||
format = 'xml'
|
@ -1,298 +0,0 @@
|
||||
# Copyright 2014 NEC Corporation.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.neutron.v2_0.nec import packetfilter as pf
|
||||
from neutronclient import shell
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20PacketFilterJSON(test_cli20.CLITestV20Base):
|
||||
def test_create_packetfilter_with_mandatory_params(self):
|
||||
"""Create packetfilter: packetfilter1."""
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.CreatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'packetfilter1'
|
||||
myid = 'myid'
|
||||
args = ['--priority', '30000', '--action', 'allow', 'net1']
|
||||
position_names = ['network_id', 'action', 'priority']
|
||||
position_values = ['net1', 'allow', '30000']
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_packetfilter_with_all_params(self):
|
||||
"""Create packetfilter: packetfilter1."""
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.CreatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'packetfilter1'
|
||||
myid = 'myid'
|
||||
args = ['--name', name,
|
||||
'--admin-state-down',
|
||||
'--in-port', 'port1',
|
||||
'--src-mac', '00:11:22:33:44:55',
|
||||
'--dst-mac', 'aa:bb:cc:dd:ee:ff',
|
||||
'--eth-type', '0x0800',
|
||||
'--protocol', 'tcp',
|
||||
'--src-cidr', '10.1.1.0/24',
|
||||
'--dst-cidr', '10.2.2.0/24',
|
||||
'--src-port', '40001',
|
||||
'--dst-port', '4000',
|
||||
'--priority', '30000',
|
||||
'--action', 'drop', 'net1']
|
||||
params = {'network_id': 'net1',
|
||||
'action': 'drop',
|
||||
'priority': '30000',
|
||||
'name': name,
|
||||
'admin_state_up': False,
|
||||
'in_port': 'port1',
|
||||
'src_mac': '00:11:22:33:44:55',
|
||||
'dst_mac': 'aa:bb:cc:dd:ee:ff',
|
||||
'eth_type': '0x0800',
|
||||
'protocol': 'tcp',
|
||||
'src_cidr': '10.1.1.0/24',
|
||||
'dst_cidr': '10.2.2.0/24',
|
||||
'src_port': '40001',
|
||||
'dst_port': '4000',
|
||||
}
|
||||
position_names = sorted(params)
|
||||
position_values = [params[k] for k in sorted(params)]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_packetfilters_detail(self):
|
||||
"""list packetfilters: -D."""
|
||||
resources = "packet_filters"
|
||||
cmd = pf.ListPacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
response_contents = [{'id': 'myid1', 'network_id': 'net1'},
|
||||
{'id': 'myid2', 'network_id': 'net2'}]
|
||||
self._test_list_resources(resources, cmd, True,
|
||||
response_contents=response_contents)
|
||||
|
||||
def _stubout_extend_list(self):
|
||||
self.mox.StubOutWithMock(pf.ListPacketFilter, "extend_list")
|
||||
pf.ListPacketFilter.extend_list(mox.IsA(list), mox.IgnoreArg())
|
||||
|
||||
def test_list_packetfilters_pagination(self):
|
||||
resources = "packet_filters"
|
||||
cmd = pf.ListPacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._stubout_extend_list()
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_packetfilters_sort(self):
|
||||
"""list packetfilters: --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "packet_filters"
|
||||
cmd = pf.ListPacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._stubout_extend_list()
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_packetfilters_limit(self):
|
||||
"""list packetfilters: -P."""
|
||||
resources = "packet_filters"
|
||||
cmd = pf.ListPacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._stubout_extend_list()
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_update_packetfilter(self):
|
||||
"""Update packetfilter: myid --name myname --tags a b."""
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.UpdatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname'],
|
||||
{'name': 'myname'}
|
||||
)
|
||||
|
||||
def test_update_packetfilter_with_all_params(self):
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.UpdatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'packetfilter1'
|
||||
args = ['--name', name,
|
||||
'--admin-state', 'True',
|
||||
'--src-mac', '00:11:22:33:44:55',
|
||||
'--dst-mac', 'aa:bb:cc:dd:ee:ff',
|
||||
'--eth-type', '0x0800',
|
||||
'--protocol', 'tcp',
|
||||
'--src-cidr', '10.1.1.0/24',
|
||||
'--dst-cidr', '10.2.2.0/24',
|
||||
'--src-port', '40001',
|
||||
'--dst-port', '4000',
|
||||
'--priority', '30000',
|
||||
'--action', 'drop',
|
||||
'myid'
|
||||
]
|
||||
params = {'action': 'drop',
|
||||
'priority': '30000',
|
||||
'name': name,
|
||||
'admin_state_up': True,
|
||||
'src_mac': '00:11:22:33:44:55',
|
||||
'dst_mac': 'aa:bb:cc:dd:ee:ff',
|
||||
'eth_type': '0x0800',
|
||||
'protocol': 'tcp',
|
||||
'src_cidr': '10.1.1.0/24',
|
||||
'dst_cidr': '10.2.2.0/24',
|
||||
'src_port': '40001',
|
||||
'dst_port': '4000',
|
||||
}
|
||||
# position_names = sorted(params)
|
||||
# position_values = [params[k] for k in sorted(params)]
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
args, params)
|
||||
|
||||
def test_update_packetfilter_admin_state_false(self):
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.UpdatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--admin-state', 'False', 'myid']
|
||||
params = {'admin_state_up': False}
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
args, params)
|
||||
|
||||
def test_update_packetfilter_exception(self):
|
||||
"""Update packetfilter: myid."""
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.UpdatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
exc = self.assertRaises(exceptions.CommandError,
|
||||
self._test_update_resource,
|
||||
resource, cmd, 'myid', ['myid'], {})
|
||||
self.assertEqual('Must specify new values to update packet_filter',
|
||||
unicode(exc))
|
||||
|
||||
def test_delete_packetfilter(self):
|
||||
"""Delete packetfilter: myid."""
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.DeletePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_show_packetfilter(self):
|
||||
"""Show packetfilter: myid."""
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.ShowPacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
|
||||
class CLITestV20PacketFilterXML(CLITestV20PacketFilterJSON):
|
||||
format = 'xml'
|
||||
|
||||
|
||||
class CLITestV20PacketFilterValidateParam(test_cli20.CLITestV20Base):
|
||||
def _test_create_packetfilter_pass_validation(self, cmdline=None,
|
||||
params=None, base_args=None):
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.CreatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'packetfilter1'
|
||||
myid = 'myid'
|
||||
if base_args is None:
|
||||
args = '--priority 30000 --action allow net1'.split()
|
||||
else:
|
||||
args = base_args.split()
|
||||
if cmdline:
|
||||
args += cmdline.split()
|
||||
_params = {'network_id': 'net1',
|
||||
'action': 'allow',
|
||||
'priority': '30000'}
|
||||
if params:
|
||||
_params.update(params)
|
||||
position_names = sorted(_params)
|
||||
position_values = [_params[k] for k in sorted(_params)]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def _test_create_packetfilter_negative_validation(self, cmdline):
|
||||
resource = 'packet_filter'
|
||||
cmd = pf.CreatePacketFilter(test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
cmd_parser = cmd.get_parser('create_' + resource)
|
||||
args = cmdline.split()
|
||||
self.assertRaises(exceptions.CommandError,
|
||||
shell.run_command,
|
||||
cmd, cmd_parser, args)
|
||||
|
||||
def test_create_pf_hex_priority(self):
|
||||
self._test_create_packetfilter_pass_validation(
|
||||
base_args='--priority 0xffff --action allow net1',
|
||||
params={'priority': '0xffff'})
|
||||
|
||||
def test_create_pf_hex_src_port(self):
|
||||
self._test_create_packetfilter_pass_validation(
|
||||
cmdline='--src-port 0xffff', params={'src_port': '0xffff'})
|
||||
|
||||
def test_create_pf_hex_dst_port(self):
|
||||
self._test_create_packetfilter_pass_validation(
|
||||
cmdline='--dst-port 0xffff', params={'dst_port': '0xffff'})
|
||||
|
||||
def test_create_pf_ip_proto_zero(self):
|
||||
self._test_create_packetfilter_pass_validation(
|
||||
cmdline='--protocol 0', params={'protocol': '0'})
|
||||
|
||||
def test_create_pf_ip_proto_max_hex(self):
|
||||
self._test_create_packetfilter_pass_validation(
|
||||
cmdline='--protocol 0xff', params={'protocol': '0xff'})
|
||||
|
||||
def test_create_pf_ip_proto_with_names(self):
|
||||
for proto in ['tcp', 'xxxx']:
|
||||
self._test_create_packetfilter_pass_validation(
|
||||
cmdline='--protocol ' + proto, params={'protocol': proto})
|
||||
|
||||
def test_create_pf_negative_priority(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--priority -1 --action allow net1')
|
||||
|
||||
def test_create_pf_too_big_priority(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--priority 65536 --action allow net1')
|
||||
|
||||
def test_create_pf_negative_src_port(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--src-port -1 --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_too_big_src_port(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--src-port 65536 --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_negative_dst_port(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--dst-port -1 --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_too_big_dst_port(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--dst-port 65536 --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_negative_protocol(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--protocol -1 --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_too_big_hex_protocol(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--protocol 0x100 --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_invalid_src_cidr(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--src-cidr invalid --priority 20000 --action allow net1')
|
||||
|
||||
def test_create_pf_invalid_dst_cidr(self):
|
||||
self._test_create_packetfilter_negative_validation(
|
||||
'--dst-cidr invalid --priority 20000 --action allow net1')
|
@ -1,73 +0,0 @@
|
||||
# Copyright 2013 Cisco Systems Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Kyle Mestery, Cisco Systems, Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import policyprofile
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20PolicyProfile(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_list_policyprofile_detail(self):
|
||||
"""List policyprofile: -D."""
|
||||
resources = 'policy_profiles'
|
||||
cmd = policyprofile.ListPolicyProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd, True,
|
||||
response_contents=contents)
|
||||
|
||||
def test_list_policyprofile_known_option_after_unknown(self):
|
||||
"""List policyprofile: -- --tags a b --request-format xml."""
|
||||
resources = 'policy_profiles'
|
||||
cmd = policyprofile.ListPolicyProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd, tags=['a', 'b'],
|
||||
response_contents=contents)
|
||||
|
||||
def test_list_policyprofile_fields(self):
|
||||
"""List policyprofile: --fields a --fields b -- --fields c d."""
|
||||
resources = 'policy_profiles'
|
||||
cmd = policyprofile.ListPolicyProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
contents = [{'name': 'myname', 'segment_type': 'vlan'}]
|
||||
self._test_list_resources(resources, cmd,
|
||||
fields_1=['a', 'b'], fields_2=['c', 'd'],
|
||||
response_contents=contents)
|
||||
|
||||
def test_show_policyprofile(self):
|
||||
"""Show policyprofile: --fields id --fields name myid."""
|
||||
resource = 'policy_profile'
|
||||
cmd = policyprofile.ShowPolicyProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def test_update_policyprofile(self):
|
||||
"""Update policyprofile: myid --name myname --tags a b."""
|
||||
resource = 'policy_profile'
|
||||
cmd = policyprofile.UpdatePolicyProfile(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'myname', 'tags': ['a', 'b'], }
|
||||
)
|
@ -1,416 +0,0 @@
|
||||
# Copyright 2012 OpenStack Foundation.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.neutron.v2_0 import port
|
||||
from neutronclient import shell
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20PortJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20PortJSON, self).setUp(plurals={'tags': 'tag'})
|
||||
|
||||
def test_create_port(self):
|
||||
"""Create port: netid."""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = [netid]
|
||||
position_names = ['network_id']
|
||||
position_values = []
|
||||
position_values.extend([netid])
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_extra_dhcp_opts_args(self):
|
||||
"""Create port: netid --extra_dhcp_opt."""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
extra_dhcp_opts = [{'opt_name': 'bootfile-name',
|
||||
'opt_value': 'pxelinux.0'},
|
||||
{'opt_name': 'tftp-server',
|
||||
'opt_value': '123.123.123.123'},
|
||||
{'opt_name': 'server-ip-address',
|
||||
'opt_value': '123.123.123.45'}]
|
||||
args = [netid]
|
||||
for dhcp_opt in extra_dhcp_opts:
|
||||
args += ['--extra-dhcp-opt',
|
||||
('opt_name=%(opt_name)s,opt_value=%(opt_value)s' %
|
||||
dhcp_opt)]
|
||||
position_names = ['network_id', 'extra_dhcp_opts']
|
||||
position_values = [netid, extra_dhcp_opts]
|
||||
position_values.extend([netid])
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_full(self):
|
||||
"""Create port: --mac_address mac --device_id deviceid netid."""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = ['--mac_address', 'mac', '--device_id', 'deviceid', netid]
|
||||
position_names = ['network_id', 'mac_address', 'device_id']
|
||||
position_values = [netid, 'mac', 'deviceid']
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
# Test dashed options
|
||||
args = ['--mac-address', 'mac', '--device-id', 'deviceid', netid]
|
||||
position_names = ['network_id', 'mac_address', 'device_id']
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_tenant(self):
|
||||
"""Create port: --tenant_id tenantid netid."""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = ['--tenant_id', 'tenantid', netid, ]
|
||||
position_names = ['network_id']
|
||||
position_values = []
|
||||
position_values.extend([netid])
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
# Test dashed options
|
||||
args = ['--tenant-id', 'tenantid', netid, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_port_tags(self):
|
||||
"""Create port: netid mac_address device_id --tags a b."""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = [netid, '--tags', 'a', 'b']
|
||||
position_names = ['network_id']
|
||||
position_values = []
|
||||
position_values.extend([netid])
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tags=['a', 'b'])
|
||||
|
||||
def test_create_port_secgroup(self):
|
||||
"""Create port: --security-group sg1_id netid."""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = ['--security-group', 'sg1_id', netid]
|
||||
position_names = ['network_id', 'security_groups']
|
||||
position_values = [netid, ['sg1_id']]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_secgroups(self):
|
||||
"""Create port: <security_groups> netid
|
||||
|
||||
The <security_groups> are
|
||||
--security-group sg1_id --security-group sg2_id
|
||||
"""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = ['--security-group', 'sg1_id',
|
||||
'--security-group', 'sg2_id',
|
||||
netid]
|
||||
position_names = ['network_id', 'security_groups']
|
||||
position_values = [netid, ['sg1_id', 'sg2_id']]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_secgroup_off(self):
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = ['--no-security-group', netid]
|
||||
position_names = ['network_id', 'security_groups']
|
||||
position_values = [netid, []]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_secgroups_list(self):
|
||||
"""Create port: netid <security_groups>
|
||||
The <security_groups> are
|
||||
--security-groups list=true sg_id1 sg_id2
|
||||
"""
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = [netid, '--security-groups', 'list=true', 'sg_id1', 'sg_id2']
|
||||
position_names = ['network_id', 'security_groups']
|
||||
position_values = [netid, ['sg_id1', 'sg_id2']]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_ports(self):
|
||||
"""List ports: -D."""
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_ports_pagination(self):
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_ports_sort(self):
|
||||
"""list ports: --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_ports_limit(self):
|
||||
"""list ports: -P."""
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_list_ports_tags(self):
|
||||
"""List ports: -- --tags a b."""
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, tags=['a', 'b'])
|
||||
|
||||
def test_list_ports_detail_tags(self):
|
||||
"""List ports: -D -- --tags a b."""
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, detail=True, tags=['a', 'b'])
|
||||
|
||||
def test_list_ports_fields(self):
|
||||
"""List ports: --fields a --fields b -- --fields c d."""
|
||||
resources = "ports"
|
||||
cmd = port.ListPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
fields_1=['a', 'b'], fields_2=['c', 'd'])
|
||||
|
||||
def _test_list_router_port(self, resources, cmd,
|
||||
myid, detail=False, tags=[],
|
||||
fields_1=[], fields_2=[]):
|
||||
self.mox.StubOutWithMock(cmd, "get_client")
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
cmd.get_client().MultipleTimes().AndReturn(self.client)
|
||||
reses = {resources: [{'id': 'myid1', },
|
||||
{'id': 'myid2', }, ], }
|
||||
|
||||
resstr = self.client.serialize(reses)
|
||||
|
||||
# url method body
|
||||
query = ""
|
||||
args = detail and ['-D', ] or []
|
||||
|
||||
if fields_1:
|
||||
for field in fields_1:
|
||||
args.append('--fields')
|
||||
args.append(field)
|
||||
args.append(myid)
|
||||
if tags:
|
||||
args.append('--')
|
||||
args.append("--tag")
|
||||
for tag in tags:
|
||||
args.append(tag)
|
||||
if (not tags) and fields_2:
|
||||
args.append('--')
|
||||
if fields_2:
|
||||
args.append("--fields")
|
||||
for field in fields_2:
|
||||
args.append(field)
|
||||
fields_1.extend(fields_2)
|
||||
for field in fields_1:
|
||||
if query:
|
||||
query += "&fields=" + field
|
||||
else:
|
||||
query = "fields=" + field
|
||||
|
||||
for tag in tags:
|
||||
if query:
|
||||
query += "&tag=" + tag
|
||||
else:
|
||||
query = "tag=" + tag
|
||||
if detail:
|
||||
query = query and query + '&verbose=True' or 'verbose=True'
|
||||
query = query and query + '&device_id=%s' or 'device_id=%s'
|
||||
path = getattr(self.client, resources + "_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query % myid), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
cmd_parser = cmd.get_parser("list_" + resources)
|
||||
shell.run_command(cmd, cmd_parser, args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
_str = self.fake_stdout.make_string()
|
||||
|
||||
self.assertIn('myid1', _str)
|
||||
|
||||
def test_list_router_ports(self):
|
||||
"""List router ports: -D."""
|
||||
resources = "ports"
|
||||
cmd = port.ListRouterPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_router_port(resources, cmd,
|
||||
self.test_id, True)
|
||||
|
||||
def test_list_router_ports_tags(self):
|
||||
"""List router ports: -- --tags a b."""
|
||||
resources = "ports"
|
||||
cmd = port.ListRouterPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_router_port(resources, cmd,
|
||||
self.test_id, tags=['a', 'b'])
|
||||
|
||||
def test_list_router_ports_detail_tags(self):
|
||||
"""List router ports: -D -- --tags a b."""
|
||||
resources = "ports"
|
||||
cmd = port.ListRouterPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_router_port(resources, cmd, self.test_id,
|
||||
detail=True, tags=['a', 'b'])
|
||||
|
||||
def test_list_router_ports_fields(self):
|
||||
"""List ports: --fields a --fields b -- --fields c d."""
|
||||
resources = "ports"
|
||||
cmd = port.ListRouterPort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_router_port(resources, cmd, self.test_id,
|
||||
fields_1=['a', 'b'],
|
||||
fields_2=['c', 'd'])
|
||||
|
||||
def test_update_port(self):
|
||||
"""Update port: myid --name myname --tags a b."""
|
||||
resource = 'port'
|
||||
cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'myname', 'tags': ['a', 'b'], }
|
||||
)
|
||||
|
||||
def test_update_port_secgroup(self):
|
||||
resource = 'port'
|
||||
cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = ['--security-group', 'sg1_id', myid]
|
||||
updatefields = {'security_groups': ['sg1_id']}
|
||||
self._test_update_resource(resource, cmd, myid, args, updatefields)
|
||||
|
||||
def test_update_port_secgroups(self):
|
||||
resource = 'port'
|
||||
cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = ['--security-group', 'sg1_id',
|
||||
'--security-group', 'sg2_id',
|
||||
myid]
|
||||
updatefields = {'security_groups': ['sg1_id', 'sg2_id']}
|
||||
self._test_update_resource(resource, cmd, myid, args, updatefields)
|
||||
|
||||
def test_update_port_extra_dhcp_opts(self):
|
||||
"""Update port: myid --extra_dhcp_opt."""
|
||||
resource = 'port'
|
||||
myid = 'myid'
|
||||
args = [myid,
|
||||
'--extra-dhcp-opt',
|
||||
"opt_name=bootfile-name,opt_value=pxelinux.0",
|
||||
'--extra-dhcp-opt',
|
||||
"opt_name=tftp-server,opt_value=123.123.123.123",
|
||||
'--extra-dhcp-opt',
|
||||
"opt_name=server-ip-address,opt_value=123.123.123.45"
|
||||
]
|
||||
updatedfields = {'extra_dhcp_opts': [{'opt_name': 'bootfile-name',
|
||||
'opt_value': 'pxelinux.0'},
|
||||
{'opt_name': 'tftp-server',
|
||||
'opt_value': '123.123.123.123'},
|
||||
{'opt_name': 'server-ip-address',
|
||||
'opt_value': '123.123.123.45'}]}
|
||||
cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, myid, args, updatedfields)
|
||||
|
||||
def test_delete_extra_dhcp_opts_from_port(self):
|
||||
resource = 'port'
|
||||
myid = 'myid'
|
||||
args = [myid,
|
||||
'--extra-dhcp-opt',
|
||||
"opt_name=bootfile-name,opt_value=null",
|
||||
'--extra-dhcp-opt',
|
||||
"opt_name=tftp-server,opt_value=123.123.123.123",
|
||||
'--extra-dhcp-opt',
|
||||
"opt_name=server-ip-address,opt_value=123.123.123.45"
|
||||
]
|
||||
# the client code will change the null to None and send to server,
|
||||
# where its interpreted as delete the DHCP option on the port.
|
||||
updatedfields = {'extra_dhcp_opts': [{'opt_name': 'bootfile-name',
|
||||
'opt_value': None},
|
||||
{'opt_name': 'tftp-server',
|
||||
'opt_value': '123.123.123.123'},
|
||||
{'opt_name': 'server-ip-address',
|
||||
'opt_value': '123.123.123.45'}]}
|
||||
cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, myid, args, updatedfields)
|
||||
|
||||
def test_update_port_security_group_off(self):
|
||||
"""Update port: --no-security-groups myid."""
|
||||
resource = 'port'
|
||||
cmd = port.UpdatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['--no-security-groups', 'myid'],
|
||||
{'security_groups': []})
|
||||
|
||||
def test_show_port(self):
|
||||
"""Show port: --fields id --fields name myid."""
|
||||
resource = 'port'
|
||||
cmd = port.ShowPort(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_delete_port(self):
|
||||
"""Delete port: myid."""
|
||||
resource = 'port'
|
||||
cmd = port.DeletePort(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
|
||||
class CLITestV20PortXML(CLITestV20PortJSON):
|
||||
format = 'xml'
|
@ -1,220 +0,0 @@
|
||||
# Copyright 2012 VMware, Inc
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.neutron.v2_0 import router
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20RouterJSON(test_cli20.CLITestV20Base):
|
||||
def test_create_router(self):
|
||||
"""Create router: router1."""
|
||||
resource = 'router'
|
||||
cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'router1'
|
||||
myid = 'myid'
|
||||
args = [name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_router_tenant(self):
|
||||
"""Create router: --tenant_id tenantid myname."""
|
||||
resource = 'router'
|
||||
cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = ['--tenant_id', 'tenantid', name]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_router_admin_state(self):
|
||||
"""Create router: --admin_state_down myname."""
|
||||
resource = 'router'
|
||||
cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = ['--admin_state_down', name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
admin_state_up=False)
|
||||
|
||||
def test_create_router_distributed(self):
|
||||
"""Create router: --distributed myname."""
|
||||
resource = 'router'
|
||||
cmd = router.CreateRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
args = ['--distributed', name, ]
|
||||
position_names = ['name', ]
|
||||
position_values = [name, ]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
distributed=True)
|
||||
|
||||
def test_list_routers_detail(self):
|
||||
"""list routers: -D."""
|
||||
resources = "routers"
|
||||
cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_routers_pagination(self):
|
||||
resources = "routers"
|
||||
cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_routers_sort(self):
|
||||
"""list routers: --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "routers"
|
||||
cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_routers_limit(self):
|
||||
"""list routers: -P."""
|
||||
resources = "routers"
|
||||
cmd = router.ListRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_update_router_exception(self):
|
||||
"""Update router: myid."""
|
||||
resource = 'router'
|
||||
cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
self.assertRaises(exceptions.CommandError, self._test_update_resource,
|
||||
resource, cmd, 'myid', ['myid'], {})
|
||||
|
||||
def test_update_router(self):
|
||||
"""Update router: myid --name myname --tags a b."""
|
||||
resource = 'router'
|
||||
cmd = router.UpdateRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname'],
|
||||
{'name': 'myname'}
|
||||
)
|
||||
|
||||
def test_delete_router(self):
|
||||
"""Delete router: myid."""
|
||||
resource = 'router'
|
||||
cmd = router.DeleteRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_show_router(self):
|
||||
"""Show router: myid."""
|
||||
resource = 'router'
|
||||
cmd = router.ShowRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args,
|
||||
['id', 'name'])
|
||||
|
||||
def _test_add_remove_interface(self, action, mode, cmd, args):
|
||||
resource = 'router'
|
||||
subcmd = '%s_router_interface' % action
|
||||
if mode == 'port':
|
||||
body = {'port_id': 'portid'}
|
||||
else:
|
||||
body = {'subnet_id': 'subnetid'}
|
||||
if action == 'add':
|
||||
retval = {'subnet_id': 'subnetid', 'port_id': 'portid'}
|
||||
else:
|
||||
retval = None
|
||||
self._test_update_resource_action(resource, cmd, 'myid',
|
||||
subcmd, args,
|
||||
body, retval)
|
||||
|
||||
def test_add_interface_compat(self):
|
||||
"""Add interface to router: myid subnetid."""
|
||||
cmd = router.AddInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'subnetid']
|
||||
self._test_add_remove_interface('add', 'subnet', cmd, args)
|
||||
|
||||
def test_add_interface_by_subnet(self):
|
||||
"""Add interface to router: myid subnet=subnetid."""
|
||||
cmd = router.AddInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'subnet=subnetid']
|
||||
self._test_add_remove_interface('add', 'subnet', cmd, args)
|
||||
|
||||
def test_add_interface_by_port(self):
|
||||
"""Add interface to router: myid port=portid."""
|
||||
cmd = router.AddInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'port=portid']
|
||||
self._test_add_remove_interface('add', 'port', cmd, args)
|
||||
|
||||
def test_del_interface_compat(self):
|
||||
"""Delete interface from router: myid subnetid."""
|
||||
cmd = router.RemoveInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'subnetid']
|
||||
self._test_add_remove_interface('remove', 'subnet', cmd, args)
|
||||
|
||||
def test_del_interface_by_subnet(self):
|
||||
"""Delete interface from router: myid subnet=subnetid."""
|
||||
cmd = router.RemoveInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'subnet=subnetid']
|
||||
self._test_add_remove_interface('remove', 'subnet', cmd, args)
|
||||
|
||||
def test_del_interface_by_port(self):
|
||||
"""Delete interface from router: myid port=portid."""
|
||||
cmd = router.RemoveInterfaceRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'port=portid']
|
||||
self._test_add_remove_interface('remove', 'port', cmd, args)
|
||||
|
||||
def test_set_gateway(self):
|
||||
"""Set external gateway for router: myid externalid."""
|
||||
resource = 'router'
|
||||
cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'externalid']
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
args,
|
||||
{"external_gateway_info":
|
||||
{"network_id": "externalid"}}
|
||||
)
|
||||
|
||||
def test_set_gateway_disable_snat(self):
|
||||
"""set external gateway for router: myid externalid."""
|
||||
resource = 'router'
|
||||
cmd = router.SetGatewayRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['myid', 'externalid', '--disable-snat']
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
args,
|
||||
{"external_gateway_info":
|
||||
{"network_id": "externalid",
|
||||
"enable_snat": False}}
|
||||
)
|
||||
|
||||
def test_remove_gateway(self):
|
||||
"""Remove external gateway from router: externalid."""
|
||||
resource = 'router'
|
||||
cmd = router.RemoveGatewayRouter(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['externalid']
|
||||
self._test_update_resource(resource, cmd, 'externalid',
|
||||
args, {"external_gateway_info": {}}
|
||||
)
|
||||
|
||||
|
||||
class CLITestV20RouterXML(CLITestV20RouterJSON):
|
||||
format = 'xml'
|
@ -1,331 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2012 Red Hat
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
import mox
|
||||
|
||||
from neutronclient.neutron.v2_0 import securitygroup
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base):
|
||||
def test_create_security_group(self):
|
||||
"""Create security group: webservers."""
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.CreateSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'webservers'
|
||||
myid = 'myid'
|
||||
args = [name, ]
|
||||
position_names = ['name']
|
||||
position_values = [name]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_security_group_tenant(self):
|
||||
"""Create security group: webservers."""
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.CreateSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'webservers'
|
||||
description = 'my webservers'
|
||||
myid = 'myid'
|
||||
args = ['--tenant_id', 'tenant_id', '--description', description, name]
|
||||
position_names = ['name', 'description']
|
||||
position_values = [name, description]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenant_id')
|
||||
|
||||
def test_create_security_group_with_description(self):
|
||||
"""Create security group: webservers."""
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.CreateSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'webservers'
|
||||
description = 'my webservers'
|
||||
myid = 'myid'
|
||||
args = [name, '--description', description]
|
||||
position_names = ['name', 'description']
|
||||
position_values = [name, description]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_security_groups(self):
|
||||
resources = "security_groups"
|
||||
cmd = securitygroup.ListSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_security_groups_pagination(self):
|
||||
resources = "security_groups"
|
||||
cmd = securitygroup.ListSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_security_groups_sort(self):
|
||||
resources = "security_groups"
|
||||
cmd = securitygroup.ListSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_security_groups_limit(self):
|
||||
resources = "security_groups"
|
||||
cmd = securitygroup.ListSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_security_group_id(self):
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.ShowSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
def test_show_security_group_id_name(self):
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.ShowSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_delete_security_group(self):
|
||||
"""Delete security group: myid."""
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.DeleteSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_update_security_group(self):
|
||||
"""Update security group: myid --name myname --description desc."""
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.UpdateSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--description', 'mydescription'],
|
||||
{'name': 'myname',
|
||||
'description': 'mydescription'}
|
||||
)
|
||||
|
||||
def test_update_security_group_with_unicode(self):
|
||||
resource = 'security_group'
|
||||
cmd = securitygroup.UpdateSecurityGroup(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', u'\u7f51\u7edc',
|
||||
'--description', u'\u7f51\u7edc'],
|
||||
{'name': u'\u7f51\u7edc',
|
||||
'description': u'\u7f51\u7edc'}
|
||||
)
|
||||
|
||||
def test_create_security_group_rule_full(self):
|
||||
"""Create security group rule."""
|
||||
resource = 'security_group_rule'
|
||||
cmd = securitygroup.CreateSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
direction = 'ingress'
|
||||
ethertype = 'IPv4'
|
||||
protocol = 'tcp'
|
||||
port_range_min = '22'
|
||||
port_range_max = '22'
|
||||
remote_ip_prefix = '10.0.0.0/24'
|
||||
security_group_id = '1'
|
||||
remote_group_id = '1'
|
||||
args = ['--remote_ip_prefix', remote_ip_prefix, '--direction',
|
||||
direction, '--ethertype', ethertype, '--protocol', protocol,
|
||||
'--port_range_min', port_range_min, '--port_range_max',
|
||||
port_range_max, '--remote_group_id', remote_group_id,
|
||||
security_group_id]
|
||||
position_names = ['remote_ip_prefix', 'direction', 'ethertype',
|
||||
'protocol', 'port_range_min', 'port_range_max',
|
||||
'remote_group_id', 'security_group_id']
|
||||
position_values = [remote_ip_prefix, direction, ethertype, protocol,
|
||||
port_range_min, port_range_max, remote_group_id,
|
||||
security_group_id]
|
||||
self._test_create_resource(resource, cmd, None, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_delete_security_group_rule(self):
|
||||
"""Delete security group rule: myid."""
|
||||
resource = 'security_group_rule'
|
||||
cmd = securitygroup.DeleteSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
def test_list_security_group_rules(self):
|
||||
resources = "security_group_rules"
|
||||
cmd = securitygroup.ListSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(securitygroup.ListSecurityGroupRule,
|
||||
"extend_list")
|
||||
securitygroup.ListSecurityGroupRule.extend_list(mox.IsA(list),
|
||||
mox.IgnoreArg())
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_security_group_rules_pagination(self):
|
||||
resources = "security_group_rules"
|
||||
cmd = securitygroup.ListSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(securitygroup.ListSecurityGroupRule,
|
||||
"extend_list")
|
||||
securitygroup.ListSecurityGroupRule.extend_list(mox.IsA(list),
|
||||
mox.IgnoreArg())
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_security_group_rules_sort(self):
|
||||
resources = "security_group_rules"
|
||||
cmd = securitygroup.ListSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(securitygroup.ListSecurityGroupRule,
|
||||
"extend_list")
|
||||
securitygroup.ListSecurityGroupRule.extend_list(mox.IsA(list),
|
||||
mox.IgnoreArg())
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_security_group_rules_limit(self):
|
||||
resources = "security_group_rules"
|
||||
cmd = securitygroup.ListSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(securitygroup.ListSecurityGroupRule,
|
||||
"extend_list")
|
||||
securitygroup.ListSecurityGroupRule.extend_list(mox.IsA(list),
|
||||
mox.IgnoreArg())
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_security_group_rule(self):
|
||||
resource = 'security_group_rule'
|
||||
cmd = securitygroup.ShowSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id'])
|
||||
|
||||
def _test_list_security_group_rules_extend(self, data=None, expected=None,
|
||||
args=[], conv=True,
|
||||
query_field=False):
|
||||
def setup_list_stub(resources, data, query):
|
||||
reses = {resources: data}
|
||||
resstr = self.client.serialize(reses)
|
||||
resp = (test_cli20.MyResp(200), resstr)
|
||||
path = getattr(self.client, resources + '_path')
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, query), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue(
|
||||
'X-Auth-Token', test_cli20.TOKEN)).AndReturn(resp)
|
||||
|
||||
# Setup the default data
|
||||
_data = {'cols': ['id', 'security_group_id', 'remote_group_id'],
|
||||
'data': [('ruleid1', 'myid1', 'myid1'),
|
||||
('ruleid2', 'myid2', 'myid3'),
|
||||
('ruleid3', 'myid2', 'myid2')]}
|
||||
_expected = {'cols': ['id', 'security_group', 'remote_group'],
|
||||
'data': [('ruleid1', 'group1', 'group1'),
|
||||
('ruleid2', 'group2', 'group3'),
|
||||
('ruleid3', 'group2', 'group2')]}
|
||||
if data is None:
|
||||
data = _data
|
||||
list_data = [dict(zip(data['cols'], d)) for d in data['data']]
|
||||
if expected is None:
|
||||
expected = {}
|
||||
expected['cols'] = expected.get('cols', _expected['cols'])
|
||||
expected['data'] = expected.get('data', _expected['data'])
|
||||
|
||||
cmd = securitygroup.ListSecurityGroupRule(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
self.mox.StubOutWithMock(cmd, 'get_client')
|
||||
self.mox.StubOutWithMock(self.client.httpclient, 'request')
|
||||
cmd.get_client().AndReturn(self.client)
|
||||
query = ''
|
||||
if query_field:
|
||||
query = '&'.join(['fields=' + f for f in data['cols']])
|
||||
setup_list_stub('security_group_rules', list_data, query)
|
||||
if conv:
|
||||
cmd.get_client().AndReturn(self.client)
|
||||
sec_ids = set()
|
||||
for n in data['data']:
|
||||
sec_ids.add(n[1])
|
||||
sec_ids.add(n[2])
|
||||
filters = ''
|
||||
for id in sec_ids:
|
||||
filters = filters + "&id=%s" % id
|
||||
setup_list_stub('security_groups',
|
||||
[{'id': 'myid1', 'name': 'group1'},
|
||||
{'id': 'myid2', 'name': 'group2'},
|
||||
{'id': 'myid3', 'name': 'group3'}],
|
||||
query='fields=id&fields=name' + filters)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
cmd_parser = cmd.get_parser('list_security_group_rules')
|
||||
parsed_args = cmd_parser.parse_args(args)
|
||||
result = cmd.get_data(parsed_args)
|
||||
self.mox.VerifyAll()
|
||||
self.mox.UnsetStubs()
|
||||
# Check columns
|
||||
self.assertEqual(result[0], expected['cols'])
|
||||
# Check data
|
||||
_result = [x for x in result[1]]
|
||||
self.assertEqual(len(_result), len(expected['data']))
|
||||
for res, exp in zip(_result, expected['data']):
|
||||
self.assertEqual(len(res), len(exp))
|
||||
self.assertEqual(res, exp)
|
||||
|
||||
def test_list_security_group_rules_extend_source_id(self):
|
||||
self._test_list_security_group_rules_extend()
|
||||
|
||||
def test_list_security_group_rules_extend_no_nameconv(self):
|
||||
expected = {'cols': ['id', 'security_group_id', 'remote_group_id'],
|
||||
'data': [('ruleid1', 'myid1', 'myid1'),
|
||||
('ruleid2', 'myid2', 'myid3'),
|
||||
('ruleid3', 'myid2', 'myid2')]}
|
||||
args = ['--no-nameconv']
|
||||
self._test_list_security_group_rules_extend(expected=expected,
|
||||
args=args, conv=False)
|
||||
|
||||
def test_list_security_group_rules_extend_with_columns(self):
|
||||
args = '-c id -c security_group_id -c remote_group_id'.split()
|
||||
self._test_list_security_group_rules_extend(args=args)
|
||||
|
||||
def test_list_security_group_rules_extend_with_columns_no_id(self):
|
||||
args = '-c id -c security_group -c remote_group'.split()
|
||||
self._test_list_security_group_rules_extend(args=args)
|
||||
|
||||
def test_list_security_group_rules_extend_with_fields(self):
|
||||
args = '-F id -F security_group_id -F remote_group_id'.split()
|
||||
self._test_list_security_group_rules_extend(args=args,
|
||||
query_field=True)
|
||||
|
||||
def test_list_security_group_rules_extend_with_fields_no_id(self):
|
||||
args = '-F id -F security_group -F remote_group'.split()
|
||||
self._test_list_security_group_rules_extend(args=args,
|
||||
query_field=True)
|
||||
|
||||
|
||||
class CLITestV20SecurityGroupsXML(CLITestV20SecurityGroupsJSON):
|
||||
format = 'xml'
|
@ -1,61 +0,0 @@
|
||||
# Copyright 2013 Mirantis Inc.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Eugene Nikanorov, Mirantis Inc.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0 import servicetype
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20ServiceProvidersJSON(test_cli20.CLITestV20Base):
|
||||
id_field = "name"
|
||||
|
||||
def setUp(self):
|
||||
super(CLITestV20ServiceProvidersJSON, self).setUp(
|
||||
plurals={'tags': 'tag'}
|
||||
)
|
||||
|
||||
def test_list_service_providers(self):
|
||||
resources = "service_providers"
|
||||
cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_service_providers_pagination(self):
|
||||
resources = "service_providers"
|
||||
cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_service_providers_sort(self):
|
||||
resources = "service_providers"
|
||||
cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_service_providers_limit(self):
|
||||
resources = "service_providers"
|
||||
cmd = servicetype.ListServiceProvider(test_cli20.MyApp(sys.stdout),
|
||||
None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
|
||||
class CLITestV20ServiceProvidersXML(CLITestV20ServiceProvidersJSON):
|
||||
format = 'xml'
|
@ -1,446 +0,0 @@
|
||||
# Copyright 2012 OpenStack Foundation.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.neutron.v2_0 import subnet
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20SubnetJSON(test_cli20.CLITestV20Base):
|
||||
def setUp(self):
|
||||
super(CLITestV20SubnetJSON, self).setUp(plurals={'tags': 'tag'})
|
||||
|
||||
def test_create_subnet(self):
|
||||
"""Create subnet: --gateway gateway netid cidr."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'cidrvalue'
|
||||
gateway = 'gatewayvalue'
|
||||
args = ['--gateway', gateway, netid, cidr]
|
||||
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
||||
position_values = [4, netid, cidr, gateway]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_subnet_with_no_gateway(self):
|
||||
"""Create subnet: --no-gateway netid cidr."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'cidrvalue'
|
||||
args = ['--no-gateway', netid, cidr]
|
||||
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
||||
position_values = [4, netid, cidr, None]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_subnet_with_bad_gateway_option(self):
|
||||
"""Create sbunet: --no-gateway netid cidr."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'cidrvalue'
|
||||
gateway = 'gatewayvalue'
|
||||
args = ['--gateway', gateway, '--no-gateway', netid, cidr]
|
||||
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
||||
position_values = [4, netid, cidr, None]
|
||||
try:
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
except Exception:
|
||||
return
|
||||
self.fail('No exception for bad gateway option')
|
||||
|
||||
def test_create_subnet_with_enable_and_disable_dhcp(self):
|
||||
"""Create sbunet: --enable-dhcp and --disable-dhcp."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'cidrvalue'
|
||||
args = ['--enable-dhcp', '--disable-dhcp', netid, cidr]
|
||||
position_names = ['ip_version', 'network_id', 'cidr', 'gateway_ip']
|
||||
position_values = [4, netid, cidr, None]
|
||||
try:
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
except exceptions.CommandError:
|
||||
return
|
||||
self.fail('No exception for --enable-dhcp --disable-dhcp option')
|
||||
|
||||
def test_create_subnet_tenant(self):
|
||||
"""Create subnet: --tenant_id tenantid netid cidr."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid', netid, cidr]
|
||||
position_names = ['ip_version', 'network_id', 'cidr']
|
||||
position_values = [4, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_tags(self):
|
||||
"""Create subnet: netid cidr --tags a b."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = [netid, cidr, '--tags', 'a', 'b']
|
||||
position_names = ['ip_version', 'network_id', 'cidr']
|
||||
position_values = [4, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tags=['a', 'b'])
|
||||
|
||||
def test_create_subnet_allocation_pool(self):
|
||||
"""Create subnet: --tenant_id tenantid <allocation_pool> netid cidr.
|
||||
The <allocation_pool> is --allocation_pool start=1.1.1.10,end=1.1.1.20
|
||||
"""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--allocation_pool', 'start=1.1.1.10,end=1.1.1.20',
|
||||
netid, cidr]
|
||||
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
||||
'cidr']
|
||||
pool = [{'start': '1.1.1.10', 'end': '1.1.1.20'}]
|
||||
position_values = [4, pool, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_allocation_pools(self):
|
||||
"""Create subnet: --tenant-id tenantid <pools> netid cidr.
|
||||
The <pools> are --allocation_pool start=1.1.1.10,end=1.1.1.20 and
|
||||
--allocation_pool start=1.1.1.30,end=1.1.1.40
|
||||
"""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--allocation_pool', 'start=1.1.1.10,end=1.1.1.20',
|
||||
'--allocation_pool', 'start=1.1.1.30,end=1.1.1.40',
|
||||
netid, cidr]
|
||||
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
||||
'cidr']
|
||||
pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
|
||||
{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
||||
position_values = [4, pools, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_host_route(self):
|
||||
"""Create subnet: --tenant_id tenantid <host_route> netid cidr.
|
||||
The <host_route> is
|
||||
--host-route destination=172.16.1.0/24,nexthop=1.1.1.20
|
||||
"""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--host-route', 'destination=172.16.1.0/24,nexthop=1.1.1.20',
|
||||
netid, cidr]
|
||||
position_names = ['ip_version', 'host_routes', 'network_id',
|
||||
'cidr']
|
||||
route = [{'destination': '172.16.1.0/24', 'nexthop': '1.1.1.20'}]
|
||||
position_values = [4, route, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_host_routes(self):
|
||||
"""Create subnet: --tenant-id tenantid <host_routes> netid cidr.
|
||||
The <host_routes> are
|
||||
--host-route destination=172.16.1.0/24,nexthop=1.1.1.20 and
|
||||
--host-route destination=172.17.7.0/24,nexthop=1.1.1.40
|
||||
"""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--host-route', 'destination=172.16.1.0/24,nexthop=1.1.1.20',
|
||||
'--host-route', 'destination=172.17.7.0/24,nexthop=1.1.1.40',
|
||||
netid, cidr]
|
||||
position_names = ['ip_version', 'host_routes', 'network_id',
|
||||
'cidr']
|
||||
routes = [{'destination': '172.16.1.0/24', 'nexthop': '1.1.1.20'},
|
||||
{'destination': '172.17.7.0/24', 'nexthop': '1.1.1.40'}]
|
||||
position_values = [4, routes, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_dns_nameservers(self):
|
||||
"""Create subnet: --tenant-id tenantid <dns-nameservers> netid cidr.
|
||||
The <dns-nameservers> are
|
||||
--dns-nameserver 1.1.1.20 and --dns-nameserver 1.1.1.40
|
||||
"""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--dns-nameserver', '1.1.1.20',
|
||||
'--dns-nameserver', '1.1.1.40',
|
||||
netid, cidr]
|
||||
position_names = ['ip_version', 'dns_nameservers', 'network_id',
|
||||
'cidr']
|
||||
nameservers = ['1.1.1.20', '1.1.1.40']
|
||||
position_values = [4, nameservers, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_with_disable_dhcp(self):
|
||||
"""Create subnet: --tenant-id tenantid --disable-dhcp netid cidr."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--disable-dhcp',
|
||||
netid, cidr]
|
||||
position_names = ['ip_version', 'enable_dhcp', 'network_id',
|
||||
'cidr']
|
||||
position_values = [4, False, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_merge_single_plurar(self):
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--allocation-pool', 'start=1.1.1.10,end=1.1.1.20',
|
||||
netid, cidr,
|
||||
'--allocation-pools', 'list=true', 'type=dict',
|
||||
'start=1.1.1.30,end=1.1.1.40']
|
||||
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
||||
'cidr']
|
||||
pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
|
||||
{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
||||
position_values = [4, pools, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_merge_plurar(self):
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
netid, cidr,
|
||||
'--allocation-pools', 'list=true', 'type=dict',
|
||||
'start=1.1.1.30,end=1.1.1.40']
|
||||
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
||||
'cidr']
|
||||
pools = [{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
||||
position_values = [4, pools, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_create_subnet_merge_single_single(self):
|
||||
resource = 'subnet'
|
||||
cmd = subnet.CreateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
cidr = 'prefixvalue'
|
||||
args = ['--tenant_id', 'tenantid',
|
||||
'--allocation-pool', 'start=1.1.1.10,end=1.1.1.20',
|
||||
netid, cidr,
|
||||
'--allocation-pool',
|
||||
'start=1.1.1.30,end=1.1.1.40']
|
||||
position_names = ['ip_version', 'allocation_pools', 'network_id',
|
||||
'cidr']
|
||||
pools = [{'start': '1.1.1.10', 'end': '1.1.1.20'},
|
||||
{'start': '1.1.1.30', 'end': '1.1.1.40'}]
|
||||
position_values = [4, pools, netid, cidr]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values,
|
||||
tenant_id='tenantid')
|
||||
|
||||
def test_list_subnets_detail(self):
|
||||
"""List subnets: -D."""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_subnets_tags(self):
|
||||
"""List subnets: -- --tags a b."""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, tags=['a', 'b'])
|
||||
|
||||
def test_list_subnets_known_option_after_unknown(self):
|
||||
"""List subnets: -- --tags a b --request-format xml."""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, tags=['a', 'b'])
|
||||
|
||||
def test_list_subnets_detail_tags(self):
|
||||
"""List subnets: -D -- --tags a b."""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, detail=True, tags=['a', 'b'])
|
||||
|
||||
def test_list_subnets_fields(self):
|
||||
"""List subnets: --fields a --fields b -- --fields c d."""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
fields_1=['a', 'b'], fields_2=['c', 'd'])
|
||||
|
||||
def test_list_subnets_pagination(self):
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_subnets_sort(self):
|
||||
"""List subnets: --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_subnets_limit(self):
|
||||
"""List subnets: -P."""
|
||||
resources = "subnets"
|
||||
cmd = subnet.ListSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_update_subnet(self):
|
||||
"""Update subnet: myid --name myname --tags a b."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'myname', 'tags': ['a', 'b'], }
|
||||
)
|
||||
|
||||
def test_update_subnet_known_option_before_id(self):
|
||||
"""Update subnet: --request-format json myid --name myname."""
|
||||
# --request-format xml is known option
|
||||
resource = 'subnet'
|
||||
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['--request-format', 'json',
|
||||
'myid', '--name', 'myname'],
|
||||
{'name': 'myname', }
|
||||
)
|
||||
|
||||
def test_update_subnet_known_option_after_id(self):
|
||||
"""Update subnet: myid --name myname --request-format json."""
|
||||
# --request-format xml is known option
|
||||
resource = 'subnet'
|
||||
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--request-format', 'json'],
|
||||
{'name': 'myname', }
|
||||
)
|
||||
|
||||
def test_update_subnet_allocation_pools(self):
|
||||
"""Update subnet: myid --name myname --tags a b."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--allocation-pool',
|
||||
'start=1.2.0.2,end=1.2.0.127',
|
||||
'--request-format', 'json'],
|
||||
{'allocation_pools': [{'start': '1.2.0.2',
|
||||
'end': '1.2.0.127'}]}
|
||||
)
|
||||
|
||||
def test_update_subnet_enable_disable_dhcp(self):
|
||||
"""Update sbunet: --enable-dhcp and --disable-dhcp."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.UpdateSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
try:
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'myname',
|
||||
'--enable-dhcp', '--disable-dhcp'],
|
||||
{'name': 'myname', }
|
||||
)
|
||||
except exceptions.CommandError:
|
||||
return
|
||||
self.fail('No exception for --enable-dhcp --disable-dhcp option')
|
||||
|
||||
def test_show_subnet(self):
|
||||
"""Show subnet: --fields id --fields name myid."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.ShowSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_delete_subnet(self):
|
||||
"""Delete subnet: subnetid."""
|
||||
resource = 'subnet'
|
||||
cmd = subnet.DeleteSubnet(test_cli20.MyApp(sys.stdout), None)
|
||||
myid = 'myid'
|
||||
args = [myid]
|
||||
self._test_delete_resource(resource, cmd, myid, args)
|
||||
|
||||
|
||||
class CLITestV20SubnetXML(CLITestV20SubnetJSON):
|
||||
format = 'xml'
|
@ -1,131 +0,0 @@
|
||||
# Copyright 2012 OpenStack Foundation.
|
||||
# All Rights Reserved
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
|
||||
import uuid
|
||||
|
||||
import mox
|
||||
import testtools
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.neutron import v2_0 as neutronV20
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
from neutronclient.v2_0 import client
|
||||
|
||||
|
||||
class CLITestNameorID(testtools.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
"""Prepare the test environment."""
|
||||
super(CLITestNameorID, self).setUp()
|
||||
self.mox = mox.Mox()
|
||||
self.endurl = test_cli20.ENDURL
|
||||
self.client = client.Client(token=test_cli20.TOKEN,
|
||||
endpoint_url=self.endurl)
|
||||
self.addCleanup(self.mox.VerifyAll)
|
||||
self.addCleanup(self.mox.UnsetStubs)
|
||||
|
||||
def test_get_id_from_id(self):
|
||||
_id = str(uuid.uuid4())
|
||||
reses = {'networks': [{'id': _id, }, ], }
|
||||
resstr = self.client.serialize(reses)
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&id=" + _id), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
returned_id = neutronV20.find_resourceid_by_name_or_id(
|
||||
self.client, 'network', _id)
|
||||
self.assertEqual(_id, returned_id)
|
||||
|
||||
def test_get_id_from_id_then_name_empty(self):
|
||||
_id = str(uuid.uuid4())
|
||||
reses = {'networks': [{'id': _id, }, ], }
|
||||
resstr = self.client.serialize(reses)
|
||||
resstr1 = self.client.serialize({'networks': []})
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&id=" + _id), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr1))
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + _id), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
returned_id = neutronV20.find_resourceid_by_name_or_id(
|
||||
self.client, 'network', _id)
|
||||
self.assertEqual(_id, returned_id)
|
||||
|
||||
def test_get_id_from_name(self):
|
||||
name = 'myname'
|
||||
_id = str(uuid.uuid4())
|
||||
reses = {'networks': [{'id': _id, }, ], }
|
||||
resstr = self.client.serialize(reses)
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
returned_id = neutronV20.find_resourceid_by_name_or_id(
|
||||
self.client, 'network', name)
|
||||
self.assertEqual(_id, returned_id)
|
||||
|
||||
def test_get_id_from_name_multiple(self):
|
||||
name = 'myname'
|
||||
reses = {'networks': [{'id': str(uuid.uuid4())},
|
||||
{'id': str(uuid.uuid4())}]}
|
||||
resstr = self.client.serialize(reses)
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
try:
|
||||
neutronV20.find_resourceid_by_name_or_id(
|
||||
self.client, 'network', name)
|
||||
except exceptions.NeutronClientNoUniqueMatch as ex:
|
||||
self.assertIn('Multiple', ex.message)
|
||||
|
||||
def test_get_id_from_name_notfound(self):
|
||||
name = 'myname'
|
||||
reses = {'networks': []}
|
||||
resstr = self.client.serialize(reses)
|
||||
self.mox.StubOutWithMock(self.client.httpclient, "request")
|
||||
path = getattr(self.client, "networks_path")
|
||||
self.client.httpclient.request(
|
||||
test_cli20.end_url(path, "fields=id&name=" + name), 'GET',
|
||||
body=None,
|
||||
headers=mox.ContainsKeyValue('X-Auth-Token', test_cli20.TOKEN)
|
||||
).AndReturn((test_cli20.MyResp(200), resstr))
|
||||
self.mox.ReplayAll()
|
||||
try:
|
||||
neutronV20.find_resourceid_by_name_or_id(
|
||||
self.client, 'network', name)
|
||||
except exceptions.NeutronClientException as ex:
|
||||
self.assertIn('Unable to find', ex.message)
|
||||
self.assertEqual(404, ex.status_code)
|
@ -1,44 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (C) 2013 Yahoo! Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.neutron.v2_0 import quota as test_quota
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20Quota(test_cli20.CLITestV20Base):
|
||||
def test_show_quota(self):
|
||||
resource = 'quota'
|
||||
cmd = test_quota.ShowQuota(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--tenant-id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args)
|
||||
|
||||
def test_update_quota(self):
|
||||
resource = 'quota'
|
||||
cmd = test_quota.UpdateQuota(
|
||||
test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--tenant-id', self.test_id, '--network', 'test']
|
||||
self.assertRaises(
|
||||
exceptions.NeutronClientException, self._test_update_resource,
|
||||
resource, cmd, self.test_id, args=args,
|
||||
extrafields={'network': 'new'})
|
||||
|
||||
def test_delete_quota_get_parser(self):
|
||||
cmd = test_cli20.MyApp(sys.stdout)
|
||||
test_quota.DeleteQuota(cmd, None).get_parser(cmd)
|
@ -1,212 +0,0 @@
|
||||
# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Swaminathan Vasudevan, Hewlett Packard.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.vpn import ikepolicy
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20VpnIkePolicyJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_ikepolicy_all_params(self):
|
||||
"""vpn-ikepolicy-create all params."""
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.CreateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'ikepolicy1'
|
||||
description = 'my-ike-policy'
|
||||
auth_algorithm = 'sha1'
|
||||
encryption_algorithm = 'aes-256'
|
||||
ike_version = 'v1'
|
||||
phase1_negotiation_mode = 'main'
|
||||
pfs = 'group5'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
lifetime = 'units=seconds,value=20000'
|
||||
|
||||
args = [name,
|
||||
'--description', description,
|
||||
'--tenant-id', tenant_id,
|
||||
'--auth-algorithm', auth_algorithm,
|
||||
'--encryption-algorithm', encryption_algorithm,
|
||||
'--ike-version', ike_version,
|
||||
'--phase1-negotiation-mode', phase1_negotiation_mode,
|
||||
'--lifetime', lifetime,
|
||||
'--pfs', pfs]
|
||||
|
||||
position_names = ['name', 'description',
|
||||
'auth_algorithm', 'encryption_algorithm',
|
||||
'phase1_negotiation_mode',
|
||||
'ike_version', 'pfs',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [name, description,
|
||||
auth_algorithm, encryption_algorithm,
|
||||
phase1_negotiation_mode, ike_version, pfs,
|
||||
tenant_id]
|
||||
extra_body = {
|
||||
'lifetime': {
|
||||
'units': 'seconds',
|
||||
'value': 20000,
|
||||
},
|
||||
}
|
||||
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
extra_body=extra_body)
|
||||
|
||||
def test_create_ikepolicy_with_limited_params(self):
|
||||
"""vpn-ikepolicy-create with limited params."""
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.CreateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'ikepolicy1'
|
||||
auth_algorithm = 'sha1'
|
||||
encryption_algorithm = 'aes-128'
|
||||
ike_version = 'v1'
|
||||
phase1_negotiation_mode = 'main'
|
||||
pfs = 'group5'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
|
||||
args = [name,
|
||||
'--tenant-id', tenant_id]
|
||||
|
||||
position_names = ['name',
|
||||
'auth_algorithm', 'encryption_algorithm',
|
||||
'phase1_negotiation_mode',
|
||||
'ike_version', 'pfs',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [name,
|
||||
auth_algorithm, encryption_algorithm,
|
||||
phase1_negotiation_mode,
|
||||
ike_version, pfs,
|
||||
tenant_id]
|
||||
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def _test_lifetime_values(self, lifetime):
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.CreateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'ikepolicy1'
|
||||
description = 'my-ike-policy'
|
||||
auth_algorithm = 'sha1'
|
||||
encryption_algorithm = 'aes-256'
|
||||
ike_version = 'v1'
|
||||
phase1_negotiation_mode = 'main'
|
||||
pfs = 'group5'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
|
||||
args = [name,
|
||||
'--description', description,
|
||||
'--tenant-id', tenant_id,
|
||||
'--auth-algorithm', auth_algorithm,
|
||||
'--encryption-algorithm', encryption_algorithm,
|
||||
'--ike-version', ike_version,
|
||||
'--phase1-negotiation-mode', phase1_negotiation_mode,
|
||||
'--lifetime', lifetime,
|
||||
'--pfs', pfs]
|
||||
|
||||
position_names = ['name', 'description',
|
||||
'auth_algorithm', 'encryption_algorithm',
|
||||
'phase1_negotiation_mode',
|
||||
'ike_version', 'pfs',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [name, description,
|
||||
auth_algorithm, encryption_algorithm,
|
||||
phase1_negotiation_mode, ike_version, pfs,
|
||||
tenant_id]
|
||||
try:
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
except Exception:
|
||||
return
|
||||
self.fail("IKEPolicy Lifetime Error")
|
||||
|
||||
def test_create_ikepolicy_with_invalid_lifetime_keys(self):
|
||||
lifetime = 'uts=seconds,val=20000'
|
||||
self._test_lifetime_values(lifetime)
|
||||
|
||||
def test_create_ikepolicy_with_invalid_lifetime_value(self):
|
||||
lifetime = 'units=seconds,value=-1'
|
||||
self._test_lifetime_values(lifetime)
|
||||
|
||||
def test_list_ikepolicy(self):
|
||||
"""vpn-ikepolicy-list."""
|
||||
resources = "ikepolicies"
|
||||
cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_ikepolicy_pagination(self):
|
||||
"""vpn-ikepolicy-list."""
|
||||
resources = "ikepolicies"
|
||||
cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_ikepolicy_sort(self):
|
||||
"""vpn-ikepolicy-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "ikepolicies"
|
||||
cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_ikepolicy_limit(self):
|
||||
"""vpn-ikepolicy-list -P."""
|
||||
resources = "ikepolicies"
|
||||
cmd = ikepolicy.ListIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_ikepolicy_id(self):
|
||||
"""vpn-ikepolicy-show ikepolicy_id."""
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.ShowIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_ikepolicy_id_name(self):
|
||||
"""vpn-ikepolicy-show."""
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.ShowIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_ikepolicy(self):
|
||||
"""vpn-ikepolicy-update myid --name newname --tags a b."""
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.UpdateIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_delete_ikepolicy(self):
|
||||
"""vpn-ikepolicy-delete my-id."""
|
||||
resource = 'ikepolicy'
|
||||
cmd = ikepolicy.DeleteIKEPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20VpnIkePolicyXML(CLITestV20VpnIkePolicyJSON):
|
||||
format = 'xml'
|
@ -1,307 +0,0 @@
|
||||
# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Swaminathan Vasudevan, Hewlett Packard.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.neutron.v2_0.vpn import ipsec_site_connection
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20IPsecSiteConnectionJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_ipsec_site_connection_all_params(self):
|
||||
"""ipsecsite-connection-create all params."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.CreateIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
tenant_id = 'mytenant_id'
|
||||
name = 'connection1'
|
||||
my_id = 'my_id'
|
||||
peer_address = '192.168.2.10'
|
||||
peer_id = '192.168.2.10'
|
||||
psk = 'abcd'
|
||||
mtu = '1500'
|
||||
initiator = 'bi-directional'
|
||||
vpnservice_id = 'vpnservice_id'
|
||||
ikepolicy_id = 'ikepolicy_id'
|
||||
ipsecpolicy_id = 'ipsecpolicy_id'
|
||||
peer_cidrs = ['192.168.3.0/24', '192.168.2.0/24']
|
||||
admin_state = True
|
||||
description = 'my-vpn-connection'
|
||||
dpd = 'action=restart,interval=30,timeout=120'
|
||||
|
||||
args = ['--tenant-id', tenant_id,
|
||||
'--peer-address', peer_address, '--peer-id', peer_id,
|
||||
'--psk', psk, '--initiator', initiator,
|
||||
'--vpnservice-id', vpnservice_id,
|
||||
'--ikepolicy-id', ikepolicy_id, '--name', name,
|
||||
'--ipsecpolicy-id', ipsecpolicy_id, '--mtu', mtu,
|
||||
'--description', description,
|
||||
'--peer-cidr', '192.168.3.0/24',
|
||||
'--peer-cidr', '192.168.2.0/24',
|
||||
'--dpd', dpd]
|
||||
|
||||
position_names = ['name', 'tenant_id', 'admin_state_up',
|
||||
'peer_address', 'peer_id', 'peer_cidrs',
|
||||
'psk', 'mtu', 'initiator', 'description',
|
||||
'vpnservice_id', 'ikepolicy_id',
|
||||
'ipsecpolicy_id']
|
||||
|
||||
position_values = [name, tenant_id, admin_state, peer_address,
|
||||
peer_id, peer_cidrs, psk, mtu,
|
||||
initiator, description,
|
||||
vpnservice_id, ikepolicy_id, ipsecpolicy_id]
|
||||
extra_body = {
|
||||
'dpd': {
|
||||
'action': 'restart',
|
||||
'interval': 30,
|
||||
'timeout': 120,
|
||||
},
|
||||
}
|
||||
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
extra_body=extra_body)
|
||||
|
||||
def test_create_ipsec_site_connection_with_limited_params(self):
|
||||
"""ipsecsite-connection-create with limited params."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.CreateIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
tenant_id = 'mytenant_id'
|
||||
my_id = 'my_id'
|
||||
peer_address = '192.168.2.10'
|
||||
peer_id = '192.168.2.10'
|
||||
psk = 'abcd'
|
||||
mtu = '1500'
|
||||
initiator = 'bi-directional'
|
||||
vpnservice_id = 'vpnservice_id'
|
||||
ikepolicy_id = 'ikepolicy_id'
|
||||
ipsecpolicy_id = 'ipsecpolicy_id'
|
||||
peer_cidrs = ['192.168.3.0/24', '192.168.2.0/24']
|
||||
admin_state = True
|
||||
|
||||
args = ['--tenant-id', tenant_id,
|
||||
'--peer-address', peer_address,
|
||||
'--peer-id', peer_id,
|
||||
'--psk', psk,
|
||||
'--vpnservice-id', vpnservice_id,
|
||||
'--ikepolicy-id', ikepolicy_id,
|
||||
'--ipsecpolicy-id', ipsecpolicy_id,
|
||||
'--peer-cidr', '192.168.3.0/24',
|
||||
'--peer-cidr', '192.168.2.0/24']
|
||||
|
||||
position_names = ['tenant_id', 'admin_state_up',
|
||||
'peer_address', 'peer_id', 'peer_cidrs',
|
||||
'psk', 'mtu', 'initiator',
|
||||
'vpnservice_id', 'ikepolicy_id',
|
||||
'ipsecpolicy_id']
|
||||
|
||||
position_values = [tenant_id, admin_state, peer_address,
|
||||
peer_id, peer_cidrs, psk, mtu,
|
||||
initiator,
|
||||
vpnservice_id, ikepolicy_id, ipsecpolicy_id]
|
||||
|
||||
self._test_create_resource(resource, cmd, None, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def _test_dpd_values(self, dpd):
|
||||
"""ipsecsite-connection-create with invalid dpd values."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.CreateIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
tenant_id = 'mytenant_id'
|
||||
name = 'connection1'
|
||||
my_id = 'my_id'
|
||||
peer_address = '192.168.2.10'
|
||||
peer_id = '192.168.2.10'
|
||||
psk = 'abcd'
|
||||
mtu = '1500'
|
||||
initiator = 'bi-directional'
|
||||
vpnservice_id = 'vpnservice_id'
|
||||
ikepolicy_id = 'ikepolicy_id'
|
||||
ipsecpolicy_id = 'ipsecpolicy_id'
|
||||
peer_cidrs = ['192.168.3.0/24', '192.168.2.0/24']
|
||||
admin_state = True
|
||||
description = 'my-vpn-connection'
|
||||
|
||||
args = ['--tenant-id', tenant_id,
|
||||
'--peer-address', peer_address, '--peer-id', peer_id,
|
||||
'--psk', psk, '--initiator', initiator,
|
||||
'--vpnservice-id', vpnservice_id,
|
||||
'--ikepolicy-id', ikepolicy_id, '--name', name,
|
||||
'--ipsecpolicy-id', ipsecpolicy_id, '--mtu', mtu,
|
||||
'--description', description,
|
||||
'--peer-cidr', '192.168.3.0/24',
|
||||
'--peer-cidr', '192.168.2.0/24',
|
||||
'--dpd', dpd]
|
||||
|
||||
position_names = ['name', 'tenant_id', 'admin_state_up',
|
||||
'peer_address', 'peer_id', 'peer_cidrs',
|
||||
'psk', 'mtu', 'initiator', 'description',
|
||||
'vpnservice_id', 'ikepolicy_id',
|
||||
'ipsecpolicy_id']
|
||||
|
||||
position_values = [name, tenant_id, admin_state, peer_address,
|
||||
peer_id, peer_cidrs, psk, mtu,
|
||||
initiator, description,
|
||||
vpnservice_id, ikepolicy_id, ipsecpolicy_id]
|
||||
self.assertRaises(
|
||||
exceptions.CommandError,
|
||||
self._test_create_resource,
|
||||
resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_invalid_mtu(self):
|
||||
"""ipsecsite-connection-create with invalid dpd values."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.CreateIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
tenant_id = 'mytenant_id'
|
||||
name = 'connection1'
|
||||
my_id = 'my_id'
|
||||
peer_address = '192.168.2.10'
|
||||
peer_id = '192.168.2.10'
|
||||
psk = 'abcd'
|
||||
mtu = '67'
|
||||
initiator = 'bi-directional'
|
||||
vpnservice_id = 'vpnservice_id'
|
||||
ikepolicy_id = 'ikepolicy_id'
|
||||
ipsecpolicy_id = 'ipsecpolicy_id'
|
||||
peer_cidrs = ['192.168.3.0/24', '192.168.2.0/24']
|
||||
admin_state = True
|
||||
description = 'my-vpn-connection'
|
||||
|
||||
args = ['--tenant-id', tenant_id,
|
||||
'--peer-address', peer_address, '--peer-id', peer_id,
|
||||
'--psk', psk, '--initiator', initiator,
|
||||
'--vpnservice-id', vpnservice_id,
|
||||
'--ikepolicy-id', ikepolicy_id, '--name', name,
|
||||
'--ipsecpolicy-id', ipsecpolicy_id, '--mtu', mtu,
|
||||
'--description', description,
|
||||
'--peer-cidr', '192.168.3.0/24',
|
||||
'--peer-cidr', '192.168.2.0/24']
|
||||
|
||||
position_names = ['name', 'tenant_id', 'admin_state_up',
|
||||
'peer_address', 'peer_id', 'peer_cidrs',
|
||||
'psk', 'mtu', 'initiator', 'description',
|
||||
'vpnservice_id', 'ikepolicy_id',
|
||||
'ipsecpolicy_id']
|
||||
|
||||
position_values = [name, tenant_id, admin_state, peer_address,
|
||||
peer_id, peer_cidrs, psk, mtu,
|
||||
initiator, description,
|
||||
vpnservice_id, ikepolicy_id, ipsecpolicy_id]
|
||||
self.assertRaises(
|
||||
exceptions.CommandError,
|
||||
self._test_create_resource,
|
||||
resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_ipsec_site_connection_with_invalid_dpd_keys(self):
|
||||
dpd = 'act=restart,interval=30,time=120'
|
||||
self._test_dpd_values(dpd)
|
||||
|
||||
def test_create_ipsec_site_connection_with_invalid_dpd_values(self):
|
||||
dpd = 'action=hold,interval=30,timeout=-1'
|
||||
self._test_dpd_values(dpd)
|
||||
|
||||
def test_list_ipsec_site_connection(self):
|
||||
"""ipsecsite-connection-list."""
|
||||
resources = "ipsec_site_connections"
|
||||
cmd = ipsec_site_connection.ListIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_ipsec_site_connection_pagination(self):
|
||||
"""ipsecsite-connection-list."""
|
||||
resources = "ipsec_site_connections"
|
||||
cmd = ipsec_site_connection.ListIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_ipsec_site_connection_sort(self):
|
||||
"""ipsecsite-connection-list.
|
||||
--sort-key name --sort-key id --sort-key asc --sort-key desc
|
||||
"""
|
||||
resources = "ipsec_site_connections"
|
||||
cmd = ipsec_site_connection.ListIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_ipsec_site_connection_limit(self):
|
||||
"""ipsecsite-connection-list -P."""
|
||||
resources = "ipsec_site_connections"
|
||||
cmd = ipsec_site_connection.ListIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_delete_ipsec_site_connection(self):
|
||||
"""ipsecsite-connection-delete my-id."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.DeleteIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
def test_update_ipsec_site_connection(self):
|
||||
"""ipsecsite-connection-update myid --name myname --tags a b."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.UpdateIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'Branch-new',
|
||||
'--tags', 'a', 'b'],
|
||||
{'name': 'Branch-new',
|
||||
'tags': ['a', 'b'], })
|
||||
|
||||
def test_show_ipsec_site_connection_id(self):
|
||||
"""ipsecsite-connection-show test_id."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.ShowIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_ipsec_site_connection_id_name(self):
|
||||
"""ipsecsite-connection-show."""
|
||||
resource = 'ipsec_site_connection'
|
||||
cmd = ipsec_site_connection.ShowIPsecSiteConnection(
|
||||
test_cli20.MyApp(sys.stdout), None
|
||||
)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
|
||||
class CLITestV20IPsecSiteConnectionXML(CLITestV20IPsecSiteConnectionJSON):
|
||||
format = 'xml'
|
@ -1,209 +0,0 @@
|
||||
# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Swaminathan Vasudevan, Hewlett Packard.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.vpn import ipsecpolicy
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20VpnIpsecPolicyJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_ipsecpolicy_all_params(self):
|
||||
"""vpn-ipsecpolicy-create all params with dashes."""
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.CreateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'ipsecpolicy1'
|
||||
description = 'first-ipsecpolicy1'
|
||||
auth_algorithm = 'sha1'
|
||||
encryption_algorithm = 'aes-256'
|
||||
encapsulation_mode = 'tunnel'
|
||||
pfs = 'group5'
|
||||
transform_protocol = 'ah'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
lifetime = 'units=seconds,value=20000'
|
||||
|
||||
args = [name,
|
||||
'--description', description,
|
||||
'--tenant-id', tenant_id,
|
||||
'--auth-algorithm', auth_algorithm,
|
||||
'--encryption-algorithm', encryption_algorithm,
|
||||
'--transform-protocol', transform_protocol,
|
||||
'--encapsulation-mode', encapsulation_mode,
|
||||
'--lifetime', lifetime,
|
||||
'--pfs', pfs]
|
||||
|
||||
position_names = ['name', 'auth_algorithm', 'encryption_algorithm',
|
||||
'encapsulation_mode', 'description',
|
||||
'transform_protocol', 'pfs',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [name, auth_algorithm, encryption_algorithm,
|
||||
encapsulation_mode, description,
|
||||
transform_protocol, pfs,
|
||||
tenant_id]
|
||||
extra_body = {
|
||||
'lifetime': {
|
||||
'units': 'seconds',
|
||||
'value': 20000,
|
||||
},
|
||||
}
|
||||
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values,
|
||||
extra_body=extra_body)
|
||||
|
||||
def test_create_ipsecpolicy_with_limited_params(self):
|
||||
"""vpn-ipsecpolicy-create with limited params."""
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.CreateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'ipsecpolicy1'
|
||||
auth_algorithm = 'sha1'
|
||||
encryption_algorithm = 'aes-128'
|
||||
encapsulation_mode = 'tunnel'
|
||||
pfs = 'group5'
|
||||
transform_protocol = 'esp'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
|
||||
args = [name,
|
||||
'--tenant-id', tenant_id]
|
||||
|
||||
position_names = ['name', 'auth_algorithm', 'encryption_algorithm',
|
||||
'encapsulation_mode',
|
||||
'transform_protocol', 'pfs',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [name, auth_algorithm, encryption_algorithm,
|
||||
encapsulation_mode,
|
||||
transform_protocol, pfs,
|
||||
tenant_id]
|
||||
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def _test_lifetime_values(self, lifetime):
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.CreateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'ipsecpolicy1'
|
||||
description = 'my-ipsec-policy'
|
||||
auth_algorithm = 'sha1'
|
||||
encryption_algorithm = 'aes-256'
|
||||
ike_version = 'v1'
|
||||
phase1_negotiation_mode = 'main'
|
||||
pfs = 'group5'
|
||||
tenant_id = 'my-tenant'
|
||||
my_id = 'my-id'
|
||||
|
||||
args = [name,
|
||||
'--description', description,
|
||||
'--tenant-id', tenant_id,
|
||||
'--auth-algorithm', auth_algorithm,
|
||||
'--encryption-algorithm', encryption_algorithm,
|
||||
'--ike-version', ike_version,
|
||||
'--phase1-negotiation-mode', phase1_negotiation_mode,
|
||||
'--lifetime', lifetime,
|
||||
'--pfs', pfs]
|
||||
|
||||
position_names = ['name', 'description',
|
||||
'auth_algorithm', 'encryption_algorithm',
|
||||
'phase1_negotiation_mode',
|
||||
'ike_version', 'pfs',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [name, description,
|
||||
auth_algorithm, encryption_algorithm,
|
||||
phase1_negotiation_mode, ike_version, pfs,
|
||||
tenant_id]
|
||||
try:
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
except Exception:
|
||||
return
|
||||
self.fail("IPsecPolicy Lifetime Error")
|
||||
|
||||
def test_create_ipsecpolicy_with_invalid_lifetime_keys(self):
|
||||
lifetime = 'uts=seconds,val=20000'
|
||||
self._test_lifetime_values(lifetime)
|
||||
|
||||
def test_create_ipsecpolicy_with_invalide_lifetime_values(self):
|
||||
lifetime = 'units=minutes,value=0'
|
||||
self._test_lifetime_values(lifetime)
|
||||
|
||||
def test_list_ipsecpolicy(self):
|
||||
"""vpn-ipsecpolicy-list."""
|
||||
resources = "ipsecpolicies"
|
||||
cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_ipsecpolicy_pagination(self):
|
||||
"""vpn-ipsecpolicy-list."""
|
||||
resources = "ipsecpolicies"
|
||||
cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_ipsecpolicy_sort(self):
|
||||
"""vpn-ipsecpolicy-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "ipsecpolicies"
|
||||
cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_ipsecpolicy_limit(self):
|
||||
"""vpn-ipsecpolicy-list -P."""
|
||||
resources = "ipsecpolicies"
|
||||
cmd = ipsecpolicy.ListIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_ipsecpolicy_id(self):
|
||||
"""vpn-ipsecpolicy-show ipsecpolicy_id."""
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.ShowIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_ipsecpolicy_id_name(self):
|
||||
"""vpn-ipsecpolicy-show."""
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.ShowIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_ipsecpolicy(self):
|
||||
"""vpn-ipsecpolicy-update myid --name newname --tags a b."""
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.UpdateIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_delete_ipsecpolicy(self):
|
||||
"""vpn-ipsecpolicy-delete my-id."""
|
||||
resource = 'ipsecpolicy'
|
||||
cmd = ipsecpolicy.DeleteIPsecPolicy(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20VpnIpsecPolicyXML(CLITestV20VpnIpsecPolicyJSON):
|
||||
format = 'xml'
|
@ -1,138 +0,0 @@
|
||||
# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Swaminathan Vasudevan, Hewlett Packard.
|
||||
|
||||
import sys
|
||||
|
||||
from neutronclient.neutron.v2_0.vpn import vpnservice
|
||||
from neutronclient.tests.unit import test_cli20
|
||||
|
||||
|
||||
class CLITestV20VpnServiceJSON(test_cli20.CLITestV20Base):
|
||||
|
||||
def test_create_vpnservice_all_params(self):
|
||||
"""vpn-service-create all params."""
|
||||
resource = 'vpnservice'
|
||||
cmd = vpnservice.CreateVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
subnet = 'mysubnet-id'
|
||||
router = 'myrouter-id'
|
||||
tenant_id = 'mytenant-id'
|
||||
my_id = 'my-id'
|
||||
name = 'myvpnservice'
|
||||
description = 'my-vpn-service'
|
||||
admin_state = True
|
||||
|
||||
args = ['--name', name,
|
||||
'--description', description,
|
||||
router,
|
||||
subnet,
|
||||
'--tenant-id', tenant_id]
|
||||
|
||||
position_names = ['admin_state_up', 'name', 'description',
|
||||
'subnet_id', 'router_id',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [admin_state, name, description,
|
||||
subnet, router, tenant_id]
|
||||
|
||||
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_vpnservice_with_limited_params(self):
|
||||
"""vpn-service-create with limited params."""
|
||||
resource = 'vpnservice'
|
||||
cmd = vpnservice.CreateVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
subnet = 'mysubnet-id'
|
||||
router = 'myrouter-id'
|
||||
tenant_id = 'mytenant-id'
|
||||
my_id = 'my-id'
|
||||
admin_state = True
|
||||
|
||||
args = [router,
|
||||
subnet,
|
||||
'--tenant-id', tenant_id]
|
||||
|
||||
position_names = ['admin_state_up',
|
||||
'subnet_id', 'router_id',
|
||||
'tenant_id']
|
||||
|
||||
position_values = [admin_state, subnet, router, tenant_id]
|
||||
|
||||
self._test_create_resource(resource, cmd, None, my_id, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_list_vpnservice(self):
|
||||
"""vpn-service-list."""
|
||||
resources = "vpnservices"
|
||||
cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, True)
|
||||
|
||||
def test_list_vpnservice_pagination(self):
|
||||
"""vpn-service-list."""
|
||||
resources = "vpnservices"
|
||||
cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources_with_pagination(resources, cmd)
|
||||
|
||||
def test_list_vpnservice_sort(self):
|
||||
"""vpn-service-list --sort-key name --sort-key id --sort-key asc
|
||||
--sort-key desc
|
||||
"""
|
||||
resources = "vpnservices"
|
||||
cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd,
|
||||
sort_key=["name", "id"],
|
||||
sort_dir=["asc", "desc"])
|
||||
|
||||
def test_list_vpnservice_limit(self):
|
||||
"""vpn-service-list -P."""
|
||||
resources = "vpnservices"
|
||||
cmd = vpnservice.ListVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_list_resources(resources, cmd, page_size=1000)
|
||||
|
||||
def test_show_vpnservice_id(self):
|
||||
"""vpn-service-show test_id."""
|
||||
resource = 'vpnservice'
|
||||
cmd = vpnservice.ShowVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id, args, ['id'])
|
||||
|
||||
def test_show_vpnservice_id_name(self):
|
||||
"""vpn-service-show."""
|
||||
resource = 'vpnservice'
|
||||
cmd = vpnservice.ShowVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
args = ['--fields', 'id', '--fields', 'name', self.test_id]
|
||||
self._test_show_resource(resource, cmd, self.test_id,
|
||||
args, ['id', 'name'])
|
||||
|
||||
def test_update_vpnservice(self):
|
||||
"""vpn-service-update myid --name newname --tags a b."""
|
||||
resource = 'vpnservice'
|
||||
cmd = vpnservice.UpdateVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
self._test_update_resource(resource, cmd, 'myid',
|
||||
['myid', '--name', 'newname'],
|
||||
{'name': 'newname', })
|
||||
|
||||
def test_delete_vpnservice(self):
|
||||
"""vpn-service-delete my-id."""
|
||||
resource = 'vpnservice'
|
||||
cmd = vpnservice.DeleteVPNService(test_cli20.MyApp(sys.stdout), None)
|
||||
my_id = 'my-id'
|
||||
args = [my_id]
|
||||
self._test_delete_resource(resource, cmd, my_id, args)
|
||||
|
||||
|
||||
class CLITestV20VpnServiceXML(CLITestV20VpnServiceJSON):
|
||||
format = 'xml'
|
@ -1,131 +0,0 @@
|
||||
# (c) Copyright 2013 Hewlett-Packard Development Company, L.P.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
# @author: Swaminathan Vasudevan, Hewlett Packard.
|
||||
|
||||
import testtools
|
||||
|
||||
from neutronclient.common import exceptions
|
||||
from neutronclient.common import utils
|
||||
from neutronclient.neutron.v2_0.vpn import utils as vpn_utils
|
||||
|
||||
|
||||
class TestVPNUtils(testtools.TestCase):
|
||||
|
||||
def test_validate_lifetime_dictionary_seconds(self):
|
||||
input_str = utils.str2dict("units=seconds,value=3600")
|
||||
self.assertIsNone(vpn_utils.validate_lifetime_dict(input_str))
|
||||
|
||||
def test_validate_dpd_dictionary_action_hold(self):
|
||||
input_str = utils.str2dict("action=hold,interval=30,timeout=120")
|
||||
self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
|
||||
|
||||
def test_validate_dpd_dictionary_action_restart(self):
|
||||
input_str = utils.str2dict("action=restart,interval=30,timeout=120")
|
||||
self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
|
||||
|
||||
def test_validate_dpd_dictionary_action_restart_by_peer(self):
|
||||
input_str = utils.str2dict(
|
||||
"action=restart-by-peer,interval=30,timeout=120"
|
||||
)
|
||||
self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
|
||||
|
||||
def test_validate_dpd_dictionary_action_clear(self):
|
||||
input_str = utils.str2dict('action=clear,interval=30,timeout=120')
|
||||
self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
|
||||
|
||||
def test_validate_dpd_dictionary_action_disabled(self):
|
||||
input_str = utils.str2dict('action=disabled,interval=30,timeout=120')
|
||||
self.assertIsNone(vpn_utils.validate_dpd_dict(input_str))
|
||||
|
||||
def test_validate_lifetime_dictionary_invalid_unit_key(self):
|
||||
input_str = utils.str2dict('ut=seconds,value=3600')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_lifetime_dictionary_invalid_unit_key_value(self):
|
||||
input_str = utils.str2dict('units=seconds,val=3600')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_lifetime_dictionary_unsupported_units(self):
|
||||
input_str = utils.str2dict('units=minutes,value=3600')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_lifetime_dictionary_invalid_empty_unit(self):
|
||||
input_str = utils.str2dict('units=,value=3600')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_lifetime_dictionary_under_minimum_integer_value(self):
|
||||
input_str = utils.str2dict('units=seconds,value=59')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_lifetime_dictionary_negative_integer_value(self):
|
||||
input_str = utils.str2dict('units=seconds,value=-1')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_lifetime_dictionary_empty_value(self):
|
||||
input_str = utils.str2dict('units=seconds,value=')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_invalid_key_action(self):
|
||||
input_str = utils.str2dict('act=hold,interval=30,timeout=120')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_invalid_key_interval(self):
|
||||
input_str = utils.str2dict('action=hold,int=30,timeout=120')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_invalid_key_timeout(self):
|
||||
input_str = utils.str2dict('action=hold,interval=30,tiut=120')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_unsupported_action(self):
|
||||
input_str = utils.str2dict('action=bye-bye,interval=30,timeout=120')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_empty_action(self):
|
||||
input_str = utils.str2dict('action=,interval=30,timeout=120')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_empty_interval(self):
|
||||
input_str = utils.str2dict('action=hold,interval=,timeout=120')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_negative_interval_value(self):
|
||||
input_str = utils.str2dict('action=hold,interval=-1,timeout=120')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_zero_timeout(self):
|
||||
input_str = utils.str2dict('action=hold,interval=30,timeout=0')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_empty_timeout(self):
|
||||
input_str = utils.str2dict('action=hold,interval=30,timeout=')
|
||||
self._test_validate_dpd_negative_test_case(input_str)
|
||||
|
||||
def test_validate_dpd_dictionary_negative_timeout_value(self):
|
||||
input_str = utils.str2dict('action=hold,interval=30,timeout=-1')
|
||||
self._test_validate_lifetime_negative_test_case(input_str)
|
||||
|
||||
def _test_validate_lifetime_negative_test_case(self, input_str):
|
||||
"""Generic handler for negative lifetime tests."""
|
||||
self.assertRaises(exceptions.CommandError,
|
||||
vpn_utils.validate_lifetime_dict,
|
||||
(input_str))
|
||||
|
||||
def _test_validate_dpd_negative_test_case(self, input_str):
|
||||
"""Generic handler for negative lifetime tests."""
|
||||
self.assertRaises(exceptions.CommandError,
|
||||
vpn_utils.validate_lifetime_dict,
|
||||
(input_str))
|
Loading…
x
Reference in New Issue
Block a user