diff options
-rwxr-xr-x | smoketest/scripts/cli/test_service_tftp-server.py | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/smoketest/scripts/cli/test_service_tftp-server.py b/smoketest/scripts/cli/test_service_tftp-server.py new file mode 100755 index 000000000..5ffb61192 --- /dev/null +++ b/smoketest/scripts/cli/test_service_tftp-server.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019-2020 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import re +import os +import unittest + +from psutil import process_iter + +from vyos.configsession import ConfigSession +from vyos.configsession import ConfigSessionError +from vyos.util import read_file +from vyos.util import process_named_running +from vyos.validate import is_ipv6 + +PROCESS_NAME = 'in.tftpd' +base_path = ['service', 'tftp-server'] + +class TestServiceTFTPD(unittest.TestCase): + def setUp(self): + self.session = ConfigSession(os.getpid()) + self.session.delete(base_path) + + def tearDown(self): + self.session.delete(base_path) + self.session.commit() + del self.session + + def test_tftpd_single(self): + directory = '/tmp' + address = '127.0.0.1' + port = '69' # default port + + self.session.set(base_path + ['allow-upload']) + self.session.set(base_path + ['directory', directory]) + self.session.set(base_path + ['listen-address', address]) + + # commit changes + self.session.commit() + + config = read_file('/etc/default/tftpd0') + # verify listen IP address + self.assertIn(f'{address}:{port} -4', config) + # verify directory + self.assertIn(directory, config) + # verify upload + self.assertIn('--create --umask 000', config) + + # Check for running process + self.assertTrue(process_named_running(PROCESS_NAME)) + + def test_tftpd_multi(self): + directory = '/tmp' + address = ['127.0.0.1', '::1'] + port = '70' + + self.session.set(base_path + ['directory', directory]) + for addr in address: + self.session.set(base_path + ['listen-address', addr]) + self.session.set(base_path + ['port', port]) + + # commit changes + self.session.commit() + + for idx in range(0, len(address)): + config = read_file(f'/etc/default/tftpd{idx}') + addr = address[idx] + + # verify listen IP address + if is_ipv6(addr): + addr = f'[{addr}]' + self.assertIn(f'{addr}:{port} -6', config) + else: + self.assertIn(f'{addr}:{port} -4', config) + + # verify directory + self.assertIn(directory, config) + + # Check for running processes - one process is spawned per listen + # IP address, wheter it's IPv4 or IPv6 + count = 0 + for p in process_iter(): + if PROCESS_NAME in p.name(): + count += 1 + self.assertEqual(count, len(address)) + +if __name__ == '__main__': + unittest.main() |