diff --git a/invenio_uploadbyurl/config.py b/invenio_uploadbyurl/config.py index d44f1673c82629f850080051709cf5a95b7e32ae..849b51964339144a353e65bcfca1e97be18df67a 100644 --- a/invenio_uploadbyurl/config.py +++ b/invenio_uploadbyurl/config.py @@ -57,7 +57,10 @@ UPLOADBYURL_COMMENT = 'key@uploadbyurl.de' """Name of key to be added in authorized_keys.""" UPLOADBYURL_TIMEOUT = 60 * 60 # 1 hour -"""Timeout after which upload task should be quit.""" +"""Timeout in s after which upload task should be quit.""" + +UPLOADBYURL_SHORT_TIMEOUT = 30 +"""Timeout in s after which short tasks, e.g. echo, should be quit.""" UPLOADBYURL_SENDER_EMAIL = 'rodare@hzdr.de' """Email address for sending mails.""" diff --git a/invenio_uploadbyurl/tasks.py b/invenio_uploadbyurl/tasks.py index acd7a65407fb5a6071591ac83a6f740f05e7cd20..78163b00113f072154d25e70cb34e4dbd4e4029e 100644 --- a/invenio_uploadbyurl/tasks.py +++ b/invenio_uploadbyurl/tasks.py @@ -141,16 +141,22 @@ def download_via_sftp(bucket_id, remote_server_id, user_id, filepath): '/usr/bin/sftp', arguments.split(), timeout=current_app.config['UPLOADBYURL_TIMEOUT'] ) - sftp_proc.expect('Enter passphrase for key .*', timeout=60) + sftp_proc.expect( + 'Enter passphrase for key .*', + timeout=current_app.config['UPLOADBYURL_SHORT_TIMEOUT']) sftp_proc.sendline(secret) - sftp_proc.expect('sftp>', timeout=60) + sftp_proc.expect( + 'sftp>', + timeout=current_app.config['UPLOADBYURL_SHORT_TIMEOUT']) # download file with timeout specified in configuration sftp_proc.sendline(cmd_get) sftp_proc.expect( 'sftp>', timeout=current_app.config['UPLOADBYURL_TIMEOUT'] ) sftp_proc.sendline('exit') - sftp_proc.expect(pexpect.EOF) + sftp_proc.expect( + pexpect.EOF, + timeout=current_app.config['UPLOADBYURL_SHORT_TIMEOUT']) sftp_proc.close() except (pexpect.EOF, pexpect.TIMEOUT): # clean up in case of failure diff --git a/tests/conftest.py b/tests/conftest.py index f2d3f1330ee47cd030784390fb8dcbbec3457d7f..988a64587ddfebf2158d27ef0581f78b6dde75de 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -82,6 +82,8 @@ def base_app(instance_path): UPLOADBYURL_NOTIFICATION_ENABLED=False, UPLOADBYURL_REDISSTORE_URL=os.getenv('UPLOADBYURL_REDISSTORE_URL', 'redis://localhost:6379/0'), + UPLOADBYURL_TIMEOUT=30, + UPLOADBYURL_SHORT_TIMEOUT=10, FILES_REST_DEFAULT_QUOTA_SIZE=100 * 1024 * 1024, MAIL_SUPPRESS_SEND=True, )