Added negative tests for package import
Two tests for case of package importing by invaild url and name from repo. And two tests for import of invalid zip packages from repo. Implements blueprint: murano-ui-integration-test-coverage Change-Id: Ifb6f0adea2c51215da537685dfb6b92176293df3
This commit is contained in:
@@ -17,6 +17,7 @@ import sys
|
||||
import testtools
|
||||
import time
|
||||
import urlparse
|
||||
import uuid
|
||||
|
||||
from glanceclient import client as gclient
|
||||
from keystoneclient.v2_0 import client as ksclient
|
||||
@@ -88,6 +89,12 @@ class UITestCase(BaseDeps):
|
||||
for env in self.murano_client.environments.list():
|
||||
self.remove_environment(env.id)
|
||||
|
||||
def gen_random_resource_name(self, prefix=None, reduce_by=None):
|
||||
random_name = str(uuid.uuid4()).replace('-', '')[::reduce_by]
|
||||
if prefix:
|
||||
random_name = prefix + '_' + random_name
|
||||
return random_name
|
||||
|
||||
def remove_environment(self, environment_id, timeout=180):
|
||||
self.murano_client.environments.delete(environment_id)
|
||||
|
||||
@@ -279,6 +286,13 @@ class UITestCase(BaseDeps):
|
||||
ui.WebDriverWait(self.driver, 2).until(
|
||||
EC.presence_of_element_located(locator))
|
||||
|
||||
def wait_for_error_message(self, sec=20):
|
||||
locator = (by.By.CSS_SELECTOR, 'div.alert-danger > p')
|
||||
logger.debug("Waiting for an error message")
|
||||
ui.WebDriverWait(self.driver, sec, 1).until(
|
||||
EC.presence_of_element_located(locator))
|
||||
return self.driver.find_element(*locator).text
|
||||
|
||||
def wait_element_is_clickable(self, method, element):
|
||||
return ui.WebDriverWait(self.driver, 10).until(
|
||||
EC.element_to_be_clickable((method, element)))
|
||||
|
||||
@@ -18,6 +18,7 @@ import SocketServer
|
||||
import tempfile
|
||||
import time
|
||||
import uuid
|
||||
import zipfile
|
||||
|
||||
from selenium.webdriver.common import by
|
||||
from selenium.webdriver.support import ui
|
||||
@@ -1118,6 +1119,19 @@ class TestSuiteRepository(base.PackageTestCase):
|
||||
utils.compose_bundle(os.path.join(bundles_dir, name + '.bundle'),
|
||||
app_names)
|
||||
|
||||
def _make_pkg_zip_regular_file(self, name):
|
||||
file_name = os.path.join(self.serve_dir, 'apps', name + '.zip')
|
||||
with open(file_name, 'w') as f:
|
||||
f.write("I'm not an application. I'm not a zip file at all")
|
||||
|
||||
def _make_non_murano_zip_in_pkg(self, name):
|
||||
file_name = os.path.join(self.serve_dir, 'apps', 'manifest.yaml')
|
||||
with open(file_name, 'w') as f:
|
||||
f.write("Description: I'm not a murano package at all")
|
||||
zip_name = os.path.join(self.serve_dir, 'apps', name + '.zip')
|
||||
with zipfile.ZipFile(zip_name, 'w') as archive:
|
||||
archive.write(file_name)
|
||||
|
||||
def setUp(self):
|
||||
super(TestSuiteRepository, self).setUp()
|
||||
self.serve_dir = tempfile.mkdtemp(suffix="repo")
|
||||
@@ -1286,6 +1300,129 @@ class TestSuiteRepository(base.PackageTestCase):
|
||||
self.check_element_on_page(
|
||||
by.By.XPATH, c.AppPackages.format(pkg_name))
|
||||
|
||||
def test_import_package_by_invalid_url(self):
|
||||
"""Negative test when package is imported by invalid url."""
|
||||
pkg_name = self.gen_random_resource_name('pkg')
|
||||
self._compose_app(pkg_name)
|
||||
|
||||
self.navigate_to('Manage')
|
||||
self.go_to_submenu('Packages')
|
||||
|
||||
# Invalid folder
|
||||
self.driver.find_element_by_id(c.UploadPackage).click()
|
||||
sel = self.driver.find_element_by_css_selector(
|
||||
"select[name='upload-import_type']")
|
||||
sel = ui.Select(sel)
|
||||
sel.select_by_value("by_url")
|
||||
el = self.driver.find_element_by_css_selector(
|
||||
"input[name='upload-url']")
|
||||
el.send_keys("http://127.0.0.1:8099/None/{0}.zip".format(pkg_name))
|
||||
self.driver.find_element_by_xpath(c.InputSubmit).click()
|
||||
self.wait_for_error_message()
|
||||
|
||||
# HTTP connect error
|
||||
self.driver.find_element_by_id(c.UploadPackage).click()
|
||||
sel = self.driver.find_element_by_css_selector(
|
||||
"select[name='upload-import_type']")
|
||||
sel = ui.Select(sel)
|
||||
sel.select_by_value("by_url")
|
||||
el = self.driver.find_element_by_css_selector(
|
||||
"input[name='upload-url']")
|
||||
el.send_keys("http://127.0.0.2:12345/apps/{0}.zip".format(pkg_name))
|
||||
self.driver.find_element_by_xpath(c.InputSubmit).click()
|
||||
self.wait_for_error_message(sec=90)
|
||||
|
||||
# Invalid app name
|
||||
self.driver.find_element_by_id(c.UploadPackage).click()
|
||||
sel = self.driver.find_element_by_css_selector(
|
||||
"select[name='upload-import_type']")
|
||||
sel = ui.Select(sel)
|
||||
sel.select_by_value("by_url")
|
||||
el = self.driver.find_element_by_css_selector(
|
||||
"input[name='upload-url']")
|
||||
el.send_keys(
|
||||
"http://127.0.0.1:8099/apps/invalid_{0}.zip".format(pkg_name))
|
||||
self.driver.find_element_by_xpath(c.InputSubmit).click()
|
||||
self.wait_for_error_message()
|
||||
|
||||
self.check_element_not_on_page(
|
||||
by.By.XPATH, c.AppPackages.format(pkg_name))
|
||||
|
||||
def test_import_package_by_invalid_name(self):
|
||||
"""Negative test when package is imported by invalid name from repo."""
|
||||
pkg_name = self.gen_random_resource_name('pkg')
|
||||
self._compose_app(pkg_name)
|
||||
pkg_to_import = "invalid_" + pkg_name
|
||||
|
||||
self.navigate_to('Manage')
|
||||
self.go_to_submenu('Packages')
|
||||
self.driver.find_element_by_id(c.UploadPackage).click()
|
||||
sel = self.driver.find_element_by_css_selector(
|
||||
"select[name='upload-import_type']")
|
||||
sel = ui.Select(sel)
|
||||
sel.select_by_value("by_name")
|
||||
|
||||
el = self.driver.find_element_by_css_selector(
|
||||
"input[name='upload-repo_name']")
|
||||
el.send_keys("{0}".format(pkg_to_import))
|
||||
self.driver.find_element_by_xpath(c.InputSubmit).click()
|
||||
self.wait_for_error_message()
|
||||
|
||||
self.check_element_not_on_page(
|
||||
by.By.XPATH, c.AppPackages.format(pkg_to_import))
|
||||
|
||||
def test_import_non_zip_file(self):
|
||||
""""Negative test import regualr file instead of zip package."""
|
||||
# Create dummy package with zip file replaced by text one
|
||||
pkg_name = self.gen_random_resource_name('pkg')
|
||||
self._compose_app(pkg_name)
|
||||
self._make_pkg_zip_regular_file(pkg_name)
|
||||
|
||||
self.navigate_to('Manage')
|
||||
self.go_to_submenu('Packages')
|
||||
self.driver.find_element_by_id(c.UploadPackage).click()
|
||||
sel = self.driver.find_element_by_css_selector(
|
||||
"select[name='upload-import_type']")
|
||||
sel = ui.Select(sel)
|
||||
sel.select_by_value("by_name")
|
||||
|
||||
el = self.driver.find_element_by_css_selector(
|
||||
"input[name='upload-repo_name']")
|
||||
el.send_keys("{0}".format(pkg_name))
|
||||
self.driver.find_element_by_xpath(c.InputSubmit).click()
|
||||
|
||||
err_msg = self.wait_for_error_message()
|
||||
self.assertIn('File is not a zip file', err_msg)
|
||||
|
||||
self.check_element_not_on_page(
|
||||
by.By.XPATH, c.AppPackages.format(pkg_name))
|
||||
|
||||
def test_import_invalid_zip_file(self):
|
||||
""""Negative test import zip file which is not a murano package."""
|
||||
# At first create dummy package with zip file replaced by text one
|
||||
pkg_name = self.gen_random_resource_name('pkg')
|
||||
self._compose_app(pkg_name)
|
||||
self._make_non_murano_zip_in_pkg(pkg_name)
|
||||
|
||||
self.navigate_to('Manage')
|
||||
self.go_to_submenu('Packages')
|
||||
self.driver.find_element_by_id(c.UploadPackage).click()
|
||||
sel = self.driver.find_element_by_css_selector(
|
||||
"select[name='upload-import_type']")
|
||||
sel = ui.Select(sel)
|
||||
sel.select_by_value("by_name")
|
||||
|
||||
el = self.driver.find_element_by_css_selector(
|
||||
"input[name='upload-repo_name']")
|
||||
el.send_keys("{0}".format(pkg_name))
|
||||
self.driver.find_element_by_xpath(c.InputSubmit).click()
|
||||
|
||||
err_msg = self.wait_for_error_message()
|
||||
self.assertIn("There is no item named 'manifest.yaml'", err_msg)
|
||||
|
||||
self.check_element_not_on_page(
|
||||
by.By.XPATH, c.AppPackages.format(pkg_name))
|
||||
|
||||
|
||||
class TestSuitePackageCategory(base.PackageTestCase):
|
||||
def _import_package_with_category(self, package_archive, category):
|
||||
|
||||
Reference in New Issue
Block a user