Files
rally/tests/verification/verifiers/test_config.py
Olga Kopylova c800370cfd Fix hacking 0.9.x issues
Fixed issues:
H202 assertRaises Exception too broad
H305 imports not grouped correctly
H307 like imports should be grouped together
H405 multi line docstring summary not separated with an empty line
H904 Wrap long lines in parentheses instead of a backslash
E122 continuation line missing indentation or outdented
E128 continuation line under-indented for visual indent
E131 continuation line unaligned for hanging indent
E251 unexpected spaces around keyword / parameter equals
E265 block comment should start with '# '

Change-Id: Ia2b8994c58686e3570f303f0725a2850d6b36e47
2014-06-18 14:59:18 +03:00

299 lines
14 KiB
Python

# Copyright 2014: 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.
import os
import mock
from oslo.config import cfg
from six.moves import http_client as httplib
from rally import exceptions
from rally.verification.verifiers.tempest import config
from tests import fakes
from tests import test
CONF = cfg.CONF
class ConfigTestCase(test.TestCase):
@mock.patch("rally.objects.deploy.db.deployment_get")
@mock.patch("rally.osclients.Clients.verified_keystone")
@mock.patch("rally.verification.verifiers.tempest.config.os.path.isfile")
def setUp(self, mock_isfile, mock_verified_keystone, mock_get):
super(ConfigTestCase, self).setUp()
self.endpoint = {"username": "test",
"tenant_name": "test",
"password": "test",
"auth_url": "http://test/v2.0",
"permission": "admin"}
mock_get.return_value = {"endpoints": [self.endpoint]}
mock_isfile.return_value = True
self.deploy_id = "fake_deploy_id"
self.conf_generator = config.TempestConf(self.deploy_id)
def _remove_default_section(self, items):
# getting items from configparser by specified section name
# retruns also values from DEFAULT section
defaults = (("log_file", "tempest.log"), ("debug", "True"),
("use_stderr", "False"))
return [item for item in items if item not in defaults]
@mock.patch("rally.verification.verifiers.tempest.config.urllib2.urlopen")
@mock.patch("six.moves.builtins.open")
def test__load_img_success(self, mock_open, mock_urlopen):
mock_result = mock.MagicMock()
mock_result.getcode.return_value = httplib.OK
mock_urlopen.return_value = mock_result
mock_file = mock.MagicMock()
mock_open.return_value = mock_file
self.conf_generator._load_img()
cirros_url = ("http://download.cirros-cloud.net/%s/%s" %
(CONF.image.cirros_version,
CONF.image.cirros_image))
mock_urlopen.assert_called_once_with(cirros_url)
mock_file.__enter__().write.assert_called_once_with(mock_result.read())
mock_file.__exit__.assert_called_once_with(None, None, None)
@mock.patch("rally.verification.verifiers.tempest.config.urllib2.urlopen")
def test__load_img_notfound(self, mock_urlopen):
mock_result = mock.MagicMock()
mock_result.getcode.return_value = httplib.NOT_FOUND
mock_urlopen.return_value = mock_result
self.assertRaises(exceptions.TempestConfigCreationFailure,
self.conf_generator._load_img)
def test__get_url(self):
service = "test_service"
url = "test_url"
# mocked at setUp
self.conf_generator.keystoneclient.auth_ref = {
"serviceCatalog": [{
"name": service,
"endpoints": [{"publicURL": url}]
}]}
self.assertEqual(self.conf_generator._get_url(service), url)
@mock.patch("rally.verification.verifiers.tempest.config.TempestConf"
"._get_url")
def test__set_boto(self, mock_get_url):
url = "test_url"
mock_get_url.return_value = url
self.conf_generator._set_boto()
expected = (("ec2_url", url),
("s3_url", url),
("build_interval", "1"),
("build_timeout", "196"),
("http_socket_timeout", "30"),
("instance_type", "m1.nano"),
("ssh_user", "cirros"),
("s3_materials_path",
os.path.join(self.conf_generator.data_path,
"s3matherials")))
results = self._remove_default_section(
self.conf_generator.conf.items("boto"))
self.assertEqual(sorted(expected), sorted(results))
def test__set_compute_admin(self):
self.conf_generator._set_compute_admin()
expected = [("username", self.endpoint["username"]),
("password", self.endpoint["password"]),
("tenant_name", self.endpoint["tenant_name"])]
results = self._remove_default_section(
self.conf_generator.conf.items("compute-admin"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.nova")
def test__set_compute_flavors(self, mock_nova):
mock_novaclient = mock.MagicMock()
mock_novaclient.flavors.list.return_value = [
fakes.FakeFlavor(id="id1"), fakes.FakeFlavor(id="id2")]
mock_nova.Client.return_value = mock_novaclient
self.conf_generator._set_compute_flavors()
expected = ("id1", "id2")
results = (self.conf_generator.conf.get("compute", "flavor_ref"),
self.conf_generator.conf.get("compute", "flavor_ref_alt"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.nova")
def test__set_compute_flavors_create(self, mock_nova):
mock_novaclient = mock.MagicMock()
mock_novaclient.flavors.list.return_value = []
mock_novaclient.flavors.create.side_effect = [
fakes.FakeFlavor(id="id1"), fakes.FakeFlavor(id="id2")]
mock_nova.Client.return_value = mock_novaclient
self.conf_generator._set_compute_flavors()
self.assertEqual(mock_novaclient.flavors.create.call_count, 2)
expected = ("id1", "id2")
results = (self.conf_generator.conf.get("compute", "flavor_ref"),
self.conf_generator.conf.get("compute", "flavor_ref_alt"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.nova")
def test__set_compute_flavors_create_fails(self, mock_nova):
mock_novaclient = mock.MagicMock()
mock_novaclient.flavors.list.return_value = []
mock_novaclient.flavors.create.side_effect = Exception()
mock_nova.Client.return_value = mock_novaclient
self.assertRaises(exceptions.TempestConfigCreationFailure,
self.conf_generator._set_compute_flavors)
@mock.patch("rally.osclients.glance")
@mock.patch("rally.osclients.keystone")
def test__set_compute_images(self, mock_keystone, mock_glance):
mock_glanceclient = mock.MagicMock()
mock_glanceclient.images.list.return_value = [
fakes.FakeImage(id="id1", name="cirros1"),
fakes.FakeImage(id="id2", name="cirros2")]
mock_glance.Client.return_value = mock_glanceclient
self.conf_generator._set_compute_images()
expected = ("id1", "id2")
results = (self.conf_generator.conf.get("compute", "image_ref"),
self.conf_generator.conf.get("compute", "image_ref_alt"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.glance")
@mock.patch("rally.osclients.keystone")
@mock.patch("six.moves.builtins.open")
def test__set_compute_images_create(self, mock_open, mock_keystone,
mock_glance):
mock_glanceclient = mock.MagicMock()
mock_glanceclient.images.list.return_value = []
mock_glanceclient.images.create.side_effect = [
fakes.FakeImage(id="id1"), fakes.FakeImage(id="id2")]
mock_glance.Client.return_value = mock_glanceclient
self.conf_generator._set_compute_images()
self.assertEqual(mock_glanceclient.images.create.call_count, 2)
expected = ("id1", "id2")
results = (self.conf_generator.conf.get("compute", "image_ref"),
self.conf_generator.conf.get("compute", "image_ref_alt"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.glance")
@mock.patch("rally.osclients.keystone")
def test__set_compute_images_create_fails(self, mock_keystone,
mock_glance):
mock_glanceclient = mock.MagicMock()
mock_glanceclient.images.list.return_value = []
mock_glanceclient.images.create.side_effect = Exception()
mock_glance.Client.return_value = mock_glanceclient
self.assertRaises(exceptions.TempestConfigCreationFailure,
self.conf_generator._set_compute_images)
def test__set_compute_ssh_connect_method_if_neutron(self):
self.conf_generator._set_compute_ssh_connect_method()
self.assertEqual("fixed",
self.conf_generator.conf.get("compute",
"ssh_connect_method"))
# if neutron is available
self.conf_generator.available_services = ["neutron"]
self.conf_generator._set_compute_ssh_connect_method()
self.assertEqual("floating",
self.conf_generator.conf.get("compute",
"ssh_connect_method"))
@mock.patch("rally.verification.verifiers.tempest.config.os.path.exists")
@mock.patch("rally.verification.verifiers.tempest.config.os.makedirs")
def test__set_default(self, mock_makedirs, mock_exists):
mock_exists.return_value = False
self.conf_generator._set_default()
lock_path = os.path.join(self.conf_generator.data_path, "lock_files_%s"
% self.deploy_id)
mock_makedirs.assert_called_once_with(lock_path)
expected = (("debug", "True"), ("log_file", "tempest.log"),
("use_stderr", "False"),
("lock_path", lock_path))
results = self.conf_generator.conf.items("DEFAULT")
self.assertEqual(sorted(expected), sorted(results))
def test__set_identity(self):
self.conf_generator._set_identity()
expected = (("username", self.endpoint["username"]),
("password", self.endpoint["password"]),
("tenant_name", self.endpoint["tenant_name"]),
("admin_username", self.endpoint["username"]),
("admin_password", self.endpoint["password"]),
("admin_tenant_name", self.endpoint["username"]),
("uri", self.endpoint["auth_url"]),
("uri_v3", self.endpoint["auth_url"].replace("/v2.0",
"/v3")))
results = self._remove_default_section(
self.conf_generator.conf.items("identity"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.neutron")
def test__set_network_if_neutron(self, mock_neutron):
fake_neutronclient = mock.MagicMock()
fake_neutronclient.list_networks.return_value = {"networks": [
{"status": "ACTIVE",
"id": "test_id",
"router:external":
True}]}
fake_neutronclient.list_routers.return_value = {"routers": [
{"id": "test_router"}]}
fake_neutronclient.list_subnets.return_value = {"subnets": [
{"cidr":
"10.0.0.0/24"}]}
mock_neutron.Client.return_value = fake_neutronclient
self.conf_generator.available_services = ["neutron"]
self.conf_generator._set_network()
expected = (("default_network", "10.0.0.0/24"),
("tenant_networks_reachable", "false"),
("api_version", "2.0"),
("public_network_id", "test_id"),
("public_router_id", "test_router"))
results = self._remove_default_section(
self.conf_generator.conf.items("network"))
self.assertEqual(sorted(expected), sorted(results))
@mock.patch("rally.osclients.nova")
def test__set_network_if_nova(self, mock_nova):
network = "10.0.0.0/24"
mock_novaclient = mock.MagicMock()
mock_network = mock.MagicMock()
mock_network.cidr = network
mock_novaclient.networks.list.return_value = [mock_network]
mock_nova.Client.return_value = mock_novaclient
self.conf_generator._set_network()
self.assertEqual(network,
self.conf_generator.conf.get("network",
"default_network"))
@mock.patch("rally.verification.verifiers.tempest.config.urllib2.urlopen")
def test__set_service_available(self, mock_urlopen):
mock_result = mock.MagicMock()
mock_result.getcode.return_value = httplib.NOT_FOUND
mock_urlopen.return_value = mock_result
available_services = ("nova", "cinder", "glance")
self.conf_generator.available_services = available_services
self.conf_generator._set_service_available()
expected = (("neutron", "False"), ("heat", "False"),
("ceilometer", "False"), ("swift", "False"),
("cinder", "True"), ("nova", "True"),
("glance", "True"), ("horizon", "False"))
options = self._remove_default_section(
self.conf_generator.conf.items("service_available"))
self.assertEqual(sorted(expected), sorted(options))
@mock.patch("rally.verification.verifiers.tempest.config.urllib2.urlopen")
def test__set_service_available_horizon(self, mock_urlopen):
mock_result = mock.MagicMock()
mock_result.getcode.return_value = httplib.OK
mock_urlopen.return_value = mock_result
self.conf_generator._set_service_available()
self.assertEqual(self.conf_generator.conf.get("service_available",
"horizon"),
"True")