On Mon, 2017-07-24 at 09:14 +0100, Radostin Stoyanov wrote: > --- > tests/test_file_source.py | 174 ++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 174 insertions(+) > create mode 100644 tests/test_file_source.py > > diff --git a/tests/test_file_source.py b/tests/test_file_source.py > new file mode 100644 > index 0000000..6509078 > --- /dev/null > +++ b/tests/test_file_source.py > @@ -0,0 +1,174 @@ > +# Authors: > +# Cedric Bosdonnat <cbosdonnat@xxxxxxxx> > +# Radostin Stoyanov <rstoyanov1@xxxxxxxxx> > +# > +# Copyright (C) 2017 SUSE, Inc. > +# Copyright (C) 2017 Radostin Stoyanov > +# Here too, you need to remove me from the authors and SUSE from the copyright since I didn't touch that file yet. > +# This program is free software: you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation, either version 3 of the License, or > +# (at your option) any later version. > + > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > + > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see <http://www.gnu.org/licenses/>. > + > + > +""" > +Unit tests for methods defined in virtBootstrap.sources.FileSource > +""" > + > +from tests import unittest > +from tests import mock > +from tests import sources > + > + > +# pylint: disable=invalid-name > +class TestFileSource(unittest.TestCase): > + """ > + Test cases for FileSource > + """ > + > + ################################### > + # Tests for: __init__() > + ################################### > + def test_argument_assignment(self): > + """ > + Ensures that __init__() assigns the arguments' values to instance > + variables. > + """ > + kwargs = {'uri': mock.Mock(), > + 'fmt': 'dir', > + 'progress': mock.Mock()} > + > + src_instance = sources.FileSource(**kwargs) > + > + test_values = { > + src_instance.path: kwargs['uri'].path, > + src_instance.output_format: kwargs['fmt'], > + src_instance.progress: kwargs['progress'].update_progress > + } > + for value in test_values: > + self.assertIs(value, test_values[value]) > + > + ################################### > + # Tests for: unpack() > + ################################### > + def test_unpack_invalid_source_raise_exception(self): > + """ > + Ensures that unpack() throws an Exception when called with > + invalid file source. > + """ > + m_self = mock.Mock(spec=sources.FileSource) > + m_self.path = 'foo' > + with mock.patch('os.path.isfile') as m_isfile: > + m_isfile.return_value = False > + with self.assertRaises(Exception) as err: > + sources.FileSource.unpack(m_self, 'bar') > + self.assertIn('Invalid file source', str(err.exception)) > + > + def test_unpack_to_dir(self): > + """ > + Ensures that unpack() calls safe_untar() when the output format > + is set to 'dir'. > + """ > + m_self = mock.Mock(spec=sources.FileSource) > + m_self.progress = mock.Mock() > + m_self.path = 'foo' > + m_self.output_format = 'dir' > + dest = 'bar' > + > + with mock.patch('os.path.isfile') as m_isfile: > + m_isfile.return_value = True > + with mock.patch('virtBootstrap.utils.safe_untar') as m_untar: > + sources.FileSource.unpack(m_self, dest) > + > + m_untar.assert_called_once_with(m_self.path, dest) > + > + def test_unpack_to_qcow2(self): > + """ > + Ensures that unpack() calls create_qcow2() when the output > + format is set to 'qcow2'. > + """ > + m_self = mock.Mock(spec=sources.FileSource) > + m_self.progress = mock.Mock() > + m_self.path = 'foo' > + m_self.output_format = 'qcow2' > + dest = 'bar' > + qcow2_file_path = 'foobar' > + > + with mock.patch.multiple('os.path', > + isfile=mock.DEFAULT, > + realpath=mock.DEFAULT) as mocked: > + > + mocked['isfile'].return_value = True > + mocked['realpath'].return_value = qcow2_file_path > + with mock.patch('virtBootstrap.utils.create_qcow2') as m_qcow2: > + sources.FileSource.unpack(m_self, dest) > + > + m_qcow2.assert_called_once_with(m_self.path, qcow2_file_path) > + > + def _unpack_raise_error_test(self, > + output_format, > + side_effect=None, > + patch_method=None, > + msg=None): > + """ > + This method is gather common test pattern used in the following > + three test cases. > + """ > + m_self = mock.Mock(spec=sources.FileSource) > + m_self.progress = mock.Mock() > + m_self.path = 'foo' > + m_self.output_format = output_format > + dest = 'bar' > + > + with mock.patch.multiple('os.path', > + isfile=mock.DEFAULT, > + realpath=mock.DEFAULT) as m_path: > + m_path['isfile'].return_value = True > + with self.assertRaises(Exception) as err: > + if patch_method: > + with mock.patch(patch_method) as mocked_method: > + mocked_method.side_effect = side_effect > + sources.FileSource.unpack(m_self, dest) > + else: > + sources.FileSource.unpack(m_self, dest) > + if msg: > + self.assertEqual(msg, str(err.exception)) > + > + def test_unpack_invalid_format_raise_exception(self): > + """ > + Ensures that unpack() throws an Exception when called with > + invalid output format. > + """ > + self._unpack_raise_error_test('foo', msg='Unknown format:foo') > + > + def test_unpack_raise_error_if_untar_fail(self): > + """ > + Ensures that unpack() throws an Exception when safe_untar() > + fails. > + """ > + msg = 'Caught untar failure' > + patch_method = 'virtBootstrap.utils.safe_untar' > + self._unpack_raise_error_test(output_format='dir', > + side_effect=Exception(msg), > + patch_method=patch_method, > + msg=msg) > + > + def test_unpack_raise_error_if_extract_in_qcow2_fail(self): > + """ > + Ensures that unpack() throws an Exception when create_qcow2() > + fails. > + """ > + msg = 'Caught extract_layers_in_qcow2 failure' > + patch_method = 'virtBootstrap.utils.create_qcow2' > + self._unpack_raise_error_test(output_format='qcow2', > + side_effect=Exception(msg), > + patch_method=patch_method, > + msg=msg) ACK -- Cedric _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list