diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-07-12 12:34:33 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2020-07-12 12:34:33 +0200 |
commit | f2c05556b051126b9bc676f3427114e9889f3b61 (patch) | |
tree | 85db3545ebf7f8f6c91fe5683c5ef67aca21eb20 /scripts/cli | |
parent | 9ac84f533b9dfd80dbf00708ac1f58d260bfdfa7 (diff) | |
download | vyos-1x-f2c05556b051126b9bc676f3427114e9889f3b61.tar.gz vyos-1x-f2c05556b051126b9bc676f3427114e9889f3b61.zip |
nat: initial simple test
Diffstat (limited to 'scripts/cli')
-rwxr-xr-x | scripts/cli/test_nat.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/scripts/cli/test_nat.py b/scripts/cli/test_nat.py new file mode 100755 index 000000000..fdc1ba7de --- /dev/null +++ b/scripts/cli/test_nat.py @@ -0,0 +1,63 @@ +#!/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 os +import jmespath +import json +import unittest + +from vyos.configsession import ConfigSession, ConfigSessionError +from vyos.util import cmd + +base_path = ['nat'] +snat_pattern = 'nftables[?rule].rule[?chain].{chain: chain, comment: comment, address: { network: expr[].match.right.prefix.addr | [0], prefix: expr[].match.right.prefix.len | [0]}}' + +class TestNAT(unittest.TestCase): + def setUp(self): + self.session = ConfigSession(os.getpid()) + # ensure we can also run this test on a live system - so lets clean + # out the current configuration :) + self.session.delete(base_path) + + def tearDown(self): + del self.session + + def test_source_nat(self): + """ Check if SNMP can be configured and service runs """ + + path = base_path + ['source'] + network = '192.168.0.0/16' + self.session.set(path + ['rule', '1', 'destination', 'address', network]) + self.session.set(path + ['rule', '1', 'exclude']) + + # check validate() - outbound-interface must be defined + with self.assertRaises(ConfigSessionError): + self.session.commit() + + self.session.set(path + ['rule', '1', 'outbound-interface', 'any']) + self.session.commit() + + tmp = cmd('sudo nft -j list table nat') + nftable_json = json.loads(tmp) + condensed_json = jmespath.search(snat_pattern, nftable_json)[0] + + self.assertEqual(condensed_json['comment'], 'DST-NAT-1') + self.assertEqual(condensed_json['address']['network'], network.split('/')[0]) + self.assertEqual(str(condensed_json['address']['prefix']), network.split('/')[1]) + +if __name__ == '__main__': + unittest.main() + |