Commit 7c0a8377 authored by Jérome Perrin's avatar Jérome Perrin

software/proftpd/test: support python3

parent a7ec7c12
...@@ -48,6 +48,7 @@ setup( ...@@ -48,6 +48,7 @@ setup(
'pysftp', 'pysftp',
'supervisor', 'supervisor',
'psutil', 'psutil',
'six',
], ],
zip_safe=True, zip_safe=True,
test_suite='test', test_suite='test',
......
...@@ -25,12 +25,14 @@ ...@@ -25,12 +25,14 @@
# #
############################################################################## ##############################################################################
from __future__ import unicode_literals
import os import os
import shutil import shutil
import urlparse import six.moves.urllib.parse as urlparse
import tempfile import tempfile
import StringIO import io
import subprocess import subprocess
import six
import pysftp import pysftp
import psutil import psutil
...@@ -95,7 +97,7 @@ class TestSFTPOperations(ProFTPdTestCase): ...@@ -95,7 +97,7 @@ class TestSFTPOperations(ProFTPdTestCase):
def test_simple_sftp_session(self): def test_simple_sftp_session(self):
with self._getConnection() as sftp: with self._getConnection() as sftp:
# put a file # put a file
with tempfile.NamedTemporaryFile() as f: with tempfile.NamedTemporaryFile(mode="w") as f:
f.write("Hello FTP !") f.write("Hello FTP !")
f.flush() f.flush()
sftp.put(f.name, remotepath='testfile') sftp.put(f.name, remotepath='testfile')
...@@ -117,14 +119,14 @@ class TestSFTPOperations(ProFTPdTestCase): ...@@ -117,14 +119,14 @@ class TestSFTPOperations(ProFTPdTestCase):
def test_uploaded_file_not_visible_until_fully_uploaded(self): def test_uploaded_file_not_visible_until_fully_uploaded(self):
test_self = self test_self = self
class PartialFile(StringIO.StringIO): class PartialFile(io.StringIO):
def read(self, *args): def read(self, *args):
# file is not visible yet # file is not visible yet
test_self.assertNotIn('destination', os.listdir(test_self.upload_dir)) test_self.assertNotIn('destination', os.listdir(test_self.upload_dir))
# it's just a hidden file # it's just a hidden file
test_self.assertEqual( test_self.assertEqual(['.in.destination.'],
['.in.destination.'], os.listdir(test_self.upload_dir)) os.listdir(test_self.upload_dir))
return StringIO.StringIO.read(self, *args) return io.StringIO.read(self, *args)
with self._getConnection() as sftp: with self._getConnection() as sftp:
sftp.sftp_client.putfo(PartialFile("content"), "destination") sftp.sftp_client.putfo(PartialFile("content"), "destination")
...@@ -136,11 +138,11 @@ class TestSFTPOperations(ProFTPdTestCase): ...@@ -136,11 +138,11 @@ class TestSFTPOperations(ProFTPdTestCase):
test_self = self test_self = self
with self._getConnection() as sftp: with self._getConnection() as sftp:
class ErrorFile(StringIO.StringIO): class ErrorFile(io.StringIO):
def read(self, *args): def read(self, *args):
# at this point, file is already created on server # at this point, file is already created on server
test_self.assertEqual( test_self.assertEqual(['.in.destination.'],
['.in.destination.'], os.listdir(test_self.upload_dir)) os.listdir(test_self.upload_dir))
# simulate a connection closed # simulate a connection closed
sftp.sftp_client.close() sftp.sftp_client.close()
return "something that will not be sent to server" return "something that will not be sent to server"
...@@ -152,18 +154,21 @@ class TestSFTPOperations(ProFTPdTestCase): ...@@ -152,18 +154,21 @@ class TestSFTPOperations(ProFTPdTestCase):
def test_user_cannot_escape_home(self): def test_user_cannot_escape_home(self):
with self._getConnection() as sftp: with self._getConnection() as sftp:
with self.assertRaisesRegexp(IOError, 'Permission denied'): with six.assertRaisesRegex(self, IOError, 'Permission denied'):
sftp.listdir('..') sftp.listdir('..')
with self.assertRaisesRegexp(IOError, 'Permission denied'): with six.assertRaisesRegex(self, IOError, 'Permission denied'):
sftp.listdir('/') sftp.listdir('/')
with self.assertRaisesRegexp(IOError, 'Permission denied'): with six.assertRaisesRegex(self, IOError, 'Permission denied'):
sftp.listdir('/tmp/') sftp.listdir('/tmp/')
class TestUserManagement(ProFTPdTestCase): class TestUserManagement(ProFTPdTestCase):
def test_user_can_be_added_from_script(self): def test_user_can_be_added_from_script(self):
with self.assertRaisesRegexp(AuthenticationException, with six.assertRaisesRegex(
'Authentication failed'): self,
AuthenticationException,
'Authentication failed',
):
self._getConnection(username='bob', password='secret') self._getConnection(username='bob', password='secret')
subprocess.check_call( subprocess.check_call(
...@@ -176,23 +181,34 @@ class TestUserManagement(ProFTPdTestCase): ...@@ -176,23 +181,34 @@ class TestUserManagement(ProFTPdTestCase):
class TestBan(ProFTPdTestCase): class TestBan(ProFTPdTestCase):
def test_client_are_banned_after_5_wrong_passwords(self): def test_client_are_banned_after_5_wrong_passwords(self):
# Simulate failed 5 login attempts # Simulate failed 5 login attempts
for i in range(5): for _ in range(5):
with self.assertRaisesRegexp(AuthenticationException, with six.assertRaisesRegex(
'Authentication failed'): self,
AuthenticationException,
'Authentication failed',
):
self._getConnection(password='wrong') self._getConnection(password='wrong')
# after that, even with a valid password we cannot connect # after that, even with a valid password we cannot connect
with self.assertRaisesRegexp(SSHException, 'Connection reset by peer'): with six.assertRaisesRegex(
self,
SSHException,
'Connection reset by peer',
):
self._getConnection() self._getConnection()
# ban event is logged # ban event is logged
with open(os.path.join(self.computer_partition_root_path, with open(os.path.join(
'var', self.computer_partition_root_path,
'log', 'var',
'proftpd-ban.log')) as ban_log_file: 'log',
self.assertRegexpMatches( 'proftpd-ban.log',
)) as ban_log_file:
six.assertRegex(
self,
ban_log_file.readlines()[-1], ban_log_file.readlines()[-1],
'login from host .* denied due to host ban') 'login from host .* denied due to host ban',
)
class TestInstanceParameterPort(ProFTPdTestCase): class TestInstanceParameterPort(ProFTPdTestCase):
......
...@@ -223,6 +223,7 @@ context = ...@@ -223,6 +223,7 @@ context =
tests = tests =
${slapos.test.kvm-setup:setup} ${slapos.test.kvm-setup:setup}
${slapos.test.slaprunner-setup:setup} ${slapos.test.slaprunner-setup:setup}
${slapos.test.proftpd-setup:setup}
${:extra} ${:extra}
extra = extra =
${slapos.cookbook-setup:setup} ${slapos.cookbook-setup:setup}
...@@ -233,7 +234,6 @@ extra = ...@@ -233,7 +234,6 @@ extra =
${slapos.test.slapos-master-setup:setup} ${slapos.test.slapos-master-setup:setup}
${slapos.test.plantuml-setup:setup} ${slapos.test.plantuml-setup:setup}
${slapos.test.powerdns-setup:setup} ${slapos.test.powerdns-setup:setup}
${slapos.test.proftpd-setup:setup}
${slapos.test.re6stnet-setup:setup} ${slapos.test.re6stnet-setup:setup}
${slapos.test.seleniumserver-setup:setup} ${slapos.test.seleniumserver-setup:setup}
${slapos.test.helloworld-setup:setup} ${slapos.test.helloworld-setup:setup}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment