Преглед изворни кода

testing, issue #1620: Add index functional test on docker-ci

Daniel Mizyrycki пре 12 година
родитељ
комит
846524115b

+ 6 - 4
testing/Vagrantfile

@@ -40,10 +40,12 @@ Vagrant::Config.run do |config|
         "#{ENV['SMTP_PWD']} #{ENV['EMAIL_RCP']}; " \
         "#{ENV['SMTP_PWD']} #{ENV['EMAIL_RCP']}; " \
       "#{CFG_PATH}/setup_credentials.sh #{USER} " \
       "#{CFG_PATH}/setup_credentials.sh #{USER} " \
         "#{ENV['REGISTRY_USER']} #{ENV['REGISTRY_PWD']}; "
         "#{ENV['REGISTRY_USER']} #{ENV['REGISTRY_PWD']}; "
-    # Install docker dependencies
-    pkg_cmd << "curl -s https://go.googlecode.com/files/go1.1.1.linux-amd64.tar.gz | " \
-      "tar -v -C /usr/local -xz; ln -s /usr/local/go/bin/go /usr/bin/go; " \
-      "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial aufs-tools make; " \
+    # Install docker and testing dependencies
+    pkg_cmd << "curl -s https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz | " \
+      "  tar -v -C /usr/local -xz; ln -s /usr/local/go/bin/go /usr/bin/go; " \
+      "curl -s https://phantomjs.googlecode.com/files/phantomjs-1.9.1-linux-x86_64.tar.bz2 | " \
+      "  tar jx -C /usr/bin --strip-components=2 phantomjs-1.9.1-linux-x86_64/bin/phantomjs; " \
+      "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial aufs-tools make libfontconfig; " \
       "export GOPATH=/data/docker-dependencies; go get -d github.com/dotcloud/docker; " \
       "export GOPATH=/data/docker-dependencies; go get -d github.com/dotcloud/docker; " \
       "rm -rf ${GOPATH}/src/github.com/dotcloud/docker; "
       "rm -rf ${GOPATH}/src/github.com/dotcloud/docker; "
     # Activate new kernel options
     # Activate new kernel options

+ 14 - 6
testing/buildbot/master.cfg

@@ -45,16 +45,17 @@ c['slavePortnum'] = PORT_MASTER
 
 
 # Schedulers
 # Schedulers
 c['schedulers'] = [ForceScheduler(name='trigger', builderNames=[BUILDER_NAME,
 c['schedulers'] = [ForceScheduler(name='trigger', builderNames=[BUILDER_NAME,
-    'registry','coverage'])]
+    'index','registry','coverage'])]
 c['schedulers'] += [SingleBranchScheduler(name="all",
 c['schedulers'] += [SingleBranchScheduler(name="all",
     change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=None,
     change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=None,
     builderNames=[BUILDER_NAME])]
     builderNames=[BUILDER_NAME])]
 c['schedulers'] += [SingleBranchScheduler(name='pullrequest',
 c['schedulers'] += [SingleBranchScheduler(name='pullrequest',
     change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None,
     change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None,
     builderNames=['pullrequest'])]
     builderNames=['pullrequest'])]
-c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['coverage','registry'],
+c['schedulers'] += [Nightly(name='daily', branch=None, builderNames=['coverage'],
     hour=0, minute=30)]
     hour=0, minute=30)]
-
+c['schedulers'] += [Nightly(name='every4hrs', branch=None, builderNames=['registry','index'],
+    hour=range(0,24,4), minute=15)]
 
 
 # Builders
 # Builders
 # Docker commit test
 # Docker commit test
@@ -64,7 +65,6 @@ factory.addStep(ShellCommand(description='Docker',logEnviron=False,usePTY=True,
     "cp -r {2}-dependencies/src {0}; export GOPATH={0}; go get {3}; cd {1}; "
     "cp -r {2}-dependencies/src {0}; export GOPATH={0}; go get {3}; cd {1}; "
     "git reset --hard %(src::revision)s; go test -v".format(
     "git reset --hard %(src::revision)s; go test -v".format(
     BUILDER_PATH, BUILDER_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))]))
     BUILDER_PATH, BUILDER_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))]))
-
 c['builders'] = [BuilderConfig(name=BUILDER_NAME,slavenames=['buildworker'],
 c['builders'] = [BuilderConfig(name=BUILDER_NAME,slavenames=['buildworker'],
     factory=factory)]
     factory=factory)]
 
 
@@ -91,16 +91,24 @@ factory.addStep(ShellCommand(description='Coverage',logEnviron=False,usePTY=True
 c['builders'] += [BuilderConfig(name='coverage',slavenames=['buildworker'],
 c['builders'] += [BuilderConfig(name='coverage',slavenames=['buildworker'],
     factory=factory)]
     factory=factory)]
 
 
-# Registry Functionaltest builder
+# Registry functional test
 factory = BuildFactory()
 factory = BuildFactory()
 factory.addStep(ShellCommand(description='registry', logEnviron=False,
 factory.addStep(ShellCommand(description='registry', logEnviron=False,
     command='. {0}/master/credentials.cfg; '
     command='. {0}/master/credentials.cfg; '
     '{1}/testing/functionaltests/test_registry.sh'.format(BUILDBOT_PATH,
     '{1}/testing/functionaltests/test_registry.sh'.format(BUILDBOT_PATH,
     DOCKER_PATH), usePTY=True))
     DOCKER_PATH), usePTY=True))
-
 c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'],
 c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'],
     factory=factory)]
     factory=factory)]
 
 
+# Index functional test
+factory = BuildFactory()
+factory.addStep(ShellCommand(description='index', logEnviron=False,
+    command='. {0}/master/credentials.cfg; '
+    '{1}/testing/functionaltests/test_index.py'.format(BUILDBOT_PATH,
+    DOCKER_PATH), usePTY=True))
+c['builders'] += [BuilderConfig(name='index',slavenames=['buildworker'],
+    factory=factory)]
+
 
 
 # Status
 # Status
 authz_cfg = authz.Authz(auth=auth.BasicAuth([(TEST_USER, TEST_PWD)]),
 authz_cfg = authz.Authz(auth=auth.BasicAuth([(TEST_USER, TEST_PWD)]),

+ 1 - 0
testing/buildbot/requirements.txt

@@ -6,3 +6,4 @@ nose==1.2.1
 requests==1.1.0
 requests==1.1.0
 flask==0.10.1
 flask==0.10.1
 simplejson==2.3.2
 simplejson==2.3.2
+selenium==2.35.0

+ 61 - 0
testing/functionaltests/test_index.py

@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+import os
+username, password = os.environ['DOCKER_CREDS'].split(':')
+
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.common.keys import Keys
+from selenium.webdriver.support.ui import Select
+from selenium.common.exceptions import NoSuchElementException
+import unittest, time, re
+
+class Docker(unittest.TestCase):
+    def setUp(self):
+        self.driver = webdriver.PhantomJS()
+        self.driver.implicitly_wait(30)
+        self.base_url = "http://www.docker.io/"
+        self.verificationErrors = []
+        self.accept_next_alert = True
+
+    def test_docker(self):
+        driver = self.driver
+        print "Login into {0} as login user {1} ...".format(self.base_url,username)
+        driver.get(self.base_url + "/")
+        driver.find_element_by_link_text("INDEX").click()
+        driver.find_element_by_link_text("login").click()
+        driver.find_element_by_id("id_username").send_keys(username)
+        driver.find_element_by_id("id_password").send_keys(password)
+        print "Checking login user ..."
+        driver.find_element_by_css_selector("input[type=\"submit\"]").click()
+        try: self.assertEqual("test", driver.find_element_by_css_selector("h3").text)
+        except AssertionError as e: self.verificationErrors.append(str(e))
+        print "Login user {0} found".format(username)
+
+    def is_element_present(self, how, what):
+        try: self.driver.find_element(by=how, value=what)
+        except NoSuchElementException, e: return False
+        return True
+
+    def is_alert_present(self):
+        try: self.driver.switch_to_alert()
+        except NoAlertPresentException, e: return False
+        return True
+
+    def close_alert_and_get_its_text(self):
+        try:
+            alert = self.driver.switch_to_alert()
+            alert_text = alert.text
+            if self.accept_next_alert:
+                alert.accept()
+            else:
+                alert.dismiss()
+            return alert_text
+        finally: self.accept_next_alert = True
+
+    def tearDown(self):
+        self.driver.quit()
+        self.assertEqual([], self.verificationErrors)
+
+if __name__ == "__main__":
+    unittest.main()