Exemple #1
0
    def __init__(self,
                 source,
                 buildpython=["python"],
                 trialpython=[],
                 trial=None,
                 testpath=".",
                 randomly=None,
                 recurse=None,
                 tests=None,
                 useTestCaseNames=False,
                 env=None):
        BuildFactory.__init__(self, [source])
        assert tests or useTestCaseNames, "must use one or the other"
        if trial is not None:
            self.trial = trial
        if randomly is not None:
            self.randomly = randomly
        if recurse is not None:
            self.recurse = recurse

        from buildbot.steps.python_twisted import Trial
        buildcommand = buildpython + ["./setup.py", "build"]
        self.addStep(Compile(command=buildcommand, env=env))
        self.addStep(
            Trial(
                python=trialpython,
                trial=self.trial,
                testpath=testpath,
                tests=tests,
                testChanges=useTestCaseNames,
                randomly=self.randomly,
                recurse=self.recurse,
                env=env,
            ))
Exemple #2
0
def _flockerTests(kwargs, tests=None, env=None, trial=None):
    if env is None:
        env = {}
    env[b"PATH"] = [Interpolate(path.join(VIRTUALENV_DIR, "bin")), "${PATH}"]
    if tests is None:
        tests = [b"flocker"]
    if trial is None:
        trial = [virtualenvBinary('trial')]
    return [
        ShellCommand(command=[b"mkdir", TMPDIR],
                     description=["creating", "TMPDIR"],
                     descriptionDone=["create", "TMPDIR"],
                     name="create-TMPDIR"),
        Trial(trial=trial,
              tests=tests,
              testpath=None,
              workdir=TMPDIR,
              env=env,
              **kwargs),
        ShellCommand(command=[b"rm", b"-rf", TMPDIR],
                     alwaysRun=True,
                     description=["removing", "TMPDIR"],
                     descriptionDone=["remove", "TMPDIR"],
                     name="remove-TMPDIR"),
    ]
Exemple #3
0
def mksimplefactory(test_master=True):
    f = factory.BuildFactory()
    f.addSteps([
    gitStep,
    # use workdir instead of testpath because setuptools sticks its own eggs (including
    # the running version of buildbot) into sys.path *before* PYTHONPATH, but includes
    # "." in sys.path even before the eggs
    Trial(workdir="build/slave", testpath=".",
        tests='buildslave.test',
        usePTY=False,
        name='test slave'),
    ])
    if test_master:
        f.addStep(
        Trial(workdir="build/master", testpath=".",
            tests='buildbot.test',
            usePTY=False,
            name='test master'),
        )
    return f
Exemple #4
0
def makeAdminFactory():
    """
    Make a new build factory which can do an admin build.
    """
    factory = getFlockerFactory(python=b"python2.7")
    factory.addSteps(installDependencies())

    factory.addStep(
        Trial(
            trial=[Interpolate(path.join(VIRTUALENV_DIR, "bin/trial"))],
            tests=[b'admin'],
            testpath=None,
            env={
                b"PATH":
                [Interpolate(path.join(VIRTUALENV_DIR, "bin")), "${PATH}"],
            },
        ))

    return factory
Exemple #5
0
 def __init__(self, db, **kwargs):
     Trial.__init__(self, **kwargs)
     self.db = db
     self.addFactoryArguments(db=db)
Exemple #6
0
 def setupEnvironment(self, cmd):
     Trial.setupEnvironment(self, cmd)
     # get the appropriate database configuration from the slave
     extra_env = self.buildslave.databases[self.db]
     cmd.args['env'].update(extra_env)
Exemple #7
0
def mktestfactory(twisted_version='twisted', python_version='python',
                sqlalchemy_version='sqlalchemy',  # latest
                sqlalchemy_migrate_version='sqlalchemy-migrate',  # latest
                extra_packages=None, db=None,
                www=False, slave_only=False):
    if not extra_packages:
        extra_packages = []
    subs = dict(twisted_version=twisted_version, python_version=python_version)
    ve = "../sandbox-%(python_version)s-%(twisted_version)s" % subs
    if sqlalchemy_version != 'sqlalchemy':
        ve += '-' + sqlalchemy_version
    if sqlalchemy_migrate_version != 'sqlalchemy-migrate':
        ve += sqlalchemy_migrate_version.replace('sqlalchemy-migrate==', 'samigr-')
    subs['ve'] = ve

    if www:
        extra_packages.append('--editable=pkg')
        extra_packages.append('--editable=www/base')
        extra_packages.append('--editable=www/console_view')
        extra_packages.append('--editable=www/waterfall_view')

    virtualenv_packages = [twisted_version, sqlalchemy_version,
        sqlalchemy_migrate_version, 'multiprocessing==2.6.2.1', 'mock==0.8.0',
        '--editable=slave'] + extra_packages
    if python_version > 'python2.5':
        # because some of the dependencies don't work on 2.5
        virtualenv_packages.extend(['moto==0.3.1', 'boto==2.29.1'])
    if python_version in ('python2.4', 'python2.5'):
        # and, because the latest versions of these don't work on <2.5, and the version of
        # pip that works on 2.5 doesn't understand that '==' means 'I want this version'
        virtualenv_packages.insert(0, _PACKAGE_STASH + 'zope.interface-3.6.1.tar.gz')
        virtualenv_packages.insert(0, _PACKAGE_STASH + 'setuptools-1.4.2.tar.gz')
    else:
        virtualenv_packages.insert(0, _PACKAGE_STASH + 'zope.interface-4.1.1.tar.gz')
    if not slave_only:
        virtualenv_packages.append('--editable=master')
    f = factory.BuildFactory()
    f.addSteps([
    gitStep,
    VirtualenvSetup(name='virtualenv setup',
        no_site_packages=True,
        virtualenv_python=python_version,
        virtualenv_packages=virtualenv_packages,
        virtualenv_dir=ve,
        haltOnFailure=True),
    ShellCommand(usePTY=False, command=textwrap.dedent("""
        SANDBOX="%(ve)s";
        PYTHON="$PWD/$SANDBOX/bin/python";
        PIP="$PWD/$SANDBOX/bin/pip";
        $PYTHON -c 'import sys; print "Python:", sys.version; import twisted; print "Twisted:", twisted.version' || exit 1;
        $PIP freeze
        """ % subs),
        description="versions",
        descriptionDone="versions",
        name="versions"),
    ])
    # see note above about workdir vs. testpath
    if db:
        # for DB, just test the master (the slave doesn't use the db)
        f.addSteps([
    DatabaseTrial(workdir="build/master", testpath='.',
        db=db,
        tests='buildbot.test',
        trial="../%(ve)s/bin/trial" % subs,
        usePTY=False,
        name='test master'),
    ])
    elif www:
        # for www, run 'grunt ci'; this needs the virtualenv path in PATH
        f.addSteps([
    ShellCommand(workdir="build/www",
        command=['./node_modules/.bin/grunt', 'ci'],
        usePTY=False,
        name='grunt ci',
        env={'PATH':'../%(ve)s/bin/:${PATH}' % subs}),
    ])
    else:
        f.addSteps([
    Trial(workdir="build/slave", testpath='.',
        tests='buildslave.test',
        trial="../%(ve)s/bin/trial" % subs,
        usePTY=False,
        name='test slave'),
    ])
    if not slave_only and not db:
        f.addSteps([
    Trial(workdir="build/master", testpath='.',
        tests='buildbot.test',
        trial="../%(ve)s/bin/trial" % subs,
        usePTY=False,
        name='test master'),
    ])
    return f
Exemple #8
0
 def setupEnvironment(self, cmd):
     Trial.setupEnvironment(self, cmd)
     # get the appropriate database configuration from the slave
     extra_env = self.buildslave.databases[self.db]
     cmd.args['env'].update(extra_env)
Exemple #9
0
 def __init__(self, db, **kwargs):
     Trial.__init__(self, **kwargs)
     self.db = db
     self.addFactoryArguments(db=db)
Exemple #10
0
def mktestfactory(
        twisted_version=None,
        python_version='python',
        sqlalchemy_version=None,  # latest taken by master's setup.py
        sqlalchemy_migrate_version=None,  # latest taken by master's setup.py
        extra_packages=None,
        db=None,
        www=False,
        slave_only=False):
    if not extra_packages:
        extra_packages = []
    subs = dict(twisted_version=twisted_version, python_version=python_version)
    ve = "../sandbox-%(python_version)s-%(twisted_version)s" % subs
    if sqlalchemy_version is not None:
        ve += '-' + sqlalchemy_version
    if sqlalchemy_migrate_version is not None:
        ve += sqlalchemy_migrate_version.replace('sqlalchemy-migrate==',
                                                 'samigr-')
    subs['ve'] = ve

    virtualenv_packages = extra_packages

    def maybeAppend(*args):
        for v in args:
            if v is not None:
                virtualenv_packages.append(v)

    maybeAppend(twisted_version, sqlalchemy_version,
                sqlalchemy_migrate_version)

    if www:
        maybeAppend('--editable=pkg', '--editable=www/base',
                    '--editable=www/console_view',
                    '--editable=www/waterfall_view')

    if not slave_only:
        maybeAppend('--editable=master[test,tls]')
    # master[test] embeddeds all test deps, but not worker, which only needs mock
    else:
        maybeAppend('mock')
    maybeAppend('--editable=worker')

    f = factory.BuildFactory()
    f.addSteps([
        gitStep,
        downloadStep,
        VirtualenvSetup(name='virtualenv setup',
                        virtualenv_python=python_version,
                        virtualenv_packages=virtualenv_packages,
                        virtualenv_dir=ve,
                        haltOnFailure=True),
        ShellCommand(usePTY=False,
                     command=textwrap.dedent("""
        SANDBOX="%(ve)s";
        PYTHON="$PWD/$SANDBOX/bin/python";
        PIP="$PWD/$SANDBOX/bin/pip";
        $PYTHON -c 'import sys; print "Python:", sys.version; import twisted; print "Twisted:", twisted.version' || exit 1;
        $PIP freeze
        """ % subs),
                     description="versions",
                     descriptionDone="versions",
                     name="versions"),
    ])
    # see note above about workdir vs. testpath
    if db:
        # for DB, just test the master (the slave doesn't use the db)
        f.addSteps([
            DatabaseTrial(workdir="build/master",
                          testpath='.',
                          db=db,
                          tests='buildbot.test',
                          trial="../%(ve)s/bin/trial" % subs,
                          usePTY=False,
                          name='test master'),
        ])
    elif www:
        # for www, run 'grunt ci'; this needs the virtualenv path in PATH
        f.addSteps([
            ShellCommand(workdir="build/www",
                         command=['./node_modules/.bin/grunt', 'ci'],
                         usePTY=False,
                         name='grunt ci',
                         env={'PATH': '../%(ve)s/bin/:${PATH}' % subs}),
        ])
    else:
        f.addSteps([
            Trial(workdir="build/worker",
                  testpath='.',
                  tests='buildbot_worker.test',
                  trial="../%(ve)s/bin/trial" % subs,
                  usePTY=False,
                  name='test worker'),
        ])
    if not slave_only and not db:
        f.addSteps([
            Trial(workdir="build/master",
                  testpath='.',
                  tests='buildbot.test',
                  trial="../%(ve)s/bin/trial" % subs,
                  usePTY=False,
                  name='test master'),
        ])
    return f