avast/pytest-docker

Endpoint empty error

didacrarbones opened this issue · 5 comments

On a windows system, the endpoint command returns a weird string:

0.0.0.0:9997\r\n�[0m

That's why the strip here does not change the string, and this line takes the garbage part. I have solved it by using a regexp:

ips = re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', endpoint)
assert len(ips) == 1
endpoint = ips[0]

Do you think this is a possible solution that could be merged in?

n1ngu commented

Looks like probably an escape character followed by a "reset color" shell sequence.

AFAIU the underlying subprocess shouldn't be using any decorations you have in your shell. Does your docker setup have some kind of colored output plugin?

I have run into the same issue. However, the problem is not with strip() but with following statement
https://github.com/avast/pytest-docker/blob/master/src/pytest_docker/plugin.py#L87
It can been due to Windows 11. However, it is still bug on pytest_docker (and it is mentioned in the code that line 87 should handle a messy output. But the messy output has changed :) )
I would suggest similar solution. However, without assert (since it is not according to Python standards).
I do not use any colored output plugin. Simple Docker desktop with default settings.

My proposal with proper exception handling would be something like this.
Replacement for lines 86-87 :

ips = re.findall(r'[0-9]{1,3}(?:\.[0-9]{1,3}){3}:[0-9]{1,5}', endpoint)
if len(ips) == 0:
    raise ValueError(f'Could not found any IP in endpoint {endpoint} for "{service}:{container_port}"')
if len(ips) > 1:
    raise ValueError(f'Found more IPs ({",".join(ips)}) in endpoint {endpoint} for "{service}:{container_port}". '
                              f'Could not decided which port to use. ')
endpoint = ips[0]

However, there could be a problem if this endpoint will be in format: esfasf312sd:5664 (i.e., usage of hostname instead of IP). Also switching to IPv6 will be problematic with this approach.

I have the same problem on win10, getting some weird output on line 78 (b'\r\n\x1b[0m')
Running Docker Desktop 4.7.1 (77678) and docker-compose version 1.29.2, build 5becea4c

I have created a pull request for this issue:
#81