tests: Convert tests to beakerlib

Drop dependency on pyroute2 module.
This commit is contained in:
Phil Sutter 2024-09-03 14:44:57 +02:00
parent 8eab0dbf08
commit 2a26f23b53
4 changed files with 103 additions and 242 deletions

View File

@ -9,7 +9,7 @@
export TEST=/CoreOS/ipset
export TESTVERSION=1.0
BUILT_FILES=
FILES=$(METADATA) runtest.sh Makefile
FILES=$(METADATA) runtest.sh Makefile iperf3d.service
.PHONY: all install download clean
run: $(FILES) build
./runtest.sh
@ -27,7 +27,7 @@ $(METADATA): Makefile
@echo "Type: Sanity" >> $(METADATA)
@echo "TestTime: 5m" >> $(METADATA)
@echo "RunFor: ipset " >> $(METADATA)
@echo "Requires: ipset iperf3 python3 systemd python3-pyroute2 iptables kernel-modules-extra" >> $(METADATA)
@echo "Requires: ipset iperf3 systemd iptables kernel-modules-extra" >> $(METADATA)
@echo "Priority: Normal" >> $(METADATA)
@echo "License: GPLv2" >> $(METADATA)
@echo "Confidential: no" >> $(METADATA)

View File

@ -1,228 +0,0 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1+
# ~~~
# Description: Tests for ipset
#
# Author: Susant Sahani <susant@redhat.com>
# Copyright (c) 2018 Red Hat, Inc.
# ~~~
import errno
import os
import sys
import time
import unittest
import subprocess
import signal
import shutil
import socket
from pyroute2 import IPRoute
def setUpModule():
if shutil.which('ipset') is None:
raise OSError(errno.ENOENT, 'ipset not found')
if shutil.which('iperf3') is None:
raise OSError(errno.ENOENT, 'iperf3 not found')
def tearDownModule():
pass
class GenericUtilities():
def SetupVethInterface(self):
ip = IPRoute()
ip.link('add', ifname='veth-test', peer='veth-peer', kind='veth')
idx_veth_test = ip.link_lookup(ifname='veth-test')[0]
idx_veth_peer = ip.link_lookup(ifname='veth-peer')[0]
ip.link('set', index=idx_veth_test, address='02:01:02:03:04:08')
ip.link('set', index=idx_veth_peer, address='02:01:02:03:04:09')
ip.addr('add', index=idx_veth_test, address='192.168.225.32', mask=24)
ip.addr('add', index=idx_veth_peer, address='192.168.225.33', mask=24)
ip.link('set', index=idx_veth_test, state='up')
ip.link('set', index=idx_veth_peer, state='up')
ip.close()
def TearDownVethInterface(self):
ip = IPRoute()
ip.link('del', index=ip.link_lookup(ifname='veth-test')[0])
ip.close()
def AddAddress(self, interface, address):
ip = IPRoute()
idx_veth_peer = ip.link_lookup(ifname=interface)[0]
ip.close()
def IPSetAdd(self, hashset, address):
subprocess.check_output(['ipset', 'add', hashset, address])
def IPSetRemove(self, hashset, address):
subprocess.check_output(['ipset', 'del', hashset, address])
def IPSetCreateHashSet(self, hashset, hashtype):
subprocess.check_output(['ipset', 'create', hashset, hashtype])
def IPSetDestroyHashSet(self, hashset):
subprocess.check_output(['ipset', 'destroy', hashset])
class IpsetTests(unittest.TestCase, GenericUtilities):
def setUp(self):
self.SetupVethInterface()
def tearDown(self):
self.TearDownVethInterface()
def test_ipset_bitmap_ip_netfilter(self):
self.IPSetCreateHashSet('testnetiperf', 'hash:ip')
self.IPSetAdd('testnetiperf', '192.168.225.32')
self.IPSetAdd('testnetiperf', '192.168.225.33')
subprocess.check_output(['ipset', 'test','testnetiperf','192.168.225.32'])
subprocess.check_output(['ipset', 'test','testnetiperf','192.168.225.33'])
subprocess.check_output(['systemctl', 'start', 'iperf3d.service'])
time.sleep(5)
r = subprocess.call("iperf3" + " -c 192.168.225.32 -p 55555 --connect-timeout 5", shell=True)
self.assertEqual(r, 0)
r = subprocess.call("iptables" + " -I INPUT -m set --match-set testnetiperf src -j DROP", shell=True)
self.assertEqual(r, 0)
r = subprocess.call("iperf3" + " -c 192.168.225.32 -p 55555 --connect-timeout 5", shell=True)
self.assertNotEqual(r, 0)
subprocess.check_output(['systemctl', 'stop', 'iperf3d.service'])
subprocess.call("iptables" + " --delete INPUT -m set --match-set testnetiperf src -j DROP" , shell=True)
self.IPSetDestroyHashSet('testnetiperf')
def test_ipset_add_bitmap_ip(self):
self.IPSetCreateHashSet('testnet', 'hash:ip')
self.IPSetAdd('testnet', '192.168.11.12')
self.IPSetAdd('testnet', '192.168.11.13')
self.IPSetAdd('testnet', '192.168.11.14')
self.IPSetAdd('testnet', '192.168.11.15')
subprocess.check_output(['ipset', 'test','testnet','192.168.11.12'])
subprocess.check_output(['ipset', 'test','testnet','192.168.11.13'])
subprocess.check_output(['ipset', 'test','testnet','192.168.11.14'])
subprocess.check_output(['ipset', 'test','testnet','192.168.11.15'])
self.IPSetDestroyHashSet('testnet')
def test_ipset_delete_bitmap_ip(self):
self.IPSetCreateHashSet('testnet', 'hash:ip')
self.IPSetAdd('testnet', '192.168.11.12')
self.IPSetAdd('testnet', '192.168.11.13')
subprocess.check_output(['ipset', 'test','testnet','192.168.11.12'])
subprocess.check_output(['ipset', 'test','testnet','192.168.11.13'])
self.IPSetRemove('testnet', '192.168.11.12')
r = subprocess.call("ipset" + " test testnet 192.168.11.12", shell=True)
self.assertEqual(r, 1)
self.IPSetDestroyHashSet('testnet')
def test_ipset_hash_bitmap_mac(self):
self.IPSetCreateHashSet('testmac', 'hash:mac')
self.IPSetAdd('testmac', '02:01:02:03:04:09')
subprocess.check_output(['ipset', 'test','testmac','02:01:02:03:04:09'])
self.IPSetRemove('testmac', '02:01:02:03:04:09')
r = subprocess.call("ipset" + " test testmac 02:01:02:03:04:09", shell=True)
self.assertEqual(r, 1)
self.IPSetDestroyHashSet('testmac')
def test_ipset_hash_bitmap_ipport(self):
self.IPSetCreateHashSet('testipport', 'hash:ip,mac')
self.IPSetAdd('testipport', '1.1.1.1,02:01:02:03:04:09')
subprocess.check_output(['ipset', 'test','testipport','1.1.1.1,02:01:02:03:04:09'])
self.IPSetRemove('testipport', '1.1.1.1,02:01:02:03:04:09')
r = subprocess.call("ipset" + " test testipport 1.1.1.1,02:01:02:03:04:09", shell=True)
self.assertEqual(r, 1)
self.IPSetDestroyHashSet('testipport')
def test_ipset_hash_bitmap_ipport(self):
self.IPSetCreateHashSet('testipport', 'hash:ip,port')
self.IPSetAdd('testipport', '192.168.1.1,udp:53')
self.IPSetAdd('testipport', '192.168.1.1,5555')
subprocess.check_output(['ipset', 'test','testipport','192.168.1.1,udp:53'])
subprocess.check_output(['ipset', 'test','testipport','192.168.1.1,5555'])
self.IPSetRemove('testipport', '192.168.1.1,5555')
r = subprocess.call("ipset" + " test testipport 192.168.1.1,5555", shell=True)
self.assertEqual(r, 1)
self.IPSetDestroyHashSet('testipport')
def test_ipset_hash_bitmap_ipportip(self):
self.IPSetCreateHashSet('testipportip', 'hash:ip,port,ip')
self.IPSetAdd('testipportip', '192.168.1.1,80,10.0.0.1')
self.IPSetAdd('testipportip', '192.168.1.2,80,10.0.0.2')
subprocess.check_output(['ipset', 'test','testipportip','192.168.1.1,80,10.0.0.1'])
subprocess.check_output(['ipset', 'test','testipportip','192.168.1.1,80,10.0.0.1'])
self.IPSetRemove('testipportip', '192.168.1.1,80,10.0.0.1')
r = subprocess.call("ipset" + " test testipportip 192.168.1.1,80,10.0.0.1", shell=True)
self.assertEqual(r, 1)
self.IPSetDestroyHashSet('testipportip')
def test_ipset_hash_bitmap_netiface(self):
self.IPSetCreateHashSet('testnetiface', 'hash:net,iface')
self.IPSetAdd('testnetiface', '192.168.0/24,veth-test')
self.IPSetAdd('testnetiface', '192.167.0/24,veth-peer')
subprocess.check_output(['ipset', 'test','testnetiface','192.168.0/24,veth-test'])
subprocess.check_output(['ipset', 'test','testnetiface','192.167.0/24,veth-peer'])
self.IPSetRemove('testnetiface', '192.168.0/24,veth-test')
r = subprocess.call("ipset" + " test testnetiface 192.168.0/24,veth-test", shell=True)
self.assertEqual(r, 1)
self.IPSetDestroyHashSet('testnetiface')
if __name__ == '__main__':
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout, verbosity=3))

View File

@ -18,30 +18,120 @@ SERVICE_UNITDIR="/var/run/systemd/system"
rlJournalStart
rlPhaseStartSetup
rlAssertRpm $PACKAGE
rlAssertRpm kernel-modules-extra-$(uname -r)
rlRun "systemctl stop firewalld" 0,5
rlRun "setenforce 0" 0,1
rlRun "[ -e /sys/class/net/veth-test ] && ip link del veth-test" 0,1
rlRun "cp iperf3d.service $SERVICE_UNITDIR"
rlRun "cp ipset-tests.py /usr/bin/"
rlRun "systemctl daemon-reload"
rlRun "ip link add veth-test type veth peer name veth-peer"
rlRun "ip link set veth-test addr 02:01:02:03:04:08"
rlRun "ip link set veth-peer addr 02:01:02:03:04:09"
rlRun "ip addr add 192.168.225.32/24 dev veth-test"
rlRun "ip addr add 192.168.225.33/24 dev veth-peer"
rlRun "ip link set veth-test up"
rlRun "ip link set veth-peer up"
rlPhaseEnd
rlPhaseStartTest
rlLog "Starting ipset tests ..."
rlRun "/usr/bin/python3 /usr/bin/ipset-tests.py"
rlPhaseStartTest "test_ipset_bitmap_ip_netfilter"
rlRun "ipset create testnetiperf hash:ip"
rlRun "ipset add testnetiperf 192.168.225.32"
rlRun "ipset add testnetiperf 192.168.225.33"
rlRun "ipset test testnetiperf 192.168.225.32"
rlRun "ipset test testnetiperf 192.168.225.33"
rlRun "systemctl start iperf3d.service"
sleep 1
rlRun "iperf3 -c 192.168.225.32 -p 55555 --connect-timeout 5"
rlRun "iptables -I INPUT -m set --match-set testnetiperf src -j DROP"
rlRun "iperf3 -c 192.168.225.32 -p 55555 --connect-timeout 5" 1
rlRun "systemctl stop iperf3d.service"
rlRun "iptables --delete INPUT -m set --match-set testnetiperf src -j DROP"
rlRun "ipset destroy testnetiperf"
rlPhaseEnd
rlPhaseStartTest "test_ipset_add_bitmap_ip"
rlRun "ipset create testnet hash:ip"
rlRun "ipset add testnet 192.168.11.12"
rlRun "ipset add testnet 192.168.11.13"
rlRun "ipset add testnet 192.168.11.14"
rlRun "ipset add testnet 192.168.11.15"
rlRun "ipset test testnet 192.168.11.12"
rlRun "ipset test testnet 192.168.11.13"
rlRun "ipset test testnet 192.168.11.14"
rlRun "ipset test testnet 192.168.11.15"
rlRun "ipset destroy testnet"
rlPhaseEnd
rlPhaseStartTest "test_ipset_delete_bitmap_ip"
rlRun "ipset create testnet hash:ip"
rlRun "ipset add testnet 192.168.11.12"
rlRun "ipset add testnet 192.168.11.13"
rlRun "ipset test testnet 192.168.11.12"
rlRun "ipset test testnet 192.168.11.13"
rlRun "ipset del testnet 192.168.11.12"
rlRun "ipset test testnet 192.168.11.12" 1
rlRun "ipset destroy testnet"
rlPhaseEnd
rlPhaseStartTest "test_ipset_hash_bitmap_mac"
rlRun "ipset create testmac hash:mac"
rlRun "ipset add testmac 02:01:02:03:04:09"
rlRun "ipset test testmac 02:01:02:03:04:09"
rlRun "ipset del testmac 02:01:02:03:04:09"
rlRun "ipset test testmac 02:01:02:03:04:09" 1
rlRun "ipset destroy testmac"
rlPhaseEnd
rlPhaseStartTest "test_ipset_hash_bitmap_ipport"
rlRun "ipset create testipport hash:ip,mac"
rlRun "ipset add testipport 1.1.1.1,02:01:02:03:04:09"
rlRun "ipset test testipport 1.1.1.1,02:01:02:03:04:09"
rlRun "ipset del testipport 1.1.1.1,02:01:02:03:04:09"
rlRun "ipset test testipport 1.1.1.1,02:01:02:03:04:09" 1
rlRun "ipset destroy testipport"
rlPhaseEnd
rlPhaseStartTest "test_ipset_hash_bitmap_ipport"
rlRun "ipset create testipport hash:ip,port"
rlRun "ipset add testipport 192.168.1.1,udp:53"
rlRun "ipset add testipport 192.168.1.1,5555"
rlRun "ipset test testipport 192.168.1.1,udp:53"
rlRun "ipset test testipport 192.168.1.1,5555"
rlRun "ipset del testipport 192.168.1.1,5555"
rlRun "ipset test testipport 192.168.1.1,5555" 1
rlRun "ipset destroy testipport"
rlPhaseEnd
rlPhaseStartTest "test_ipset_hash_bitmap_ipportip"
rlRun "ipset create testipportip hash:ip,port,ip"
rlRun "ipset add testipportip 192.168.1.1,80,10.0.0.1"
rlRun "ipset add testipportip 192.168.1.2,80,10.0.0.2"
rlRun "ipset test testipportip 192.168.1.1,80,10.0.0.1"
rlRun "ipset test testipportip 192.168.1.1,80,10.0.0.1"
rlRun "ipset del testipportip 192.168.1.1,80,10.0.0.1"
rlRun "ipset test testipportip 192.168.1.1,80,10.0.0.1" 1
rlRun "ipset destroy testipportip"
rlPhaseEnd
rlPhaseStartTest "test_ipset_hash_bitmap_netiface"
rlRun "ipset create testnetiface hash:net,iface"
rlRun "ipset add testnetiface 192.168.0/24,veth-test"
rlRun "ipset add testnetiface 192.167.0/24,veth-peer"
rlRun "ipset test testnetiface 192.168.0/24,veth-test"
rlRun "ipset test testnetiface 192.167.0/24,veth-peer"
rlRun "ipset del testnetiface 192.168.0/24,veth-test"
rlRun "ipset test testnetiface 192.168.0/24,veth-test" 1
rlRun "ipset destroy testnetiface"
rlPhaseEnd
rlPhaseStartCleanup
rlRun "rm /usr/bin/ipset-tests.py"
rlRun "[ -e /sys/class/net/veth-test ] && ip link del veth-test" 0,1
rlRun "ip link del veth-test"
rlRun "rm $SERVICE_UNITDIR/iperf3d.service"
rlRun "systemctl daemon-reload"
rlRun "setenforce 1" 0,1
rlLog "ipset tests done"
rlPhaseEnd
rlJournalPrintText

View File

@ -8,8 +8,7 @@
required_packages:
- ipset
- iptables
- python3
- systemd
- iproute
- iperf3
- python3-pyroute2
- kernel-modules-extra