[Qa-jenkins-scm] Build failed in Jenkins: reproducible_reprotest_from_git_master #45

jenkins at jenkins.debian.net jenkins at jenkins.debian.net
Wed Jul 19 15:21:39 UTC 2017


See <https://jenkins.debian.net/job/reproducible_reprotest_from_git_master/45/display/redirect?page=changes>

Changes:

[infinity0] Use autopkgtest upstream paths, makes things easier to import

[infinity0] Add script for importing autopkgtest code

[infinity0] Import autopkgtest 4.4

[infinity0] Patches needed for autopkgtest 4.4

[infinity0] Update d/changelog with autopkgtest info

------------------------------------------
[...truncated 258.45 KB...]
tests/tests.py:22: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

build_command = 'python3 mock_build.py umask', artifact_pattern = 'artifact'
virtual_server_args = ['null'], source_root = 'tests', no_clean_on_error = False
variations = frozenset({'build_path', 'environment', 'exec_path', 'home', 'kernel', 'locales', ...})
store_dir = None, diffoscope_args = [], testbed_pre = None, testbed_init = None

    def check(build_command, artifact_pattern, virtual_server_args, source_root,
              no_clean_on_error=False, variations=VARIATIONS,
              store_dir=None, diffoscope_args=[],
              testbed_pre=None, testbed_init=None):
        # default argument [] is safe here because we never mutate it.
        if not source_root:
            raise ValueError("invalid source root: %s" % source_root)
        if store_dir:
            store_dir = str(store_dir)
            if not os.path.exists(store_dir):
                os.makedirs(store_dir, exist_ok=False)
            elif os.listdir(store_dir):
                raise ValueError("store_dir must be empty: %s" % store_dir)
            store = Pair(os.path.join(store_dir, "control"),
                         os.path.join(store_dir, "experiment"))
    
        logging.debug("virtual_server_args: %r", virtual_server_args)
        script = Pair.of(Script(build_command))
        env = Pair(types.MappingProxyType(os.environ.copy()),
                   types.MappingProxyType(os.environ.copy()))
    
        source_root = str(source_root)
        with tempfile.TemporaryDirectory() as temp_dir:
            if testbed_pre:
                new_source_root = os.path.join(temp_dir, "testbed_pre")
                shutil.copytree(source_root, new_source_root, symlinks=True)
                subprocess.check_call(["sh", "-ec", testbed_pre], cwd=new_source_root)
                source_root = new_source_root
            logging.debug("source_root: %s", source_root)
    
            result = Pair(os.path.join(temp_dir, 'control_artifact/'),
                          os.path.join(temp_dir, 'experiment_artifact/'))
    
            # TODO: an alternative strategy is to run the testbed twice; not sure
            # if it's worth implementing at this stage, but perhaps in the future.
>           with start_testbed(virtual_server_args, temp_dir, no_clean_on_error) as testbed:

reprotest/__init__.py:439: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <contextlib._GeneratorContextManager object at 0x7fd48b4e6c88>

    def __enter__(self):
        try:
>           return next(self.gen)

/usr/lib/python3.5/contextlib.py:59: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = ['null'], temp_dir = '/tmp/tmpuztdzeyx', no_clean_on_error = False

    @_contextlib.contextmanager
    def start_testbed(args, temp_dir, no_clean_on_error=False):
        '''This is a simple wrapper around adt_testbed that automates the
        initialization and cleanup.'''
        # Find the location of reprotest using setuptools and then get the
        # path for the correct virt-server script.
        server_path = get_server_path(args[0])
        logging.info('STARTING VIRTUAL SERVER %r', [server_path] + args[1:])
        testbed = adt_testbed.Testbed([server_path] + args[1:], temp_dir, None)
>       testbed.start()

reprotest/__init__.py:65: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <reprotest.lib.adt_testbed.Testbed object at 0x7fd48b4e69b0>

    def start(self):
        # are we running from a checkout?
        root_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
        if os.path.exists(os.path.join(root_dir, '.git')):
            try:
                head = subprocess.check_output(['git', 'show', '--no-patch', '--oneline'],
                                               cwd=root_dir)
                head = head.decode('UTF-8').strip()
            except OSError:
                head = 'cannot determine current HEAD'
            adtlog.info('git checkout: %s' % head)
        else:
            adtlog.info('version @version@')
    
        # log command line invocation for the log
        adtlog.info('host %s; command line: %s' % (
            os.uname()[1], ' '.join([pipes.quote(w) for w in sys.argv])))
    
        self.sp = subprocess.Popen(self.vserver_argv,
                                   stdin=subprocess.PIPE,
                                   stdout=subprocess.PIPE,
                                   universal_newlines=True)
>       self.expect('ok', 0)

reprotest/lib/adt_testbed.py:109: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <reprotest.lib.adt_testbed.Testbed object at 0x7fd48b4e69b0>
keyword = 'ok', nresults = 0

    def expect(self, keyword, nresults):
        line = self.sp.stdout.readline()
        if not line:
>           self.bomb('unexpected eof from the testbed')

reprotest/lib/adt_testbed.py:374: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <reprotest.lib.adt_testbed.Testbed object at 0x7fd48b4e69b0>
m = 'unexpected eof from the testbed'
_type = <class 'reprotest.lib.adtlog.TestbedFailure'>

    def bomb(self, m, _type=adtlog.TestbedFailure):
        adtlog.debug('%s %s' % (_type.__name__, m))
>       self.stop()

reprotest/lib/adt_testbed.py:353: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <reprotest.lib.adt_testbed.Testbed object at 0x7fd48b4e69b0>

    def stop(self):
        adtlog.debug('testbed stop')
        if self.stop_sent:
            # avoid endless loop
            return
        self.stop_sent = True
    
        self.close()
        if self.sp is None:
            return
        ec = self.sp.returncode
        if ec is None:
            self.sp.stdout.close()
>           self.send('quit')

reprotest/lib/adt_testbed.py:124: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <reprotest.lib.adt_testbed.Testbed object at 0x7fd48b4e69b0>
string = 'quit'

    def send(self, string):
        try:
            adtlog.debug('sending command to testbed: ' + string)
            self.sp.stdin.write(string)
            self.sp.stdin.write('\n')
            self.sp.stdin.flush()
            self.lastsend = string
        except:
            (type, value, dummy) = sys.exc_info()
            self.bomb('cannot send to testbed: %s' % traceback.
>                     format_exception_only(type, value))

reprotest/lib/adt_testbed.py:369: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <reprotest.lib.adt_testbed.Testbed object at 0x7fd48b4e69b0>
m = "cannot send to testbed: ['BrokenPipeError: [Errno 32] Broken pipe\\n']"
_type = <class 'reprotest.lib.adtlog.TestbedFailure'>

    def bomb(self, m, _type=adtlog.TestbedFailure):
        adtlog.debug('%s %s' % (_type.__name__, m))
        self.stop()
>       raise _type(m)
E       reprotest.lib.adtlog.TestbedFailure: cannot send to testbed: ['BrokenPipeError: [Errno 32] Broken pipe\n']

reprotest/lib/adt_testbed.py:354: TestbedFailure

During handling of the above exception, another exception occurred:

virtual_server = ['null'], captures = 'umask'

    @pytest.mark.parametrize('captures', list(reprotest.VARIATIONS.keys()))
    def test_variations(virtual_server, captures):
        expected = 1 if captures in TEST_VARIATIONS else 0
>       check_return_code('python3 mock_build.py ' + captures, virtual_server, expected)

tests/tests.py:51: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

command = 'python3 mock_build.py umask', virtual_server = ['null'], code = 1

    def check_return_code(command, virtual_server, code):
        try:
            retcode = reprotest.check(command, 'artifact', virtual_server, 'tests', variations=TEST_VARIATIONS)
        except SystemExit as system_exit:
            retcode = system_exit.args[0]
        finally:
            if isinstance(code, int):
>               assert(retcode == code)
E               UnboundLocalError: local variable 'retcode' referenced before assignment

tests/tests.py:27: UnboundLocalError
___________________________ test_debian_build[null] ____________________________

virtual_server = ['null']

    def test_debian_build(virtual_server):
        # This is a bit dirty though it works - when building the debian package,
        # debian/rules will call this, which will call debian/rules, so ../*.deb
        # gets written twice and the second one is the "real" one, but since it
        # should all be reproducible, this should be OK.
>       assert(0 == subprocess.call(
            REPROTEST + ['debuild -b -nc -uc -us', '../*.deb'] + virtual_server,
            # "nocheck" to stop tests recursing into themselves
            env=dict(list(os.environ.items()) + [("DEB_BUILD_OPTIONS", "nocheck")])))
E       AssertionError: assert 0 == 1
E        +  where 1 = <function call at 0x7fd48d6aad08>(((['/tmp/testrun/.tox/py35/bin/python', '-m', 'reprotest', '--no-diffoscope', '--dont-vary', 'fileordering'] + ['debuild -b -nc -uc -us', '../*.deb']) + ['null']), env={'DEB_BUILD_OPTIONS': 'nocheck', 'LANG': 'en_GB.UTF-8', 'PATH': '/tmp/testrun/.tox/py35/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11', 'PYTHONHASHSEED': '1834317909', ...})
E        +    where <function call at 0x7fd48d6aad08> = subprocess.call
E        +    and   {'DEB_BUILD_OPTIONS': 'nocheck', 'LANG': 'en_GB.UTF-8', 'PATH': '/tmp/testrun/.tox/py35/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11', 'PYTHONHASHSEED': '1834317909', ...} = dict(([('REPROTEST_TEST_DONTVARY', 'fileordering'), ('https_proxy', 'https://127.0.9.1:9'), ('PATH', '/tmp/testrun/.tox/py35...in/X11'), ('PYTHONIOENCODING', 'utf-8'), ('VIRTUAL_ENV', '/tmp/testrun/.tox/py35'), ('VIRTUALENV_DOWNLOAD', 'no'), ...] + [('DEB_BUILD_OPTIONS', 'nocheck')]))
E        +      where [('REPROTEST_TEST_DONTVARY', 'fileordering'), ('https_proxy', 'https://127.0.9.1:9'), ('PATH', '/tmp/testrun/.tox/py35...in/X11'), ('PYTHONIOENCODING', 'utf-8'), ('VIRTUAL_ENV', '/tmp/testrun/.tox/py35'), ('VIRTUALENV_DOWNLOAD', 'no'), ...] = list(ItemsView(environ({'REPROTEST_TEST_DONTVARY': 'fileordering', 'https_proxy': 'https://127.0.9.1:9', 'PATH': '/tmp/test...IRTUALENV_DOWNLOAD': 'no', 'LANG': 'en_GB.UTF-8', 'PYTHONHASHSEED': '1834317909', 'http_proxy': 'http://127.0.9.1:9'})))
E        +        where ItemsView(environ({'REPROTEST_TEST_DONTVARY': 'fileordering', 'https_proxy': 'https://127.0.9.1:9', 'PATH': '/tmp/test...IRTUALENV_DOWNLOAD': 'no', 'LANG': 'en_GB.UTF-8', 'PYTHONHASHSEED': '1834317909', 'http_proxy': 'http://127.0.9.1:9'})) = <bound method Mapping.items of environ({'REPROTEST_TEST_DONTVARY': 'fileordering', 'https_proxy': 'https://127.0.9.1:9...IRTUALENV_DOWNLOAD': 'no', 'LANG': 'en_GB.UTF-8', 'PYTHONHASHSEED': '1834317909', 'http_proxy': 'http://127.0.9.1:9'})>()
E        +          where <bound method Mapping.items of environ({'REPROTEST_TEST_DONTVARY': 'fileordering', 'https_proxy': 'https://127.0.9.1:9...IRTUALENV_DOWNLOAD': 'no', 'LANG': 'en_GB.UTF-8', 'PYTHONHASHSEED': '1834317909', 'http_proxy': 'http://127.0.9.1:9'})> = environ({'REPROTEST_TEST_DONTVARY': 'fileordering', 'https_proxy': 'https://127.0.9.1:9', 'PATH': '/tmp/testrun/.tox/p...VIRTUALENV_DOWNLOAD': 'no', 'LANG': 'en_GB.UTF-8', 'PYTHONHASHSEED': '1834317909', 'http_proxy': 'http://127.0.9.1:9'}).items
E        +            where environ({'REPROTEST_TEST_DONTVARY': 'fileordering', 'https_proxy': 'https://127.0.9.1:9', 'PATH': '/tmp/testrun/.tox/p...VIRTUALENV_DOWNLOAD': 'no', 'LANG': 'en_GB.UTF-8', 'PYTHONHASHSEED': '1834317909', 'http_proxy': 'http://127.0.9.1:9'}) = os.environ

tests/tests.py:68: AssertionError
===================== 12 failed, 1 passed in 13.93 seconds =====================
ERROR: InvocationError: '/tmp/testrun/.tox/py35/bin/python -m coverage run --omit .tox/* --parallel -m py.test -s tests/tests.py'
___________________________________ summary ____________________________________
ERROR:   py35: commands failed
debian/rules:23: recipe for target 'override_dh_auto_test' failed
make[1]: *** [override_dh_auto_test] Error 1
make[1]: Leaving directory '/tmp/testrun'
debian/rules:7: recipe for target 'build' failed
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debuild: fatal error at line 1124:
dpkg-buildpackage -rfakeroot -us -uc failed
+ cleanup
+ '[' -e /chroots/chroot-run-sid.UVi3wxhga/tmp/testrun/stats.csv ']'
+ '[' false = true ']'
++ ls -1 '/chroots/chroot-run-sid.UVi3wxhga/tmp/debian-edu-doc_*.changes'
++ true
+ CHANGES=
+ '[' '!' -z '' ']'
+ '[' false = true ']'
+ '[' -d /chroots/chroot-run-sid.UVi3wxhga/proc ']'
+ sudo umount -l /chroots/chroot-run-sid.UVi3wxhga/proc
+ '[' -d /chroots/chroot-run-sid.UVi3wxhga/testrun ']'
+ '[' -d /chroots/chroot-run-sid.UVi3wxhga ']'
+ sudo rm -rf --one-file-system /chroots/chroot-run-sid.UVi3wxhga
Wed 19 Jul 15:21:39 UTC 2017 - /srv/jenkins/bin/chroot-run.sh stopped running as /tmp/jenkins-script-ZdHVlEQz, which will now be removed.
Build step 'Execute shell' marked build as failure



More information about the Qa-jenkins-scm mailing list