From 1fb04dcc99e7e42ce97d8b9eb4b89689d99fbb16 Mon Sep 17 00:00:00 2001 From: Thomas Goirand Date: Fri, 19 Feb 2016 16:28:35 +0000 Subject: [PATCH] Added patch: Only_import_selenium_if_WITH_SELENIUM_is_set.patch Rewritten-From: b0ea5fbb35a52aaa3aa2e70722fe36e2d5108eb3 --- xenial/debian/changelog | 1 + ...ort_selenium_if_WITH_SELENIUM_is_set.patch | 164 ++++++++++++++++++ xenial/debian/patches/series | 1 + 3 files changed, 166 insertions(+) create mode 100644 xenial/debian/patches/Only_import_selenium_if_WITH_SELENIUM_is_set.patch diff --git a/xenial/debian/changelog b/xenial/debian/changelog index 4eeb804..d0b3740 100644 --- a/xenial/debian/changelog +++ b/xenial/debian/changelog @@ -6,6 +6,7 @@ horizon (2:9.0.0~b2+2016.02.18.git.cda9604792-1) experimental; urgency=medium * Added patch: 0100-add-openstack_auth-in-INSTALLED_APPS.patch * Added patch: 0090-explicitly-declare-app_label.patch * Added patch: Fix_remaining_Django_1.9_test_failures.patch + * Added patch: Only_import_selenium_if_WITH_SELENIUM_is_set.patch -- Thomas Goirand Wed, 09 Dec 2015 11:37:40 +0100 diff --git a/xenial/debian/patches/Only_import_selenium_if_WITH_SELENIUM_is_set.patch b/xenial/debian/patches/Only_import_selenium_if_WITH_SELENIUM_is_set.patch new file mode 100644 index 0000000..c74cdff --- /dev/null +++ b/xenial/debian/patches/Only_import_selenium_if_WITH_SELENIUM_is_set.patch @@ -0,0 +1,164 @@ +Subject: Only import selenium if WITH_SELENIUM is set + here's some unit tests errors in Debian when building the Horizon package, + because of missing conditionals when importing the selenium Python modules. + This patch fixes it. +Author: Thomas Goirand +Date: Fri, 19 Feb 2016 16:23:04 +0000 +Change-Id: I7e0c10f8a7dfe213d1b471a58bbef378bc80a615 +Forwarded: https://review.openstack.org/#/c/282410/ +Last-Update: 2016-02-20 + +diff --git a/horizon/test/firefox_binary.py b/horizon/test/firefox_binary.py +index 2597789..caacc88 100644 +--- a/horizon/test/firefox_binary.py ++++ b/horizon/test/firefox_binary.py +@@ -11,64 +11,68 @@ + # 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 platform + import shutil + import subprocess + +-from selenium.common import exceptions as selenium_exceptions +-from selenium.webdriver.common import desired_capabilities as dc +-from selenium.webdriver import firefox ++with_sel = os.environ.get('WITH_SELENIUM', False) ++if with_sel: ++ from selenium.common import exceptions as selenium_exceptions ++ from selenium.webdriver.common import desired_capabilities as dc ++ from selenium.webdriver import firefox + + +-class FirefoxBinary(firefox.firefox_binary.FirefoxBinary): +- """Workarounds selenium firefox issues. ++ class FirefoxBinary(firefox.firefox_binary.FirefoxBinary): ++ """Workarounds selenium firefox issues. + +- There is race condition in the way firefox is spawned. The exact +- cause hasn't been properly diagnosed yet but it's around: ++ There is race condition in the way firefox is spawned. The exact ++ cause hasn't been properly diagnosed yet but it's around: + +- - getting a free port from the OS with +- selenium.webdriver.common.utils free_port(), ++ - getting a free port from the OS with ++ selenium.webdriver.common.utils free_port(), + +- - release the port immediately but record it in ff prefs so that ff +- can listen on that port for the internal http server. ++ - release the port immediately but record it in ff prefs so that ff ++ can listen on that port for the internal http server. + +- It has been observed that this leads to hanging processes for +- 'firefox -silent'. +- """ ++ It has been observed that this leads to hanging processes for ++ 'firefox -silent'. ++ """ + +- def _start_from_profile_path(self, path): +- self._firefox_env["XRE_PROFILE_PATH"] = path ++ def _start_from_profile_path(self, path): ++ self._firefox_env["XRE_PROFILE_PATH"] = path + +- if platform.system().lower() == 'linux': +- self._modify_link_library_path() +- command = [self._start_cmd, "-silent"] +- if self.command_line is not None: +- for cli in self.command_line: +- command.append(cli) ++ if platform.system().lower() == 'linux': ++ self._modify_link_library_path() ++ command = [self._start_cmd, "-silent"] ++ if self.command_line is not None: ++ for cli in self.command_line: ++ command.append(cli) + + # The following exists upstream and is known to create hanging + # firefoxes, leading to zombies. +-# subprocess.Popen(command, stdout=self._log_file, +-# stderr=subprocess.STDOUT, +-# env=self._firefox_env).communicate() +- command[1] = '-foreground' +- self.process = subprocess.Popen( +- command, stdout=self._log_file, stderr=subprocess.STDOUT, +- env=self._firefox_env) ++# subprocess.Popen(command, stdout=self._log_file, ++# stderr=subprocess.STDOUT, ++# env=self._firefox_env).communicate() ++ command[1] = '-foreground' ++ self.process = subprocess.Popen( ++ command, stdout=self._log_file, stderr=subprocess.STDOUT, ++ env=self._firefox_env) + + +-class WebDriver(firefox.webdriver.WebDriver): +- """Workarounds selenium firefox issues.""" +- def __init__(self, firefox_profile=None, firefox_binary=None, timeout=30, +- desired_capabilities=dc.DesiredCapabilities.FIREFOX, +- proxy=None): +- try: +- super(WebDriver, self).__init__( +- firefox_profile, FirefoxBinary(), timeout, +- desired_capabilities, proxy) +- except selenium_exceptions.WebDriverException: +- # If we can't start, cleanup profile +- shutil.rmtree(self.profile.path) +- if self.profile.tempfolder is not None: +- shutil.rmtree(self.profile.tempfolder) +- raise ++ class WebDriver(firefox.webdriver.WebDriver): ++ """Workarounds selenium firefox issues.""" ++ def __init__(self, firefox_profile=None, firefox_binary=None, ++ timeout=30, ++ desired_capabilities=dc.DesiredCapabilities.FIREFOX, ++ proxy=None): ++ try: ++ super(WebDriver, self).__init__( ++ firefox_profile, FirefoxBinary(), timeout, ++ desired_capabilities, proxy) ++ except selenium_exceptions.WebDriverException: ++ # If we can't start, cleanup profile ++ shutil.rmtree(self.profile.path) ++ if self.profile.tempfolder is not None: ++ shutil.rmtree(self.profile.tempfolder) ++ raise +diff --git a/horizon/test/webdriver.py b/horizon/test/webdriver.py +index 2a699fc..83b2701 100644 +--- a/horizon/test/webdriver.py ++++ b/horizon/test/webdriver.py +@@ -29,18 +29,20 @@ class ElementNotReloadableException(Exception): + pass + + +-from selenium.common import exceptions +-from selenium.webdriver.common import by +-from selenium.webdriver.common import desired_capabilities as dc +-from selenium.webdriver.remote import webelement +- +-# Select the WebDriver to use based on the --selenium-phantomjs switch. +-if os.environ.get('SELENIUM_PHANTOMJS'): +- from selenium.webdriver import PhantomJS as WebDriver +- desired_capabilities = dc.DesiredCapabilities.PHANTOMJS +-else: +- from horizon.test.firefox_binary import WebDriver +- desired_capabilities = dc.DesiredCapabilities.FIREFOX ++with_sel = os.environ.get('WITH_SELENIUM', False) ++if with_sel: ++ from selenium.common import exceptions ++ from selenium.webdriver.common import by ++ from selenium.webdriver.common import desired_capabilities as dc ++ from selenium.webdriver.remote import webelement ++ ++ # Select the WebDriver to use based on the --selenium-phantomjs switch. ++ if os.environ.get('SELENIUM_PHANTOMJS'): ++ from selenium.webdriver import PhantomJS as WebDriver ++ desired_capabilities = dc.DesiredCapabilities.PHANTOMJS ++ else: ++ from horizon.test.firefox_binary import WebDriver ++ desired_capabilities = dc.DesiredCapabilities.FIREFOX + + + class WrapperFindOverride(object): diff --git a/xenial/debian/patches/series b/xenial/debian/patches/series index 292da86..9820d71 100644 --- a/xenial/debian/patches/series +++ b/xenial/debian/patches/series @@ -6,3 +6,4 @@ enable_identity_users_panel.patch #0100-add-openstack_auth-in-INSTALLED_APPS.patch 0090-explicitly-declare-app_label.patch Fix_remaining_Django_1.9_test_failures.patch +Only_import_selenium_if_WITH_SELENIUM_is_set.patch \ No newline at end of file -- 2.45.2