Merge ~kissiel/plainbox-provider-checkbox:iperf-fixes into plainbox-provider-checkbox:master

Proposed by Maciej Kisielewski
Status: Merged
Approved by: Maciej Kisielewski
Approved revision: d904ac30495d0e1acacfbc7ba6eec279aab71083
Merged at revision: 77ccfaf23a429fb9a8dc6292079ddb13b9daca47
Proposed branch: ~kissiel/plainbox-provider-checkbox:iperf-fixes
Merge into: plainbox-provider-checkbox:master
Diff against target: 91 lines (+31/-19)
2 files modified
bin/network.py (+25/-19)
units/ethernet/test-plan.pxu (+6/-0)
Reviewer Review Type Date Requested Status
Jonathan Cave (community) Approve
Review via email: mp+403199@code.launchpad.net

Description of the change

This MR brings fixes iperf testing for commercial projects.
See individual commits for details.

To post a comment you must log in.
Revision history for this message
Jonathan Cave (jocave) wrote :

I think previously we had discussed a resource manager type design that would try to catch crashes/errors and restore the initial state. Was that idea rejected for some reason?

Revision history for this message
Maciej Kisielewski (kissiel) wrote :

> I think previously we had discussed a resource manager type design that would
> try to catch crashes/errors and restore the initial state. Was that idea
> rejected for some reason?

Not rejected, but ... scheduled for a later date.
With all the things happening, I wanted to fix the most annoying problem first.

The 'architecture' of network.py makes any major refactor a significant undertaking. I don't know if it's of the highest priority.

Revision history for this message
Jonathan Cave (jocave) wrote :

Thanks, I'm ok with that approach. Code looks good to me.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/bin/network.py b/bin/network.py
index 60f7b0a..3ed4770 100755
--- a/bin/network.py
+++ b/bin/network.py
@@ -631,18 +631,19 @@ def interface_test(args):
631631
632 error_number = 0632 error_number = 0
633 # Stop all other interfaces633 # Stop all other interfaces
634 extra_interfaces = \634 if not args.dont_toggle_ifaces:
635 [iface for iface in os.listdir("/sys/class/net")635 extra_interfaces = \
636 if iface != "lo" and iface != args.interface]636 [iface for iface in os.listdir("/sys/class/net")
637 if iface != "lo" and iface != args.interface]
637638
638 for iface in extra_interfaces:639 for iface in extra_interfaces:
639 logging.debug("Shutting down interface:%s", iface)640 logging.debug("Shutting down interface:%s", iface)
640 try:641 try:
641 check_call(["ip", "link", "set", "dev", iface, "down"])642 check_call(["ip", "link", "set", "dev", iface, "down"])
642 except CalledProcessError as interface_failure:643 except CalledProcessError as interface_failure:
643 logging.error("Failed to shut down %s:%s",644 logging.error("Failed to shut down %s:%s",
644 iface, interface_failure)645 iface, interface_failure)
645 error_number = 3646 error_number = 3
646647
647 if error_number == 0:648 if error_number == 0:
648 start_time = datetime.datetime.now()649 start_time = datetime.datetime.now()
@@ -664,14 +665,16 @@ def interface_test(args):
664 time.sleep(30)665 time.sleep(30)
665 first_loop = False666 first_loop = False
666667
667 for iface in extra_interfaces:668 if not args.dont_toggle_ifaces:
668 logging.debug("Restoring interface:%s", iface)669 for iface in extra_interfaces:
669 try:670 logging.debug("Restoring interface:%s", iface)
670 check_call(["ip", "link", "set", "dev", iface, "up"])671 try:
671 wait_for_iface_up(iface, args.iface_timeout)672 check_call(["ip", "link", "set", "dev", iface, "up"])
672 except CalledProcessError as interface_failure:673 wait_for_iface_up(iface, args.iface_timeout)
673 logging.error("Failed to restore %s:%s", iface, interface_failure)674 except CalledProcessError as interface_failure:
674 error_number = 3675 logging.error(
676 "Failed to restore %s:%s", iface, interface_failure)
677 error_number = 3
675678
676 # Restore routing table to original state679 # Restore routing table to original state
677 temp.seek(0)680 temp.seek(0)
@@ -833,6 +836,9 @@ TEST_TARGET_IPERF = iperf-server.example.com
833 test_parser.add_argument(836 test_parser.add_argument(
834 '--reverse', default=False, action="store_true",837 '--reverse', default=False, action="store_true",
835 help="Run in reverse mode (server sends, client receives)")838 help="Run in reverse mode (server sends, client receives)")
839 test_parser.add_argument(
840 '--dont-toggle-ifaces', default=False, action="store_true",
841 help="Do not turn of other interfaces while testing.")
836842
837 # Sub info options843 # Sub info options
838 info_parser.add_argument(844 info_parser.add_argument(
diff --git a/units/ethernet/test-plan.pxu b/units/ethernet/test-plan.pxu
index 5e003ae..cfc23bd 100644
--- a/units/ethernet/test-plan.pxu
+++ b/units/ethernet/test-plan.pxu
@@ -68,6 +68,9 @@ include:
68 ethernet/ethtool_info68 ethernet/ethtool_info
69 ethernet/ethertool_check_.*69 ethernet/ethertool_check_.*
70 ethernet/multi_iperf3_nic_device.*70 ethernet/multi_iperf3_nic_device.*
71bootstrap_include:
72 device
73 executable
7174
72id: server-ethernet-underspeed75id: server-ethernet-underspeed
73unit: test plan76unit: test plan
@@ -79,3 +82,6 @@ include:
79 ethernet/ethtool_info82 ethernet/ethtool_info
80 ethernet/ethertool_check_.*83 ethernet/ethertool_check_.*
81 ethernet/multi_iperf3_nic_underspeed_device.*84 ethernet/multi_iperf3_nic_underspeed_device.*
85bootstrap_include:
86 device
87 executable

Subscribers

People subscribed via source and target branches