ooi/ooi/tests/unit/controllers/test_security_group.py

150 lines
6.4 KiB
Python

# Copyright 2015 LIP - INDIGO-DataCloud
#
# 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 mock
from ooi.api import helpers_neutron
from ooi.api import securitygroup as security_group_api
from ooi import exception
from ooi.occi.infrastructure import securitygroup as occi_security_group
from ooi.openstack import helpers as openstack_helper
from ooi.tests import base
from ooi.tests import fakes_network as fakes
class TestSecurityGroupControllerNeutron(base.TestController):
def setUp(self):
super(TestSecurityGroupControllerNeutron, self).setUp()
self.controller = security_group_api.Controller(
neutron_ooi_endpoint="ff")
@mock.patch.object(helpers_neutron.OpenStackNeutron,
"list_security_groups")
def test_list_security_group(self, m_list):
tenant_id = fakes.tenants["baz"]["id"]
sec_group = openstack_helper.build_security_group_from_neutron(
fakes.security_groups[tenant_id]
)
req = fakes.create_req_test(None, None)
m_list.return_value = sec_group
result = self.controller.index(req)
expected = self.controller._get_security_group_resources(sec_group)
self.assertEqual(result.resources.__len__(),
expected.__len__())
for r in result.resources:
self.assertIsInstance(r, occi_security_group.SecurityGroupResource)
m_list.assert_called_with(req)
@mock.patch.object(helpers_neutron.OpenStackNeutron,
"list_security_groups")
def test_list_security_group_empty(self, m_list):
tenant_id = fakes.tenants["foo"]["id"]
sec_group = openstack_helper.build_security_group_from_neutron(
fakes.security_groups[tenant_id]
)
req = fakes.create_req_test(None, None)
m_list.return_value = sec_group
result = self.controller.index(req)
self.assertEqual(result.resources.__len__(), 0)
@mock.patch.object(helpers_neutron.OpenStackNeutron,
"get_security_group_details")
def test_show_security_group(self, m_list):
tenant_id = fakes.tenants["baz"]["id"]
sec_group = openstack_helper.build_security_group_from_neutron(
[fakes.security_groups[tenant_id][0]]
)
req = fakes.create_req_test(None, None)
m_list.return_value = sec_group[0]
result = self.controller.show(req, None)
expected = self.controller._get_security_group_resources(sec_group)[0]
self.assertIsInstance(
result,
occi_security_group.SecurityGroupResource)
self.assertEqual(result, expected)
m_list.assert_called_with(req, None)
@mock.patch.object(helpers_neutron.OpenStackNeutron, "get_resource")
def test_show_security_group_not_found(self, m_list):
tenant_id = fakes.tenants["baz"]["id"]
sec_group = openstack_helper.build_security_group_from_neutron(
fakes.security_groups[tenant_id]
)
m_list.return_value = sec_group
req = fakes.create_req_test(None, None)
self.assertRaises(exception.NotFound,
self.controller.show,
req,
None)
@mock.patch.object(helpers_neutron.OpenStackNeutron, "delete_resource")
def test_delete_security_group(self, m_list):
m_list.return_value = None
ret = self.controller.delete(None, None)
self.assertIsNone(ret)
m_list.assert_called_with(None, 'security-groups', None)
@mock.patch.object(helpers_neutron.OpenStackNeutron,
"delete_security_group")
def test_delete_security_group_not_found(self, m_list):
m_list.side_effect = exception.NotFound
req = fakes.create_req_test(None, None)
self.assertRaises(exception.NotFound,
self.controller.delete,
req,
None)
@mock.patch.object(helpers_neutron.OpenStackNeutron,
"create_security_group")
def test_create_security_groups(self, m_create):
tenant_id = fakes.tenants["baz"]["id"]
sec_group = openstack_helper.build_security_group_from_neutron(
fakes.security_groups[tenant_id]
)[0]
params = {"occi.core.title": sec_group["title"],
"occi.securitygroup.rules": sec_group["rules"],
"occi.core.summary": sec_group["summary"]
}
categories = {occi_security_group.SecurityGroupResource.kind}
req = fakes.create_req_json_occi(params, categories)
m_create.return_value = sec_group
ret = self.controller.create(req, params)
expected = self.controller._get_security_group_resources(
[sec_group])
self.assertIsInstance(ret.resources[0],
occi_security_group.SecurityGroupResource)
self.assertEqual(expected[0], ret.resources[0])
m_create.assert_called_with(req, sec_group["title"],
sec_group["summary"],
sec_group["rules"])
def test_create_error(self):
test_networks = fakes.networks[fakes.tenants["foo"]["id"]]
schema1 = occi_security_group.SecurityGroupResource.kind.scheme
net = test_networks[0]
schemes = {schema1: net}
parameters = {"occi.core.title": "name"}
req = fakes.create_req_test(parameters, schemes)
self.assertRaises(exception.Invalid, self.controller.create, req)
def test_create_invalid_param_rule(self):
params = {"occi.core.title": "group",
"occi.securitygroup.rules": "{'wrong': 'value'}]"
}
categories = {occi_security_group.SecurityGroupResource.kind}
req = fakes.create_req_test_occi(params, categories)
self.assertRaises(exception.Invalid, self.controller.create, req)