Bug#940471: diffoscope: test failures

2019-09-17 Thread Chris Lamb
tags 940471 + pending
thanks

Hi Gianfranco,

> If you look at the log,
> https://ci.debian.net/packages/d/diffoscope/testing/amd64/
> 
> you can see that pytest-with-recommends works, because it installs ocaml-nox,
> while pytest doesn't...

Ah, of course; I should have looked at the entire log

> 2) test being skipped when ocaml-nox is not installed

This is the route we have taken elsewhere and I have committed it in:

  
https://salsa.debian.org/reproducible-builds/diffoscope/commit/bf83651d62a9717feba892a4b01d8d7ec28bac49


Best wishes,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org  chris-lamb.co.uk
   `-



Bug#940471: diffoscope: test failures

2019-09-16 Thread Gianfranco Costamagna
tags 940471 - moreinfo
> thanks
> 
> Hi Gianfranco,
> 
> > Hello, looks like the latest diffoscope in unstable has a test failure 
> > that is preventing it from entering testing:
> 
> Hm, I can't reproduce this unfortunately.
> 
> > FileNotFoundError: [Errno 2] No such file or directory: 'ocamlc': 'ocamlc'
> 
> This does not make immediate sense to me - ocamlc is provided by the
> ocaml-nox package which is listed in the Build-Depends and in the
> autopkgtest debian/tests/control file.
> 
> Any ideas?
> 


If you look at the log,
https://ci.debian.net/packages/d/diffoscope/testing/amd64/

you can see that pytest-with-recommends works, because it installs ocaml-nox,
while pytest doesn't...

look at debian/tests/control

Tests: pytest
Depends: diffoscope, python3-pytest, file, python3-tlsh

I would expect either:
1) ocaml-nox to become a runtime dependency for pytest test
2) test being skipped when ocaml-nox is not installed
3) ocaml-nox become a runtime dependency of diffoscope.

I don't really know which one is better, I think 2),
but since it requires code modifications, I went for 1) in Ubuntu
https://launchpad.net/ubuntu/+source/diffoscope/123ubuntu1

(lets see how it goes)

G.
> 
> Regards,
> 
> -- 
>   ,''`.
>  : :'  : Chris Lamb
>  `. `'`  la...@debian.org  chris-lamb.co.uk
>`-
> 
> 



Bug#940471: diffoscope: test failures

2019-09-16 Thread Chris Lamb
tags 940471 + moreinfo
thanks

Hi Gianfranco,

> Hello, looks like the latest diffoscope in unstable has a test failure 
> that is preventing it from entering testing:

Hm, I can't reproduce this unfortunately.

> FileNotFoundError: [Errno 2] No such file or directory: 'ocamlc': 'ocamlc'

This does not make immediate sense to me - ocamlc is provided by the
ocaml-nox package which is listed in the Build-Depends and in the
autopkgtest debian/tests/control file.

Any ideas?


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org  chris-lamb.co.uk
   `-



Bug#940471: diffoscope: test failures

2019-09-16 Thread Gianfranco Costamagna
Source: diffoscope
Version: 123
Severity: serious

Hello, looks like the latest diffoscope in unstable has a test failure that is 
preventing it from entering testing:

snip of the test failure:
 ERRORS 
 ERROR at setup of test_identification _

tmpdir = local('/tmp/pytest-of-debci/pytest-0/test_identification0')

@pytest.fixture
def cmi(tmpdir):
input_ = str(tmpdir.join('{}.mli'.format(prefix)))
output = str(tmpdir.join('{}.cmi'.format(prefix)))

with open(input_, 'w') as f:
pass

>   subprocess.check_call(('ocamlc', '-c', input_))

f  = <_io.TextIOWrapper 
name='/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli' mode='w' 
encoding='UTF-8'>
input_ = '/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli'
output = '/tmp/pytest-of-debci/pytest-0/test_identification0/test1.cmi'
prefix = 'test1'
tmpdir = local('/tmp/pytest-of-debci/pytest-0/test_identification0')

tests/comparators/test_ocaml.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/usr/lib/python3.7/subprocess.py:342: in check_call
retcode = call(*popenargs, **kwargs)
/usr/lib/python3.7/subprocess.py:323: in call
with Popen(*popenargs, **kwargs) as p:
/usr/lib/python3.7/subprocess.py:775: in __init__
restore_signals, start_new_session)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = 
args = ['ocamlc', '-c', 
'/tmp/pytest-of-debci/pytest-0/test_identification0/test1.mli']
executable = b'ocamlc', preexec_fn = None, close_fds = True, pass_fds = ()
cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False
p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1
errwrite = -1, restore_signals = True, start_new_session = False

def _execute_child(self, args, executable, preexec_fn, close_fds,
   pass_fds, cwd, env,
   startupinfo, creationflags, shell,
   p2cread, p2cwrite,
   c2pread, c2pwrite,
   errread, errwrite,
   restore_signals, start_new_session):
"""Execute program (POSIX version)"""

if isinstance(args, (str, bytes)):
args = [args]
else:
args = list(args)

if shell:
# On Android the default shell is at '/system/bin/sh'.
unix_shell = ('/system/bin/sh' if
  hasattr(sys, 'getandroidapilevel') else '/bin/sh')
args = [unix_shell, "-c"] + args
if executable:
args[0] = executable

if executable is None:
executable = args[0]
orig_executable = executable

# For transferring possible exec failure from child to parent.
# Data format: "exception name:hex errno:description"
# Pickle is not used; it is complex and involves memory allocation.
errpipe_read, errpipe_write = os.pipe()
# errpipe_write must not be in the standard io 0, 1, or 2 fd range.
low_fds_to_close = []
while errpipe_write < 3:
low_fds_to_close.append(errpipe_write)
errpipe_write = os.dup(errpipe_write)
for low_fd in low_fds_to_close:
os.close(low_fd)
try:
try:
# We must avoid complex work that could involve
# malloc or free in the child process to avoid
# potential deadlocks, thus we do all this here.
# and pass it to fork_exec()

if env is not None:
env_list = []
for k, v in env.items():
k = os.fsencode(k)
if b'=' in k:
raise ValueError("illegal environment variable 
name")
env_list.append(k + b'=' + os.fsencode(v))
else:
env_list = None  # Use execv instead of execve.
executable = os.fsencode(executable)
if os.path.dirname(executable):
executable_list = (executable,)
else:
# This matches the behavior of os._execvpe().
executable_list = tuple(
os.path.join(os.fsencode(dir), executable)
for dir in os.get_exec_path(env))
fds_to_keep = set(pass_fds)
fds_to_keep.add(errpipe_write)
self.pid = _posixsubprocess.fork_exec(
args, executable_list,
close_fds, tuple(sorted(map(int, fds_to_keep))),
cwd, env_list,
p2cread, p2cwrite, c2pread, c2pwrite,
errread, errwrite,