Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests hanging forever #10

Open
AndreaCrotti opened this issue Jan 13, 2016 · 10 comments
Open

Tests hanging forever #10

AndreaCrotti opened this issue Jan 13, 2016 · 10 comments

Comments

@AndreaCrotti
Copy link

Thanks for this great utility, I'm trying to get it working now with a very simple example:

def test_connect_to_sftp(sftpserver):
    with sftpserver.serve_content({'a_dir': {'somefile.txt': "Some content"}}):
        trans, client = sftp_utils.connect_to_sftp(
            host=sftpserver.host,
            port=sftpserver.port,
            username='user',
            password='pw',
            dsp_name='name',
        )

Where the connect is very simple and just does this

def connect_to_sftp(host, port, username, password, dsp_name):
    logger.info('Connecting to %s: %s:%s', dsp_name, host, port)
    transport = Transport((host, port))
    transport.connect(username=username, password=password)
    logger.info('Connected to %s', dsp_name)

    return transport, SFTPClient.from_transport(transport)

It works in theory but the test runner never quits it just hangs there forever.
Any idea why it's happening?
Is there something I can do to kill the sftpserver thread?
(I tried shutdown already but nothing..)

@mbyio
Copy link

mbyio commented Apr 12, 2017

It looks like you're using the paramiko client? If so, then this is actually a paramiko issue. It opens Python threads in the background to do the actual communication with the server. So you need to actually close the client or it might get stuck.

@ulope
Copy link
Owner

ulope commented Mar 28, 2018

If this is indeed a paramiko issue I assume this issue can be closed?

Note to self: Maybe adding a hint in the readme wouldn't hurt though...

@alfredopalhares
Copy link

I am having ths problem, if its a paramiko issue, is there any links ?
What is the status of this.

@christopherdoyle
Copy link

Also encountered this problem, I think sure this is the relevant paramiko issue: paramiko/paramiko#520 (the issue is more widespread than the title). As above, explicitly closing the transport or client fixes it, e.g. from the orignal post adding trans.close() to the end of the test. I think the issue can be closed? I can't see any way of dealing with this in the fixture without monkey patching paramiko.

@matteosantama
Copy link

matteosantama commented Sep 17, 2021

Similar problem here. Has anyone figured out how to gracefully kill the sftpserver at the end of a test?

@alfredopalhares
Copy link

Nope, still nothing on my end. Shame, because this library is not that useful withthis bug.

@fiendish
Copy link

fiendish commented Jun 19, 2022

Yeah, this happened to me too.

As above, explicitly closing the transport or client fixes it, e.g. from the orignal post adding trans.close() to the end of the test.

Not for me. :\

@fiendish
Copy link

fiendish commented Jun 19, 2022

@ulope running the server as a thread is probably a mistake. I was able to work around this issue by spawning the server in its own process to eliminate lock contention:

import time
from multiprocessing import Process, Queue
from pytest_sftpserver.sftp.server import SFTPServer


def run_server(q, contents):
    sftpserver = SFTPServer(content_object=contents)
    sftpserver.start()
    q.put((sftpserver.host, sftpserver.port))


def test_some_stuff():
    contents = {}  # my contents structure here

    queue = Queue()
    p = Process(target=run_server, args=(queue, contents), daemon=True)
    p.start()

    for _ in range(10):
        address = queue.get()
        if address:
            break
        time.sleep(0.5)

    assert address

    # <do my testing here>

@johannes-cogitaris
Copy link

johannes-cogitaris commented Dec 9, 2022

To anyone coming here: This might be an alternative: https://github.com/oz123/pytest-localftpserver

edit: ftp only :-(

@tmieulet
Copy link

tmieulet commented May 24, 2023

see : #30 (comment)
It worked for me:

@pytest.fixture
def sftp_fixture(sftpserver):
    # https://github.com/ulope/pytest-sftpserver/issues/30
    # Tests hanging forever
    sftpserver.daemon_threads = True
    sftpserver.block_on_close = False
    yield sftpserver

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants