All of lore.kernel.org
 help / color / mirror / Atom feed
* [[PATCH][qa-tools] 10/16] Reorder source code tree,
@ 2016-02-09 22:45 Aníbal Limón
  2016-02-09 22:45 ` [[PATCH][qa-tools] 11/16] README.md: Update with information about setup, toaster and maintainence Aníbal Limón
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Aníbal Limón @ 2016-02-09 22:45 UTC (permalink / raw)
  To: yocto; +Cc: richard.purdie, benjamin.esquivel

Get rid of unnecessary level of tests folder.

Move toaster/__init__.py to toaster/toaster.py program.

Add empty toaster/__init__.py and external/__init__.py for said
to python to use folder as module.

Signed-off-by: Aníbal Limón <anibal.limon@linux.intel.com>
---
 external/__init__.py      |   0
 tests/toaster/__init__.py | 125 ----------------------------------------------
 tests/toaster/helpers.py  | 109 ----------------------------------------
 toaster/__init__.py       |   0
 toaster/helpers.py        | 109 ++++++++++++++++++++++++++++++++++++++++
 toaster/toaster.py        | 125 ++++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 234 insertions(+), 234 deletions(-)
 create mode 100644 external/__init__.py
 delete mode 100755 tests/toaster/__init__.py
 delete mode 100644 tests/toaster/helpers.py
 create mode 100644 toaster/__init__.py
 create mode 100644 toaster/helpers.py
 create mode 100755 toaster/toaster.py

diff --git a/external/__init__.py b/external/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/toaster/__init__.py b/tests/toaster/__init__.py
deleted file mode 100755
index d3c5fff..0000000
--- a/tests/toaster/__init__.py
+++ /dev/null
@@ -1,125 +0,0 @@
-import unittest, time, re, sys, getopt, os, logging, string, errno, exceptions
-import shutil, argparse, ConfigParser, platform
-
-from selenium import webdriver
-from selenium.common.exceptions import NoSuchElementException
-from selenium import selenium
-from selenium.webdriver.common.by import By
-from selenium.webdriver.common.keys import Keys
-from selenium.webdriver.support.ui import Select
-
-sys.path.insert(0, os.path.join(os.path.dirname(
-    os.path.abspath(__file__)), '../'))
-from toaster.helpers import ToasterHelper
-
-WORK_DIRECTORY = '/tmp/toaster'
-POKY_URL = 'http://git.yoctoproject.org/git/poky.git'
-
-class InitToaster(unittest.TestCase):
-    @classmethod
-    def setUpClass(self):
-        self.toaster_helper = ToasterHelper(WORK_DIRECTORY, POKY_URL)
-        self.toaster_helper.clone(rm=True)
-        self.toaster_helper.setup()
-        self.toaster_helper.start()
-
-        self.driver = webdriver.Firefox()
-        self.timeout = 320
-
-    @classmethod
-    def tearDownClass(self):
-        self.toaster_helper.stop(force=True)
-        self.driver.close()
-
-    def is_text_present (self, patterns):
-        for pattern in patterns:
-            if str(pattern) not in self.driver.page_source:
-                print pattern
-                return False
-        return True
-
-    def test_setupToaster(self):
-        self.driver.maximize_window()
-        self.driver.get("localhost:8000")
-        try:
-            self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
-        except:
-            self.driver.find_element_by_id("new-project-button").click()
-            self.driver.find_element_by_id("new-project-name").send_keys("selenium-project")
-            self.driver.find_element_by_id("create-project-button").click()
-        try:
-            self.driver.find_element_by_link_text("selenium-project").click()
-        except:
-            self.driver.find_element_by_id("new-project-button").click()
-            self.driver.find_element_by_id("new-project-name").send_keys("selenium-project")
-            self.driver.find_element_by_id("create-project-button").click()
-        time.sleep(5)
-        #workaround
-#        self.driver.find_element_by_partial_link_text("Bitbake").click()
-#        self.driver.find_element_by_id("config_var_trash_10").click()
-#        time.sleep(5)
-        #queue up a core-image-minimal
-        self.driver.find_element_by_id("build-input").send_keys("core-image-minimal")
-        self.driver.find_element_by_id("build-button").click()
-        time.sleep(20)
-        #queue up a core-image-sato
-        self.driver.find_element_by_id("build-input").send_keys("core-image-sato")
-        self.driver.find_element_by_id("build-button").click()
-        time.sleep(20)
-        #go back to the main project page
-        self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
-        self.driver.find_element_by_link_text("selenium-project").click()
-        #check if meta-selftest layer is added and import it if it's not
-        if not (self.is_text_present("meta-selftest")):
-            self.driver.find_element_by_css_selector("a[href='/toastergui/project/2/importlayer']").click()
-            self.driver.find_element_by_id("import-layer-name").send_keys("meta-selftest")
-            self.driver.find_element_by_id("layer-git-repo-url").send_keys("git://git.yoctoproject.org/poky")
-            self.driver.find_element_by_id("layer-subdir").send_keys("meta-selftest")
-            self.driver.find_element_by_id("layer-git-ref").send_keys("HEAD")
-            self.driver.find_element_by_id("import-and-add-btn").click()
-        #queue up an error-image build
-        self.driver.find_element_by_id("build-input").send_keys("error-image")
-        self.driver.find_element_by_id("build-button").click()
-        time.sleep(5)
-        #move to all builds page
-        self.driver.find_element_by_css_selector("a[href='/toastergui/builds/']").click()
-        time.sleep(5)
-        self.driver.refresh()
-        #check progress bar is displayed to signal a build has started
-        try:
-            self.driver.find_element_by_xpath("//div[@class='progress']").is_displayed()
-        except:
-            print "Unable to start new build"
-            self.fail(msg="Unable to start new build")
-        count = 0
-        failflag = False
-        try:
-            self.driver.refresh()
-            time.sleep(1)
-            print "First check starting"
-            while (self.driver.find_element_by_xpath("//div[@class='progress']").is_displayed()):
-                #print "Looking for build in progress"
-                print 'Builds running for '+str(count)+' minutes'
-                count += 5
-                #timeout default is at 179 minutes(3 hours); see set_up method to change
-                if (count > self.timeout):
-                    failflag = True
-                    print 'Builds took longer than expected to complete; Failing due to possible build stuck.'
-                    self.fail()
-                time.sleep(300)
-                self.driver.refresh()
-        except:
-           try:
-                if failflag:
-                    self.fail(msg="Builds took longer than expected to complete; Failing due to possible build stuck.")
-                print "Looking for successful build"
-                self.driver.find_element_by_xpath("//div[@class='alert build-result alert-success']").is_displayed()
-           except:
-                if failflag:
-                    self.fail(msg="Builds took longer than expected to complete; Failing due to possible build stuck.")
-                print 'Builds did not complete successfully'
-                self.fail(msg="Builds did not complete successfully.")
-        print "Builds complete!"
-
-if __name__ == "__main__":
-    unittest.main()
diff --git a/tests/toaster/helpers.py b/tests/toaster/helpers.py
deleted file mode 100644
index 753bbf0..0000000
--- a/tests/toaster/helpers.py
+++ /dev/null
@@ -1,109 +0,0 @@
-import subprocess
-import os
-import shutil
-import signal
-import tempfile
-
-from proc.core import find_processes
-
-TOASTER_TEST_BRANCH = 'toaster_tests'
-VENV_NAME = 'venv'
-SHELL_CMD = os.environ['SHELL'] if 'SHELL' in os.environ else "/bin/bash"
-
-def _check_output1(*popenargs, **kwargs):
-    """
-        Almost the same as subprocess.check_output but change the stdout from
-        PIPE to tempfile to avoid deadlocks when trying to read the PIPE using
-        communicate(). This scenario can be seen calling toaster_start on failure
-        scenarios.
-
-        This causes a little overhead by the tempfile.
-    """
-
-    f = tempfile.TemporaryFile(mode='rw+')
-    if 'stdout' in kwargs:
-        raise ValueError('stdout argument not allowed, it will be overridden.')
-    process = subprocess.Popen(stdout=f, *popenargs, **kwargs)
-    retcode = process.wait()
-
-    f.flush()
-    os.fsync(f.fileno())
-    f.seek(0, 0)
-    output = f.read()
-    f.close()
-
-    if retcode:
-        cmd = kwargs.get("args")
-        if cmd is None:
-            cmd = popenargs[0]
-        raise subprocess.CalledProcessError(retcode, cmd, output=output)
-    return output
-
-class ToasterHelper(object):
-    def __init__(self, directory, repo, repo_ref='master'):
-        self.directory = directory
-        self.repo = repo
-        self.repo_ref = repo_ref
-
-    def _execute_command(self, cmd):
-        return _check_output1([SHELL_CMD, "-c", "cd %s; %s" % \
-            (self.directory, cmd)], stderr=subprocess.STDOUT)
-
-    def _execute_command_venv(self, venv, cmd):
-        return self._execute_command("source %s/%s/bin/activate; %s"\
-                % (self.directory, venv, cmd))
-
-    def clone(self, rm=False):
-        if os.path.exists(self.directory):
-            if rm:
-                shutil.rmtree(self.directory)
-            else:
-                raise IOError
-
-        subprocess.check_output([SHELL_CMD, "-c", "git clone %s %s" % \
-            (self.repo, self.directory)], stderr=subprocess.STDOUT)
-        self._execute_command("git checkout %s -b %s" % \
-            (self.repo_ref, TOASTER_TEST_BRANCH))
-
-    def setup(self):
-        self._execute_command("virtualenv %s" % VENV_NAME)
-        self._execute_command_venv(VENV_NAME, "pip install -r" \
-            " bitbake/toaster-requirements.txt")
-
-    def start(self):
-        return self._execute_command_venv(VENV_NAME,
-            "source %s/oe-init-build-env; source %s/bitbake/bin/toaster start" % \
-            (self.directory, self.directory))
-
-    def _stop_force(self):
-        """
-            The _stop_force method iterates over the /proc and search for toaster path
-            in the process cmdline then send SIGKILL for every matched process.
-        """
-        pids = []
-        for p in find_processes():
-            if len(p.cmdline) > 1 and \
-                os.path.basename(p.cmdline[0]) == 'python' and \
-                p.cmdline[1].startswith(self.directory):
-                    pids.append(p.pid)
-
-        for pid in pids:
-            try:
-                os.kill(pid, signal.SIGKILL)
-            except:
-                pass
-
-        return ''
-
-    def stop(self, force=False):
-        """
-            The stop method have force mode because toaster without production 
-            setup have known issues when is on load, the server response 503
-            service unavailable.
-        """
-        if force:
-            return self._stop_force()
-        else:
-            return self._execute_command_venv(VENV_NAME,
-                "source %s/oe-init-build-env; source %s/bitbake/bin/toaster stop" % \
-                (self.directory, self.directory))
diff --git a/toaster/__init__.py b/toaster/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/toaster/helpers.py b/toaster/helpers.py
new file mode 100644
index 0000000..753bbf0
--- /dev/null
+++ b/toaster/helpers.py
@@ -0,0 +1,109 @@
+import subprocess
+import os
+import shutil
+import signal
+import tempfile
+
+from proc.core import find_processes
+
+TOASTER_TEST_BRANCH = 'toaster_tests'
+VENV_NAME = 'venv'
+SHELL_CMD = os.environ['SHELL'] if 'SHELL' in os.environ else "/bin/bash"
+
+def _check_output1(*popenargs, **kwargs):
+    """
+        Almost the same as subprocess.check_output but change the stdout from
+        PIPE to tempfile to avoid deadlocks when trying to read the PIPE using
+        communicate(). This scenario can be seen calling toaster_start on failure
+        scenarios.
+
+        This causes a little overhead by the tempfile.
+    """
+
+    f = tempfile.TemporaryFile(mode='rw+')
+    if 'stdout' in kwargs:
+        raise ValueError('stdout argument not allowed, it will be overridden.')
+    process = subprocess.Popen(stdout=f, *popenargs, **kwargs)
+    retcode = process.wait()
+
+    f.flush()
+    os.fsync(f.fileno())
+    f.seek(0, 0)
+    output = f.read()
+    f.close()
+
+    if retcode:
+        cmd = kwargs.get("args")
+        if cmd is None:
+            cmd = popenargs[0]
+        raise subprocess.CalledProcessError(retcode, cmd, output=output)
+    return output
+
+class ToasterHelper(object):
+    def __init__(self, directory, repo, repo_ref='master'):
+        self.directory = directory
+        self.repo = repo
+        self.repo_ref = repo_ref
+
+    def _execute_command(self, cmd):
+        return _check_output1([SHELL_CMD, "-c", "cd %s; %s" % \
+            (self.directory, cmd)], stderr=subprocess.STDOUT)
+
+    def _execute_command_venv(self, venv, cmd):
+        return self._execute_command("source %s/%s/bin/activate; %s"\
+                % (self.directory, venv, cmd))
+
+    def clone(self, rm=False):
+        if os.path.exists(self.directory):
+            if rm:
+                shutil.rmtree(self.directory)
+            else:
+                raise IOError
+
+        subprocess.check_output([SHELL_CMD, "-c", "git clone %s %s" % \
+            (self.repo, self.directory)], stderr=subprocess.STDOUT)
+        self._execute_command("git checkout %s -b %s" % \
+            (self.repo_ref, TOASTER_TEST_BRANCH))
+
+    def setup(self):
+        self._execute_command("virtualenv %s" % VENV_NAME)
+        self._execute_command_venv(VENV_NAME, "pip install -r" \
+            " bitbake/toaster-requirements.txt")
+
+    def start(self):
+        return self._execute_command_venv(VENV_NAME,
+            "source %s/oe-init-build-env; source %s/bitbake/bin/toaster start" % \
+            (self.directory, self.directory))
+
+    def _stop_force(self):
+        """
+            The _stop_force method iterates over the /proc and search for toaster path
+            in the process cmdline then send SIGKILL for every matched process.
+        """
+        pids = []
+        for p in find_processes():
+            if len(p.cmdline) > 1 and \
+                os.path.basename(p.cmdline[0]) == 'python' and \
+                p.cmdline[1].startswith(self.directory):
+                    pids.append(p.pid)
+
+        for pid in pids:
+            try:
+                os.kill(pid, signal.SIGKILL)
+            except:
+                pass
+
+        return ''
+
+    def stop(self, force=False):
+        """
+            The stop method have force mode because toaster without production 
+            setup have known issues when is on load, the server response 503
+            service unavailable.
+        """
+        if force:
+            return self._stop_force()
+        else:
+            return self._execute_command_venv(VENV_NAME,
+                "source %s/oe-init-build-env; source %s/bitbake/bin/toaster stop" % \
+                (self.directory, self.directory))
diff --git a/toaster/toaster.py b/toaster/toaster.py
new file mode 100755
index 0000000..d3c5fff
--- /dev/null
+++ b/toaster/toaster.py
@@ -0,0 +1,125 @@
+import unittest, time, re, sys, getopt, os, logging, string, errno, exceptions
+import shutil, argparse, ConfigParser, platform
+
+from selenium import webdriver
+from selenium.common.exceptions import NoSuchElementException
+from selenium import selenium
+from selenium.webdriver.common.by import By
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.support.ui import Select
+
+sys.path.insert(0, os.path.join(os.path.dirname(
+    os.path.abspath(__file__)), '../'))
+from toaster.helpers import ToasterHelper
+
+WORK_DIRECTORY = '/tmp/toaster'
+POKY_URL = 'http://git.yoctoproject.org/git/poky.git'
+
+class InitToaster(unittest.TestCase):
+    @classmethod
+    def setUpClass(self):
+        self.toaster_helper = ToasterHelper(WORK_DIRECTORY, POKY_URL)
+        self.toaster_helper.clone(rm=True)
+        self.toaster_helper.setup()
+        self.toaster_helper.start()
+
+        self.driver = webdriver.Firefox()
+        self.timeout = 320
+
+    @classmethod
+    def tearDownClass(self):
+        self.toaster_helper.stop(force=True)
+        self.driver.close()
+
+    def is_text_present (self, patterns):
+        for pattern in patterns:
+            if str(pattern) not in self.driver.page_source:
+                print pattern
+                return False
+        return True
+
+    def test_setupToaster(self):
+        self.driver.maximize_window()
+        self.driver.get("localhost:8000")
+        try:
+            self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
+        except:
+            self.driver.find_element_by_id("new-project-button").click()
+            self.driver.find_element_by_id("new-project-name").send_keys("selenium-project")
+            self.driver.find_element_by_id("create-project-button").click()
+        try:
+            self.driver.find_element_by_link_text("selenium-project").click()
+        except:
+            self.driver.find_element_by_id("new-project-button").click()
+            self.driver.find_element_by_id("new-project-name").send_keys("selenium-project")
+            self.driver.find_element_by_id("create-project-button").click()
+        time.sleep(5)
+        #workaround
+#        self.driver.find_element_by_partial_link_text("Bitbake").click()
+#        self.driver.find_element_by_id("config_var_trash_10").click()
+#        time.sleep(5)
+        #queue up a core-image-minimal
+        self.driver.find_element_by_id("build-input").send_keys("core-image-minimal")
+        self.driver.find_element_by_id("build-button").click()
+        time.sleep(20)
+        #queue up a core-image-sato
+        self.driver.find_element_by_id("build-input").send_keys("core-image-sato")
+        self.driver.find_element_by_id("build-button").click()
+        time.sleep(20)
+        #go back to the main project page
+        self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
+        self.driver.find_element_by_link_text("selenium-project").click()
+        #check if meta-selftest layer is added and import it if it's not
+        if not (self.is_text_present("meta-selftest")):
+            self.driver.find_element_by_css_selector("a[href='/toastergui/project/2/importlayer']").click()
+            self.driver.find_element_by_id("import-layer-name").send_keys("meta-selftest")
+            self.driver.find_element_by_id("layer-git-repo-url").send_keys("git://git.yoctoproject.org/poky")
+            self.driver.find_element_by_id("layer-subdir").send_keys("meta-selftest")
+            self.driver.find_element_by_id("layer-git-ref").send_keys("HEAD")
+            self.driver.find_element_by_id("import-and-add-btn").click()
+        #queue up an error-image build
+        self.driver.find_element_by_id("build-input").send_keys("error-image")
+        self.driver.find_element_by_id("build-button").click()
+        time.sleep(5)
+        #move to all builds page
+        self.driver.find_element_by_css_selector("a[href='/toastergui/builds/']").click()
+        time.sleep(5)
+        self.driver.refresh()
+        #check progress bar is displayed to signal a build has started
+        try:
+            self.driver.find_element_by_xpath("//div[@class='progress']").is_displayed()
+        except:
+            print "Unable to start new build"
+            self.fail(msg="Unable to start new build")
+        count = 0
+        failflag = False
+        try:
+            self.driver.refresh()
+            time.sleep(1)
+            print "First check starting"
+            while (self.driver.find_element_by_xpath("//div[@class='progress']").is_displayed()):
+                #print "Looking for build in progress"
+                print 'Builds running for '+str(count)+' minutes'
+                count += 5
+                #timeout default is at 179 minutes(3 hours); see set_up method to change
+                if (count > self.timeout):
+                    failflag = True
+                    print 'Builds took longer than expected to complete; Failing due to possible build stuck.'
+                    self.fail()
+                time.sleep(300)
+                self.driver.refresh()
+        except:
+           try:
+                if failflag:
+                    self.fail(msg="Builds took longer than expected to complete; Failing due to possible build stuck.")
+                print "Looking for successful build"
+                self.driver.find_element_by_xpath("//div[@class='alert build-result alert-success']").is_displayed()
+           except:
+                if failflag:
+                    self.fail(msg="Builds took longer than expected to complete; Failing due to possible build stuck.")
+                print 'Builds did not complete successfully'
+                self.fail(msg="Builds did not complete successfully.")
+        print "Builds complete!"
+
+if __name__ == "__main__":
+    unittest.main()
-- 
2.1.4



^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-02-09 22:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-09 22:45 [[PATCH][qa-tools] 10/16] Reorder source code tree, Aníbal Limón
2016-02-09 22:45 ` [[PATCH][qa-tools] 11/16] README.md: Update with information about setup, toaster and maintainence Aníbal Limón
2016-02-09 22:45 ` [[PATCH][qa-tools] 12/16] toaster/toaster.py: Add missing shebang to call python Aníbal Limón
2016-02-09 22:45 ` [[PATCH][qa-tools] 13/16] toaster: Add header to specify license to MIT Aníbal Limón
2016-02-09 22:45 ` [[PATCH][qa-tools] 14/16] toaster/toaster.py: Add command line options Aníbal Limón
2016-02-09 22:45 ` [[PATCH][qa-tools] 15/16] toaster/helpers.py: Fix ToasterHelper setup method git checkout Aníbal Limón
2016-02-09 22:45 ` [[PATCH][qa-tools] 16/16] README.md: Add recommendation to use vncserver for run Toaster tests Aníbal Limón

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.