#1 Add integration tests to iperf3
Merged a year ago by kevin. Opened a year ago by ssahani.

Add integration tests to iperf3
Susant Sahani • a year ago  

@@ -0,0 +1,348 @@

+ #!/usr/bin/env python3

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   iperf3 integration test

+ #   Description: Test for ipertf3

+ #   Author: Susant Sahani <susant@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2018 Red Hat, Inc.

+ #

+ #   This copyrighted material is made available to anyone wishing

+ #   to use, modify, copy, or redistribute it subject to the terms

+ #   and conditions of the GNU General Public License version 2.

+ #

+ #   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, write to the Free

+ #   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

+ #   Boston, MA 02110-1301, USA.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ import errno

+ import os

+ import sys

+ import time

+ import unittest

+ import subprocess

+ import signal

+ import shutil

+ import re

+ import psutil

+ 

+ IPERF3_SERVER_LOGS='/var/run/iperf3-test-log'

+ IPERF3_PID_FILE='/var/run/iperf3-test-pid'

+ 

+ TEST_COMPLETE='Test Complete. Summary Results:'

+ SERVER_TEST_PROTOCOL_TCP_MSG='Starting Test: protocol: TCP'

+ SERVER_TEST_PROTOCOL_UDP_MSG='Starting Test: protocol: UDP'

+ 

+ SERVER_LISTENING_PORT_5202_MSG='Server listening on 5202'

+ SERVER_LISTENING_PORT_5201_MSG='Server listening on 5201'

+ SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG='local 127.0.0.1 port 5202 connected to 127.0.0.1 port \d+'

+ SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_IPV6_MSG='local ::1 port 5202 connected to ::1 port \d+'

+ SERVER_CONNECTED_LOCAL_PORT_5201_WITH_REMOTE_PORT_MSG='local 127.0.0.1 port 5201 connected to 127.0.0.1 port \d+'

+ SERVER_INCOMING_CONNECTION_MSG='Accepted connection from 127.0.0.1, port \d+'

+ SERVER_INCOMING_CONNECTION_IPV6_MSG='Accepted connection from ::1, port \d+'

+ 

+ CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG='local 127.0.0.1 port \d+ connected to 127.0.0.1 port 5202'

+ CLIENT_CONNECTED_TO_SERVER_PORT_5201_MSG='local 127.0.0.1 port \d+ connected to 127.0.0.1 port 5201'

+ CLIENT_CONNECTED_TO_SERVER_PORT_5202_IPV6_MSG='local ::1 port \d+ connected to ::1 port 5202'

+ CLIENT_TEST_COMPLETE_MSG='iperf Done'

+ 

+ def setUpModule():

+     """Initialize the environment, and perform sanity checks on it."""

+ 

+     if shutil.which('iperf3') is None:

+         raise OSError(errno.ENOENT, 'iperf3 not found')

+ 

+     for pid in psutil.pids():

+         p = psutil.Process(pid)

+         if p.name() == "iperf3":

+             raise unittest.SkipTest('iperf3 is already active')

+ 

+ class Iperf3ServerLogUtilities():

+     """Provide a set of utility functions to facilitate iperf3 tests.

+ 

+     This class must be inherited along with unittest.TestCase to define

+     some required methods.

+     """

+ 

+     def findTextInServerLog(self, **kwargs):

+         """Look various success lines from iperf3 server logs."""

+ 

+         if kwargs is not None:

+             with open (IPERF3_SERVER_LOGS, 'rt') as in_file:

+                 contents = in_file.read()

+                 for key in kwargs:

+                     self.assertRegex(contents, kwargs[key])

+ 

+     def KillIperf3Server(self):

+ 

+         time.sleep(3)

+ 

+         try:

+             with open(IPERF3_PID_FILE, 'r') as f:

+                  pid = f.read().rstrip(' \t\r\n\0')

+                  os.kill(int(pid), signal.SIGTERM)

+ 

+             os.remove(IPERF3_SERVER_LOGS)

+             os.remove(IPERF3_PID_FILE)

+         except IOError:

+             pass

+ 

+     def VerifyPortIsOpenAuto(self, port):

+         """ Tests whether iperf3 is listening on given port """

+         netstat_output = subprocess.check_output(['netstat', '-antpl']).rstrip().decode('utf-8')

+         self.assertIsNotNone(netstat_output)

+ 

+         match='tcp.*' + str(port) +'.*LISTEN.*/iperf3'

+         self.assertRegex(netstat_output, match)

+ 

+ class Iperf3TestsBindToInterface(unittest.TestCase, Iperf3ServerLogUtilities):

+ 

+     def setUp(self):

+ 

+         """Setup veth interface"""

+         subprocess.check_output(['ip', 'link', 'add', 'iperf-veth', 'type', 'veth', 'peer', 'name', 'iperf-veth-peer'])

+         subprocess.check_output(['ip', 'addr', 'add', '192.168.50.5', 'dev', 'iperf-veth'])

+         subprocess.check_output(['ip', 'addr', 'add', '192.168.50.6', 'dev', 'iperf-veth-peer'])

+         subprocess.check_output(['ip', 'link', 'set', 'iperf-veth', 'up'])

+         subprocess.check_output(['ip', 'link', 'set', 'iperf-veth-peer', 'up'])

+ 

+         """Start iperf3."""

+         subprocess.check_output(['iperf3', '-s', '--daemon',  '--verbose' , '--logfile', '/var/run/iperf3-test-log', '--pidfile', '/var/run/iperf3-test-pid', '--bind', '192.168.50.5'])

+         time.sleep(3)

+         self.VerifyPortIsOpenAuto(5201)

+ 

+     def tearDown(self):

+         self.KillIperf3Server()

+         subprocess.check_output(['ip', 'link', 'del', 'iperf-veth'])

+ 

+     def test_tcp_client_bind_to_interface_default_port(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '192.168.50.5', '--bind', '192.168.50.6']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, 'Connecting to host 192.168.50.5, port 5201')

+         self.assertRegex(client_output, 'local 192.168.50.6 port \d+ connected to 192.168.50.5 port 5201')

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1='Accepted connection from 192.168.50.6, port \d+',

+                                  test2='local 192.168.50.5 port 5201 connected to 192.168.50.6 port \d+',

+                                  test3=SERVER_TEST_PROTOCOL_TCP_MSG,

+                                  test4=TEST_COMPLETE)

+ class Iperf3Tests(unittest.TestCase, Iperf3ServerLogUtilities):

+ 

+     def setUp(self):

+         """Start iperf3."""

+         subprocess.check_output(['iperf3', '-s', '-p', '5202', '--daemon',  '--verbose' , '--logfile', '/var/run/iperf3-test-log', '--pidfile', '/var/run/iperf3-test-pid'])

+         time.sleep(3)

+         self.VerifyPortIsOpenAuto(5202)

+ 

+ 

+     def tearDown(self):

+         self.KillIperf3Server()

+ 

+     def test_tcp_client_custom_port_5202(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4=SERVER_TEST_PROTOCOL_TCP_MSG,

+                                  test5=TEST_COMPLETE)

+ 

+     def test_udp_client_custom_port_5202(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-u', '-p', '5202']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, "Total Datagrams")

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4=SERVER_TEST_PROTOCOL_UDP_MSG,

+                                  test5=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_time_15sec(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '-t','15']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4=SERVER_TEST_PROTOCOL_TCP_MSG,

+                                  test5='15 second test',

+                                  test6=TEST_COMPLETE)

+ 

+     def test_tcp_client_port_5202_ipv6(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '::1', '-p', '5202']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_IPV6_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_IPV6_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_IPV6_MSG,

+                                  test3=SERVER_TEST_PROTOCOL_TCP_MSG,

+                                  test4=TEST_COMPLETE)

+ 

+     def test_udp_client_port_5202_ipv6(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '::1', '-u', '-p', '5202']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_IPV6_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_IPV6_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_IPV6_MSG,

+                                  test3=SERVER_TEST_PROTOCOL_UDP_MSG,

+                                  test4=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_parallel(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '--parallel', '10']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4='Starting Test: protocol: TCP, 10 streams',

+                                  test5=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_reverse(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '-R']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, 'Reverse mode, remote host 127.0.0.1 is sending')

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_dscp(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '--dscp', '22']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4='tos 22',

+                                  test5=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_mss(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '--set-mss', '400']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4='TCP MSS: 400',

+                                  test5=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_title(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '--title', 'Susant']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, "Susant")

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test4=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_get_server_output(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '--get-server-output']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, "Server output:")

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test5=TEST_COMPLETE)

+ 

+     def test_tcp_client_custom_port_5202_custom_client_port(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-p', '5202', '--bind', '127.0.0.1', '--cport', '5203']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5202_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_CONNECTED_LOCAL_PORT_5202_WITH_REMOTE_PORT_MSG,

+                                  test2='port 5203',

+                                  test3=TEST_COMPLETE)

+ 

+ class Iperf3SanityTests(unittest.TestCase, Iperf3ServerLogUtilities):

+ 

+     def setUp(self):

+         """Start iperf3 default TCP mode."""

+         subprocess.check_output(['iperf3', '--daemon', '--server', '--verbose' , '--logfile', '/var/run/iperf3-test-log', '--pidfile', '/var/run/iperf3-test-pid'])

+         time.sleep(3)

+         self.VerifyPortIsOpenAuto(5201)

+ 

+     def tearDown(self):

+         self.KillIperf3Server()

+ 

+     def test_basic_tcp_client_default_port_5201(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1',]).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5201_MSG)

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_LISTENING_PORT_5201_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5201_WITH_REMOTE_PORT_MSG,

+                                  test4=SERVER_TEST_PROTOCOL_TCP_MSG,

+                                  test5=TEST_COMPLETE)

+ 

+     def test_server_log_file_exists(self):

+         self.assertTrue(os.path.exists(IPERF3_SERVER_LOGS))

+ 

+     def test_server_pid_file_exists(self):

+         self.assertTrue(os.path.exists(IPERF3_PID_FILE))

+ 

+     def test_server_daemon_pid_equal_to_pid_file(self):

+           with open(IPERF3_PID_FILE, 'r') as f:

+              pid = f.read().rstrip(' \t\r\n\0')

+ 

+              proc_path = os.path.join('/proc/', pid)

+              self.assertTrue(os.path.exists(proc_path))

+ 

+              process = psutil.Process(int(pid))

+              self.assertEqual(process.name(), 'iperf3')

+ 

+              f.close()

+ 

+     def test_basic_udp_client_default_port_5201(self):

+ 

+         client_output = subprocess.check_output(['iperf3', '-c', '127.0.0.1', '-u']).rstrip().decode('utf-8')

+         self.assertRegex(client_output, CLIENT_CONNECTED_TO_SERVER_PORT_5201_MSG)

+         self.assertRegex(client_output, 'Total Datagrams')

+         self.assertRegex(client_output, CLIENT_TEST_COMPLETE_MSG)

+ 

+         self.findTextInServerLog(test1=SERVER_LISTENING_PORT_5201_MSG,

+                                  test2=SERVER_INCOMING_CONNECTION_MSG,

+                                  test3=SERVER_CONNECTED_LOCAL_PORT_5201_WITH_REMOTE_PORT_MSG,

+                                  test4=SERVER_TEST_PROTOCOL_UDP_MSG,

+                                  test5=TEST_COMPLETE)

+ 

+ if __name__ == '__main__':

+     unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,

+                                                      verbosity=2))

@@ -0,0 +1,73 @@

+ #!/bin/bash

+ # vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   runtest.sh of iperf3

+ #   Description: iPerf3 is a tool for active measurements of the maximum

+ #   achievable bandwidth on IP networks.

+ #   Author: Susant Sahani <susant@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2018 Red Hat, Inc.

+ #

+ #   This copyrighted material is made available to anyone wishing

+ #   to use, modify, copy, or redistribute it subject to the terms

+ #   and conditions of the GNU General Public License version 2.

+ #

+ #   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, write to the Free

+ #   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

+ #   Boston, MA 02110-1301, USA.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ # Include Beaker environment

+ . /usr/share/beakerlib/beakerlib.sh || exit 1

+ 

+ PACKAGE="iperf3"

+ Iperf3PidFile="/var/run/iperf3-test-pid"

+ 

+ rlJournalStart

+     rlPhaseStartSetup

+         rlAssertRpm $PACKAGE

+ 

+         if pgrep -x "iperf3" > /dev/null

+         then

+             rlLog "Iperf3 is already Running"

+         fi

+ 

+         rlRun "cp iperf3-test.py /usr/bin/"

+     rlPhaseEnd

+ 

+     rlPhaseStartTest

+         rlLog "iperf3 tests"

+         rlRun "/usr/bin/python3 /usr/bin/iperf3-test.py"

+     rlPhaseEnd

+ 

+     rlPhaseStartCleanup

+         rlRun "rm /usr/bin/iperf3-test.py"

+ 

+         if [ -f "$Iperf3PidFile" ]

+         then

+             rlRun "read Iperf3Pid < $Iperf3PidFile"

+             rlRun "echo $Iperf3Pid"

+ 

+             if [ -z $Iperf3Pid ]

+             then

+                 rlRun "kill -9 $Iperf3Pid"

+                 rlRun "rm Iperf3PidFile"

+             fi

+         fi

+ 

+         rlLog "iperf3 tests done"

+     rlPhaseEnd

+ rlJournalPrintText

+ rlJournalEnd

+ 

+ rlGetTestState

file added
+11

@@ -0,0 +1,11 @@

+ - hosts: localhost

+   roles:

+     - role: standard-test-beakerlib

+       tags:

+         - classic

+       tests:

+         - miscellaneous-tests

+       required_packages:

+         - iperf3

+         - python3

+         - net-tools

Justification
Adds tests according to the CI wiki specifically the standard test interface in the spec.
The playbook includes Tier1 level test cases that have been tested in the following contexts and
is passing reliably: Classic. Test logs are stored in the artifacts directory.
The following steps are used to execute the tests using the standard test interface:

Test enveronment
Make sure you have installed packages from the spec

ansible-2.4.1.0-2.fc27.noarch
python2-dnf-2.7.5-1.fc27.noarch
libselinux-python-2.7-2.fc27.x86_64
standard-test-roles-2.5-1.fc27.noarch
Run tests for Classic
Snip of the example test run for Classic tests:
posix           on

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   TEST PROTOCOL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    Package       : iperf3
    Installed     : iperf3-3.5-1.fc29.x86_64
    beakerlib RPM : beakerlib-1.17-13.fc29.noarch
    Test started  : 2018-04-30 12:21:09 UTC
    Test finished :
    Test duration :
    Test name     : miscellaneous-tests
    Distro        : Fedora release 29 (Rawhide)
    Hostname      : localhost
    Architecture  : x86_64
    CPUs          : 1 x Westmere E56xx/L56xx/X56xx (Nehalem-C)
    RAM size      : 5938 MB
    HDD size      : 39.12 GB
:: [ 12:21:09 ] :: [ WARNING  ] :: POSIX mode detected and switched off
:: [ 12:21:09 ] :: [ WARNING  ] :: POSIX mode detected and switched off
:: [ 12:21:09 ] :: [ WARNING  ] :: Please fix your test to have /bin/bash shebang
:: [ 12:21:09 ] :: [ WARNING  ] :: Please fix your test to have /bin/bash shebang

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Setup
::   Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [   PASS   ] :: Checking for the presence of iperf3 rpm
:: [ 12:21:09 ] :: [   PASS   ] :: Checking for the presence of iperf3 rpm
:: [ 12:21:09 ] :: [   LOG    ] :: Package versions:
:: [ 12:21:09 ] :: [   LOG    ] :: Package versions:
:: [ 12:21:09 ] :: [   LOG    ] ::   iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [   LOG    ] ::   iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [  BEGIN   ] :: Running 'cp iperf3-test.py /usr/bin/'
:: [ 12:21:09 ] :: [   PASS   ] :: Command 'cp iperf3-test.py /usr/bin/' (Expected 0, got 0)
:: [ 12:21:09 ] :: [   PASS   ] :: Command 'cp iperf3-test.py /usr/bin/' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Duration: 0s
::   Assertions: 2 good, 0 bad
::   Assertions: 2 good, 0 bad
::   RESULT: PASS
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Test
::   Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:21:09 ] :: [   LOG    ] :: iperf3 tests
:: [ 12:21:09 ] :: [   LOG    ] :: iperf3 tests
:: [ 12:21:09 ] :: [  BEGIN   ] :: Running '/usr/bin/python3 /usr/bin/iperf3-test.py'
test_basic_tcp_client_default_port_5201 (__main__.Iperf3SanityTests) ... ok
test_basic_udp_client_default_port_5201 (__main__.Iperf3SanityTests) ... ok
test_server_daemon_pid_equal_to_pid_file (__main__.Iperf3SanityTests) ... ok
test_server_log_file_exists (__main__.Iperf3SanityTests) ... ok
test_server_pid_file_exists (__main__.Iperf3SanityTests) ... ok
test_tcp_client_custom_port_5202 (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_custom_client_port (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_dscp (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_get_server_output (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_mss (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_parallel (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_reverse (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_time_15sec (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_title (__main__.Iperf3Tests) ... ok
test_tcp_client_port_5202_ipv6 (__main__.Iperf3Tests) ... ok
test_udp_client_custom_port_5202 (__main__.Iperf3Tests) ... ok
test_udp_client_port_5202_ipv6 (__main__.Iperf3Tests) ... ok
test_tcp_client_bind_to_interface_default_port (__main__.Iperf3TestsBindToInterface) ... ok

----------------------------------------------------------------------
Ran 18 tests in 266.543s

OK
:: [ 12:25:36 ] :: [   PASS   ] :: Command '/usr/bin/python3 /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   PASS   ] :: Command '/usr/bin/python3 /usr/bin/iperf3-test.py' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 267s
::   Duration: 267s
::   Assertions: 1 good, 0 bad
::   Assertions: 1 good, 0 bad
::   RESULT: PASS
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Cleanup
::   Cleanup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:25:36 ] :: [  BEGIN   ] :: Running 'rm /usr/bin/iperf3-test.py'
:: [ 12:25:36 ] :: [   PASS   ] :: Command 'rm /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   PASS   ] :: Command 'rm /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   LOG    ] :: iperf3 tests done
:: [ 12:25:36 ] :: [   LOG    ] :: iperf3 tests done
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Duration: 0s
::   Assertions: 1 good, 0 bad
::   Assertions: 1 good, 0 bad
::   RESULT: PASS
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   TEST PROTOCOL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    Package       : iperf3
    Installed     : iperf3-3.5-1.fc29.x86_64
    beakerlib RPM : beakerlib-1.17-13.fc29.noarch
    Test started  : 2018-04-30 12:21:09 UTC
    Test finished : 2018-04-30 12:25:36 UTC (still running)
    Test duration : 267 seconds
    Test name     : miscellaneous-tests
    Distro        : Fedora release 29 (Rawhide)
    Hostname      : localhost
    Architecture  : x86_64
    CPUs          : 1 x Westmere E56xx/L56xx/X56xx (Nehalem-C)
    RAM size      : 5938 MB
    HDD size      : 39.12 GB
:: [ 12:21:09 ] :: [ WARNING  ] :: POSIX mode detected and switched off
:: [ 12:21:09 ] :: [ WARNING  ] :: Please fix your test to have /bin/bash shebang

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:21:09 ] :: [   PASS   ] :: Checking for the presence of iperf3 rpm
:: [ 12:21:09 ] :: [   LOG    ] :: Package versions:
:: [ 12:21:09 ] :: [   LOG    ] ::   iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [   PASS   ] :: Command 'cp iperf3-test.py /usr/bin/' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Assertions: 2 good, 0 bad
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:21:09 ] :: [   LOG    ] :: iperf3 tests
:: [ 12:25:36 ] :: [   PASS   ] :: Command '/usr/bin/python3 /usr/bin/iperf3-test.py' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 267s
::   Assertions: 1 good, 0 bad
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Cleanup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:25:36 ] :: [   PASS   ] :: Command 'rm /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   LOG    ] :: iperf3 tests done
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Assertions: 1 good, 0 bad
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   miscellaneous-tests
::   miscellaneous-tests
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL XML: /var/tmp/beakerlib-oMWxgE1/journal.xml
:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL XML: /var/tmp/beakerlib-oMWxgE1/journal.xml
:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL TXT: /var/tmp/beakerlib-oMWxgE1/journal.txt
:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL TXT: /var/tmp/beakerlib-oMWxgE1/journal.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 267s
::   Duration: 267s
::   Phases: 3 good, 0 bad
::   Phases: 3 good, 0 bad
::   OVERALL RESULT: PASS
::   OVERALL RESULT: PASS

posix           on

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   TEST PROTOCOL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    Package       : iperf3
    Installed     : iperf3-3.5-1.fc29.x86_64
    beakerlib RPM : beakerlib-1.17-13.fc29.noarch
    Test started  : 2018-04-30 12:21:09 UTC
    Test finished :
    Test duration :
    Test name     : miscellaneous-tests
    Distro        : Fedora release 29 (Rawhide)
    Hostname      : localhost
    Architecture  : x86_64
    CPUs          : 1 x Westmere E56xx/L56xx/X56xx (Nehalem-C)
    RAM size      : 5938 MB
    HDD size      : 39.12 GB
:: [ 12:21:09 ] :: [ WARNING  ] :: POSIX mode detected and switched off
:: [ 12:21:09 ] :: [ WARNING  ] :: POSIX mode detected and switched off
:: [ 12:21:09 ] :: [ WARNING  ] :: Please fix your test to have /bin/bash shebang
:: [ 12:21:09 ] :: [ WARNING  ] :: Please fix your test to have /bin/bash shebang

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Setup
::   Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [   PASS   ] :: Checking for the presence of iperf3 rpm
:: [ 12:21:09 ] :: [   PASS   ] :: Checking for the presence of iperf3 rpm
:: [ 12:21:09 ] :: [   LOG    ] :: Package versions:
:: [ 12:21:09 ] :: [   LOG    ] :: Package versions:
:: [ 12:21:09 ] :: [   LOG    ] ::   iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [   LOG    ] ::   iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [  BEGIN   ] :: Running 'cp iperf3-test.py /usr/bin/'
:: [ 12:21:09 ] :: [   PASS   ] :: Command 'cp iperf3-test.py /usr/bin/' (Expected 0, got 0)
:: [ 12:21:09 ] :: [   PASS   ] :: Command 'cp iperf3-test.py /usr/bin/' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Duration: 0s
::   Assertions: 2 good, 0 bad
::   Assertions: 2 good, 0 bad
::   RESULT: PASS
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Test
::   Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:21:09 ] :: [   LOG    ] :: iperf3 tests
:: [ 12:21:09 ] :: [   LOG    ] :: iperf3 tests
:: [ 12:21:09 ] :: [  BEGIN   ] :: Running '/usr/bin/python3 /usr/bin/iperf3-test.py'
test_basic_tcp_client_default_port_5201 (__main__.Iperf3SanityTests) ... ok
test_basic_udp_client_default_port_5201 (__main__.Iperf3SanityTests) ... ok
test_server_daemon_pid_equal_to_pid_file (__main__.Iperf3SanityTests) ... ok
test_server_log_file_exists (__main__.Iperf3SanityTests) ... ok
test_server_pid_file_exists (__main__.Iperf3SanityTests) ... ok
test_tcp_client_custom_port_5202 (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_custom_client_port (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_dscp (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_get_server_output (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_mss (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_parallel (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_reverse (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_time_15sec (__main__.Iperf3Tests) ... ok
test_tcp_client_custom_port_5202_title (__main__.Iperf3Tests) ... ok
test_tcp_client_port_5202_ipv6 (__main__.Iperf3Tests) ... ok
test_udp_client_custom_port_5202 (__main__.Iperf3Tests) ... ok
test_udp_client_port_5202_ipv6 (__main__.Iperf3Tests) ... ok
test_tcp_client_bind_to_interface_default_port (__main__.Iperf3TestsBindToInterface) ... ok

----------------------------------------------------------------------
Ran 18 tests in 266.543s

OK
:: [ 12:25:36 ] :: [   PASS   ] :: Command '/usr/bin/python3 /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   PASS   ] :: Command '/usr/bin/python3 /usr/bin/iperf3-test.py' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 267s
::   Duration: 267s
::   Assertions: 1 good, 0 bad
::   Assertions: 1 good, 0 bad
::   RESULT: PASS
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Cleanup
::   Cleanup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:25:36 ] :: [  BEGIN   ] :: Running 'rm /usr/bin/iperf3-test.py'
:: [ 12:25:36 ] :: [   PASS   ] :: Command 'rm /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   PASS   ] :: Command 'rm /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   LOG    ] :: iperf3 tests done
:: [ 12:25:36 ] :: [   LOG    ] :: iperf3 tests done
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Duration: 0s
::   Assertions: 1 good, 0 bad
::   Assertions: 1 good, 0 bad
::   RESULT: PASS
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   TEST PROTOCOL
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    Package       : iperf3
    Installed     : iperf3-3.5-1.fc29.x86_64
    beakerlib RPM : beakerlib-1.17-13.fc29.noarch
    Test started  : 2018-04-30 12:21:09 UTC
    Test finished : 2018-04-30 12:25:36 UTC (still running)
    Test duration : 267 seconds
    Test name     : miscellaneous-tests
    Distro        : Fedora release 29 (Rawhide)
    Hostname      : localhost
    Architecture  : x86_64
    CPUs          : 1 x Westmere E56xx/L56xx/X56xx (Nehalem-C)
    RAM size      : 5938 MB
    HDD size      : 39.12 GB
:: [ 12:21:09 ] :: [ WARNING  ] :: POSIX mode detected and switched off
:: [ 12:21:09 ] :: [ WARNING  ] :: Please fix your test to have /bin/bash shebang

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Setup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:21:09 ] :: [   PASS   ] :: Checking for the presence of iperf3 rpm
:: [ 12:21:09 ] :: [   LOG    ] :: Package versions:
:: [ 12:21:09 ] :: [   LOG    ] ::   iperf3-3.5-1.fc29.x86_64
:: [ 12:21:09 ] :: [   PASS   ] :: Command 'cp iperf3-test.py /usr/bin/' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Assertions: 2 good, 0 bad
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Test
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:21:09 ] :: [   LOG    ] :: iperf3 tests
:: [ 12:25:36 ] :: [   PASS   ] :: Command '/usr/bin/python3 /usr/bin/iperf3-test.py' (Expected 0, got 0)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 267s
::   Assertions: 1 good, 0 bad
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Cleanup
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:25:36 ] :: [   PASS   ] :: Command 'rm /usr/bin/iperf3-test.py' (Expected 0, got 0)
:: [ 12:25:36 ] :: [   LOG    ] :: iperf3 tests done
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 0s
::   Assertions: 1 good, 0 bad
::   RESULT: PASS

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   miscellaneous-tests
::   miscellaneous-tests
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL XML: /var/tmp/beakerlib-oMWxgE1/journal.xml
:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL XML: /var/tmp/beakerlib-oMWxgE1/journal.xml
:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL TXT: /var/tmp/beakerlib-oMWxgE1/journal.txt
:: [ 12:25:36 ] :: [   LOG    ] :: JOURNAL TXT: /var/tmp/beakerlib-oMWxgE1/journal.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::   Duration: 267s
::   Duration: 267s
::   Phases: 3 good, 0 bad
::   Phases: 3 good, 0 bad
::   OVERALL RESULT: PASS
::   OVERALL RESULT: PASS

Tested by : Bruno Goncalves bgoncalv@redhat.com

@kevin Could you please take a look

rebased onto f0586fd

a year ago

rebased onto 151d610

a year ago

Looks good to me. Should I also do a rawhide build? Or just wait for the next release?

Pull-Request has been merged by kevin

a year ago

Thanks ! I don't think build is required . we just have to run the tests before any release.