Add testing
This commit is contained in:
parent
c1b55132e2
commit
f92020ba69
@ -1,28 +1,163 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
|
||||||
|
|
||||||
# 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
|
# 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
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
# License for the specific language governing permissions and limitations
|
# implied.
|
||||||
# under the License.
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
"""
|
import imp
|
||||||
test_gleam
|
import os
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
Tests for `gleam` module.
|
import fixtures
|
||||||
"""
|
import mock
|
||||||
|
|
||||||
from gleam.tests import base
|
from oslotest import base
|
||||||
|
|
||||||
|
from gleam import cmd
|
||||||
|
|
||||||
|
|
||||||
class TestProcessConfigDrive(base.TestCase):
|
sample_data_path = os.path.join(
|
||||||
|
os.path.dirname(os.path.realpath(__file__)), 'fixtures')
|
||||||
|
|
||||||
def test_something(self):
|
|
||||||
pass
|
class TestProcessConfigDrive(base.BaseTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
super(TestProcessConfigDrive, self).setUp()
|
||||||
|
|
||||||
|
def _patch_argv(self, args):
|
||||||
|
self.useFixture(fixtures.MonkeyPatch('sys.argv', ['.'] + args))
|
||||||
|
|
||||||
|
def _patch_files(self, sample_prefix):
|
||||||
|
std_open = open
|
||||||
|
self.file_handle_mocks = {}
|
||||||
|
|
||||||
|
def open_side_effect(*args, **kwargs):
|
||||||
|
if (args[0].startswith('/etc/network') or
|
||||||
|
args[0].startswith('/etc/sysconfig/network-scripts') or
|
||||||
|
args[0].startswith('/etc/resolv.conf')):
|
||||||
|
try:
|
||||||
|
mock_handle = self.file_handle_mocks[args[0]]
|
||||||
|
except KeyError:
|
||||||
|
mock_handle = mock.Mock()
|
||||||
|
mock_handle.__enter__ = mock.Mock(return_value=mock_handle)
|
||||||
|
mock_handle.__exit__ = mock.Mock()
|
||||||
|
self.file_handle_mocks[args[0]] = mock_handle
|
||||||
|
return mock_handle
|
||||||
|
elif args[0].startswith('/sys/class/net'):
|
||||||
|
mock_args = [os.path.join(
|
||||||
|
sample_data_path, sample_prefix, args[0][1:])]
|
||||||
|
if len(args) > 1:
|
||||||
|
mock_args += args[1:]
|
||||||
|
return std_open(*mock_args, **kwargs)
|
||||||
|
elif args[0].startswith('/mnt/config'):
|
||||||
|
mock_args = [os.path.join(
|
||||||
|
sample_data_path, sample_prefix,
|
||||||
|
args[0][len('/mnt/config/'):])]
|
||||||
|
if len(args) > 1:
|
||||||
|
mock_args += args[1:]
|
||||||
|
return std_open(*mock_args, **kwargs)
|
||||||
|
else:
|
||||||
|
return std_open(*args, **kwargs)
|
||||||
|
|
||||||
|
mock_open = mock.Mock(side_effect=open_side_effect)
|
||||||
|
self.useFixture(fixtures.MonkeyPatch('six.moves.builtins.open',
|
||||||
|
mock_open))
|
||||||
|
|
||||||
|
real_listdir = os.listdir
|
||||||
|
|
||||||
|
def fake_listdir(path):
|
||||||
|
if path.startswith('/'):
|
||||||
|
path = path[1:]
|
||||||
|
return real_listdir(os.path.join(
|
||||||
|
sample_data_path, sample_prefix, path))
|
||||||
|
|
||||||
|
self.useFixture(fixtures.MonkeyPatch('os.listdir', fake_listdir))
|
||||||
|
self.useFixture(fixtures.MonkeyPatch(
|
||||||
|
'subprocess.check_output', mock.Mock()))
|
||||||
|
|
||||||
|
real_path_exists = os.path.exists
|
||||||
|
|
||||||
|
def fake_path_exists(path):
|
||||||
|
if path.startswith('/mnt/config'):
|
||||||
|
path = os.path.join(
|
||||||
|
sample_data_path, sample_prefix,
|
||||||
|
path[len('/mnt/config/'):])
|
||||||
|
return real_path_exists(path)
|
||||||
|
|
||||||
|
self.useFixture(fixtures.MonkeyPatch('os.path.exists',
|
||||||
|
fake_path_exists))
|
||||||
|
|
||||||
|
def _patch_distro(self, distro_name):
|
||||||
|
def fake_distro():
|
||||||
|
return (distro_name, '', '')
|
||||||
|
|
||||||
|
self.useFixture(fixtures.MonkeyPatch('platform.dist', fake_distro))
|
||||||
|
|
||||||
|
def _assert_network_output(self, distro, provider):
|
||||||
|
self._patch_argv([])
|
||||||
|
self._patch_files(provider)
|
||||||
|
self._patch_distro(distro)
|
||||||
|
|
||||||
|
cmd.main()
|
||||||
|
|
||||||
|
output_filename = '%s.%s.network.out' % (provider, distro.lower())
|
||||||
|
output_path = os.path.join(sample_data_path, 'test', output_filename)
|
||||||
|
|
||||||
|
# Generate a list of (dest, content) into write_blocks to assert
|
||||||
|
write_blocks = []
|
||||||
|
lines = open(output_path).readlines()
|
||||||
|
write_dest = None
|
||||||
|
write_content = None
|
||||||
|
for line in lines:
|
||||||
|
if line.startswith('### Write '):
|
||||||
|
if write_dest is not None:
|
||||||
|
write_blocks.append((write_dest, write_content))
|
||||||
|
write_dest = line[len('### Write '):-1]
|
||||||
|
write_content = ''
|
||||||
|
else:
|
||||||
|
write_content += line
|
||||||
|
if write_dest is not None:
|
||||||
|
write_blocks.append((write_dest, write_content))
|
||||||
|
|
||||||
|
for dest, content in write_blocks:
|
||||||
|
self.assertIn(dest, self.file_handle_mocks)
|
||||||
|
write_handle = self.file_handle_mocks[dest].write
|
||||||
|
write_handle.assert_called_once_with(content)
|
||||||
|
|
||||||
|
def test_centos_hp(self):
|
||||||
|
self._assert_network_output('CentOS', 'hp')
|
||||||
|
|
||||||
|
def test_centos_rax(self):
|
||||||
|
self._assert_network_output('CentOS', 'rax')
|
||||||
|
|
||||||
|
def test_debian_hp(self):
|
||||||
|
self._assert_network_output('Debian', 'hp')
|
||||||
|
|
||||||
|
def test_debian_rax(self):
|
||||||
|
self._assert_network_output('Debian', 'rax')
|
||||||
|
|
||||||
|
def test_fedora_hp(self):
|
||||||
|
self._assert_network_output('Fedora', 'hp')
|
||||||
|
|
||||||
|
def test_fedora_rax(self):
|
||||||
|
self._assert_network_output('Fedora', 'rax')
|
||||||
|
|
||||||
|
def test_redhat_hp(self):
|
||||||
|
self._assert_network_output('RedHat', 'hp')
|
||||||
|
|
||||||
|
def test_redhat_rax(self):
|
||||||
|
self._assert_network_output('RedHat', 'rax')
|
||||||
|
|
||||||
|
def test_ubuntu_hp(self):
|
||||||
|
self._assert_network_output('Ubuntu', 'hp')
|
||||||
|
|
||||||
|
def test_ubuntu_rax(self):
|
||||||
|
self._assert_network_output('Ubuntu', 'rax')
|
||||||
|
@ -6,10 +6,11 @@ hacking>=0.9.2,<0.10
|
|||||||
|
|
||||||
coverage>=3.6
|
coverage>=3.6
|
||||||
discover
|
discover
|
||||||
|
mock>=1.0
|
||||||
python-subunit
|
python-subunit
|
||||||
sphinx>=1.1.2
|
sphinx>=1.1.2
|
||||||
oslosphinx
|
oslosphinx
|
||||||
oslotest>=1.1.0.0a1
|
oslotest>=1.1.0.0a1
|
||||||
testrepository>=0.0.18
|
testrepository>=0.0.18
|
||||||
testscenarios>=0.4
|
testscenarios>=0.4
|
||||||
testtools>=0.9.34
|
testtools>=0.9.34
|
||||||
|
3
tox.ini
3
tox.ini
@ -8,8 +8,7 @@ usedevelop = True
|
|||||||
install_command = pip install -U {opts} {packages}
|
install_command = pip install -U {opts} {packages}
|
||||||
setenv =
|
setenv =
|
||||||
VIRTUAL_ENV={envdir}
|
VIRTUAL_ENV={envdir}
|
||||||
deps = -r{toxinidir}/requirements.txt
|
deps = -r{toxinidir}/test-requirements.txt
|
||||||
-r{toxinidir}/test-requirements.txt
|
|
||||||
commands = python setup.py testr --slowest --testr-args='{posargs}'
|
commands = python setup.py testr --slowest --testr-args='{posargs}'
|
||||||
|
|
||||||
[testenv:pep8]
|
[testenv:pep8]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user