Merge "Increase unit test coverage for Package Base API."
This commit is contained in:
commit
8a8b2cd1ae
|
@ -0,0 +1,182 @@
|
|||
# Copyright (c) 2016 AT&T Corp
|
||||
# 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 mock
|
||||
import os
|
||||
import random
|
||||
import semantic_version
|
||||
import shutil
|
||||
import string
|
||||
import tempfile
|
||||
|
||||
from murano.packages import exceptions
|
||||
from murano.packages import package_base
|
||||
import murano.tests.unit.base as test_base
|
||||
|
||||
|
||||
class TestPackageBase(test_base.MuranoTestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super(TestPackageBase, cls).setUpClass()
|
||||
package_base.PackageBase.__abstractmethods__ = set()
|
||||
cls.source_directory = tempfile.mkdtemp(dir=tempfile.tempdir)
|
||||
cls.version = semantic_version.Version.coerce('1.2.3')
|
||||
cls.mock_manifest = {
|
||||
'Name': 'mock_display_name',
|
||||
'FullName': 'mock_full_name',
|
||||
'Type': 'Application',
|
||||
'Version': '1.2.3',
|
||||
'Description': 'test_description',
|
||||
'Author': 'test_author',
|
||||
'Supplier': 'test_supplier',
|
||||
'Tags': ['tag1', 'tag2', 'tag3'],
|
||||
'Logo': None
|
||||
}
|
||||
cls.package_base = package_base.PackageBase('test_format',
|
||||
'test_runtime_version',
|
||||
cls.source_directory,
|
||||
cls.mock_manifest)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
if os.path.isdir(cls.source_directory):
|
||||
shutil.rmtree(cls.source_directory)
|
||||
|
||||
def test_create_package_base_without_full_name(self):
|
||||
with self.assertRaisesRegexp(exceptions.PackageFormatError,
|
||||
'FullName is not specified'):
|
||||
package_base.PackageBase('test_format',
|
||||
'test_runtime_version',
|
||||
'test_source_directory',
|
||||
manifest={'FullName': None})
|
||||
|
||||
def test_create_package_base_with_invalid_full_name(self):
|
||||
full_names = ['.invalid_name_1', 'invalid..name..2', 'invalid name 3']
|
||||
for full_name in full_names:
|
||||
expected_error_message = 'Invalid FullName {0}'.format(full_name)
|
||||
with self.assertRaisesRegexp(exceptions.PackageFormatError,
|
||||
expected_error_message):
|
||||
package_base.PackageBase('test_format',
|
||||
'test_runtime_version',
|
||||
'test_source_directory',
|
||||
manifest={'FullName': full_name})
|
||||
|
||||
def test_create_package_base_with_invalid_type(self):
|
||||
package_type = 'Invalid'
|
||||
with self.assertRaisesRegexp(exceptions.PackageFormatError,
|
||||
'Invalid package Type {0}'
|
||||
.format(package_type)):
|
||||
package_base.PackageBase('test_format',
|
||||
'test_runtime_version',
|
||||
'test_source_directory',
|
||||
manifest={'FullName': 'mock_full_name',
|
||||
'Type': package_type})
|
||||
|
||||
def test_requirements_negative(self):
|
||||
with self.assertRaisesRegexp(NotImplementedError, None):
|
||||
self.package_base.requirements
|
||||
|
||||
def test_classes_negative(self):
|
||||
with self.assertRaisesRegexp(NotImplementedError, None):
|
||||
self.package_base.classes
|
||||
|
||||
def test_get_class_negative(self):
|
||||
with self.assertRaisesRegexp(NotImplementedError, None):
|
||||
self.package_base.get_class(None)
|
||||
|
||||
def test_ui_negative(self):
|
||||
with self.assertRaisesRegexp(NotImplementedError, None):
|
||||
self.package_base.ui
|
||||
|
||||
def test_full_name(self):
|
||||
self.assertEqual(self.mock_manifest['FullName'],
|
||||
self.package_base.full_name)
|
||||
|
||||
def test_source_directory(self):
|
||||
self.assertEqual(self.source_directory,
|
||||
self.package_base.source_directory)
|
||||
|
||||
def test_version(self):
|
||||
self.assertEqual(self.version,
|
||||
self.package_base.version)
|
||||
|
||||
def test_package_type(self):
|
||||
self.assertEqual(self.mock_manifest['Type'],
|
||||
self.package_base.package_type)
|
||||
|
||||
def test_display_name(self):
|
||||
self.assertEqual(self.mock_manifest['Name'],
|
||||
self.package_base.display_name)
|
||||
|
||||
def test_description(self):
|
||||
self.assertEqual(self.mock_manifest['Description'],
|
||||
self.package_base.description)
|
||||
|
||||
def test_author(self):
|
||||
self.assertEqual(self.mock_manifest['Author'],
|
||||
self.package_base.author)
|
||||
|
||||
def test_supplier(self):
|
||||
self.assertEqual(self.mock_manifest['Supplier'],
|
||||
self.package_base.supplier)
|
||||
|
||||
def test_tags(self):
|
||||
self.assertEqual(self.mock_manifest['Tags'],
|
||||
self.package_base.tags)
|
||||
|
||||
def test_logo_without_file_name(self):
|
||||
self.assertIsNone(self.package_base.logo)
|
||||
|
||||
def test_logo_with_invalid_logo_path(self):
|
||||
expected_error_message = 'Unable to load logo'
|
||||
self.package_base._logo = ''.join(random.choice(string.ascii_letters)
|
||||
for _ in range(10))
|
||||
with self.assertRaisesRegexp(exceptions.PackageLoadError,
|
||||
expected_error_message):
|
||||
self.package_base.logo
|
||||
self.package_base._logo = self.mock_manifest['Logo']
|
||||
|
||||
@mock.patch('murano.packages.package_base.imghdr',
|
||||
what=mock.MagicMock(return_value='xyz'))
|
||||
def test_load_image_with_invalid_extension(self, mock_imghdr):
|
||||
expected_error_message = 'Unsupported Format.'
|
||||
with self.assertRaisesRegexp(exceptions.PackageLoadError,
|
||||
expected_error_message):
|
||||
self.package_base._load_image('logo.xyz', 'logo.xyz', 'logo')
|
||||
full_path = os.path.join(self.package_base._source_directory,
|
||||
'logo.xyz')
|
||||
mock_imghdr.what.assert_called_once_with(full_path)
|
||||
|
||||
@mock.patch('murano.packages.package_base.imghdr',
|
||||
what=mock.MagicMock(return_value='png'))
|
||||
@mock.patch('murano.packages.package_base.os')
|
||||
def test_load_image_with_oversized_image(self, mock_os, mock_imghdr):
|
||||
mock_os.stat.return_value = mock.MagicMock(st_size=5000 * 1024)
|
||||
mock_os.isfile = mock.MagicMock(return_value=True)
|
||||
expected_error_message = 'Max allowed size is {0}'.format(500 * 1024)
|
||||
with self.assertRaisesRegexp(exceptions.PackageLoadError,
|
||||
expected_error_message):
|
||||
self.package_base._load_image('logo.xyz', 'logo.xyz', 'logo')
|
||||
|
||||
def test_meta(self):
|
||||
self.assertIsNone(self.package_base.meta)
|
||||
|
||||
def test_get_resource(self):
|
||||
test_name = 'test_resource_name'
|
||||
expected_dir = os.path.join(self.source_directory, 'Resources',
|
||||
test_name)
|
||||
self.assertEqual(expected_dir, self.package_base.get_resource(
|
||||
test_name))
|
Loading…
Reference in New Issue