diff --git a/testing/Vagrantfile b/testing/Vagrantfile index fd1c5916c8..1d15709a36 100644 --- a/testing/Vagrantfile +++ b/testing/Vagrantfile @@ -40,10 +40,12 @@ Vagrant::Config.run do |config| "#{ENV['SMTP_PWD']} #{ENV['EMAIL_RCP']}; " \ "#{CFG_PATH}/setup_credentials.sh #{USER} " \ "#{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; " \ "rm -rf ${GOPATH}/src/github.com/dotcloud/docker; " # Activate new kernel options diff --git a/testing/buildbot/master.cfg b/testing/buildbot/master.cfg index cc261c7a3e..7962fe9e9d 100644 --- a/testing/buildbot/master.cfg +++ b/testing/buildbot/master.cfg @@ -45,16 +45,17 @@ c['slavePortnum'] = PORT_MASTER # Schedulers c['schedulers'] = [ForceScheduler(name='trigger', builderNames=[BUILDER_NAME, - 'registry','coverage'])] + 'index','registry','coverage'])] c['schedulers'] += [SingleBranchScheduler(name="all", change_filter=filter.ChangeFilter(branch='master'), treeStableTimer=None, builderNames=[BUILDER_NAME])] c['schedulers'] += [SingleBranchScheduler(name='pullrequest', change_filter=filter.ChangeFilter(category='github_pullrequest'), treeStableTimer=None, 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)] - +c['schedulers'] += [Nightly(name='every4hrs', branch=None, builderNames=['registry','index'], + hour=range(0,24,4), minute=15)] # Builders # 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}; " "git reset --hard %(src::revision)s; go test -v".format( BUILDER_PATH, BUILDER_PATH+'/src/'+GITHUB_DOCKER, DOCKER_PATH, GITHUB_DOCKER))])) - c['builders'] = [BuilderConfig(name=BUILDER_NAME,slavenames=['buildworker'], factory=factory)] @@ -91,16 +91,24 @@ factory.addStep(ShellCommand(description='Coverage',logEnviron=False,usePTY=True c['builders'] += [BuilderConfig(name='coverage',slavenames=['buildworker'], factory=factory)] -# Registry Functionaltest builder +# Registry functional test factory = BuildFactory() factory.addStep(ShellCommand(description='registry', logEnviron=False, command='. {0}/master/credentials.cfg; ' '{1}/testing/functionaltests/test_registry.sh'.format(BUILDBOT_PATH, DOCKER_PATH), usePTY=True)) - c['builders'] += [BuilderConfig(name='registry',slavenames=['buildworker'], 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 authz_cfg = authz.Authz(auth=auth.BasicAuth([(TEST_USER, TEST_PWD)]), diff --git a/testing/buildbot/requirements.txt b/testing/buildbot/requirements.txt index c5d7dd0191..d2dcf1d125 100644 --- a/testing/buildbot/requirements.txt +++ b/testing/buildbot/requirements.txt @@ -6,3 +6,4 @@ nose==1.2.1 requests==1.1.0 flask==0.10.1 simplejson==2.3.2 +selenium==2.35.0 diff --git a/testing/functionaltests/test_index.py b/testing/functionaltests/test_index.py new file mode 100755 index 0000000000..fd002c81e8 --- /dev/null +++ b/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()