This patch removes some code duplicity by using code from the base
and Ping mixin classes.
For pings within the vlan the RatePingEvaluator is used, for cross-vlan
ping the ZeroPassPingEvaluator is used.
Signed-off-by: Jan Tluka <jtluka(a)redhat.com>
---
lnst/Recipes/ENRT/VirtOvsVxlanRecipe.py | 66 +-----------------
.../ENRT/VirtualBridgeVlansOverBondRecipe.py | 68 +------------------
.../VirtualOvsBridgeVlansOverBondRecipe.py | 68 +------------------
lnst/Recipes/ENRT/VlansOverBondRecipe.py | 60 +---------------
lnst/Recipes/ENRT/VlansOverTeamRecipe.py | 60 +---------------
lnst/Recipes/ENRT/VlansRecipe.py | 60 +---------------
6 files changed, 18 insertions(+), 364 deletions(-)
diff --git a/lnst/Recipes/ENRT/VirtOvsVxlanRecipe.py
b/lnst/Recipes/ENRT/VirtOvsVxlanRecipe.py
index fda03f5a..e7fcee1d 100644
--- a/lnst/Recipes/ENRT/VirtOvsVxlanRecipe.py
+++ b/lnst/Recipes/ENRT/VirtOvsVxlanRecipe.py
@@ -4,10 +4,12 @@ from lnst.Controller import HostReq, DeviceReq, RecipeParam
from lnst.Recipes.ENRT.BaseEnrtRecipe import BaseEnrtRecipe
from lnst.Recipes.ENRT.ConfigMixins.CommonHWSubConfigMixin import (
CommonHWSubConfigMixin)
+from lnst.Recipes.ENRT.PingMixins import VlanPingEvaluatorMixin
from lnst.RecipeCommon.Ping.PingEndpoints import PingEndpoints
from lnst.Devices import OvsBridgeDevice
-class VirtOvsVxlanRecipe(CommonHWSubConfigMixin, BaseEnrtRecipe):
+class VirtOvsVxlanRecipe(VlanPingEvaluatorMixin,
+ CommonHWSubConfigMixin, BaseEnrtRecipe):
host1 = HostReq()
host1.eth0 = DeviceReq(label="to_switch",
driver=RecipeParam("driver"))
host1.tap0 = DeviceReq(label="to_guest1")
@@ -155,68 +157,6 @@ class VirtOvsVxlanRecipe(CommonHWSubConfigMixin, BaseEnrtRecipe):
def parallel_stream_qdisc_hw_config_dev_list(self):
return [self.matched.host1.eth0, self.matched.host2.eth0]
- def do_ping_tests(self, recipe_config):
- for ping_config in self.generate_ping_configurations(recipe_config):
- exp_fail = []
- for pconf in ping_config:
- cond = self.tun_id_match(pconf.client_bind,
- pconf.destination_address)
- exp_fail.append(cond)
- result = self.ping_test(ping_config, exp_fail)
- self.ping_evaluate_and_report(result)
-
- def ping_test(self, ping_config, exp_fail):
- results = {}
-
- running_ping_array = []
- for pingconf, fail in zip(ping_config, exp_fail):
- ping, client = self.ping_init(pingconf)
- running_ping = client.prepare_job(ping, fail=fail)
- running_ping.start(bg = True)
- running_ping_array.append((pingconf, running_ping))
-
- for _, pingjob in running_ping_array:
- try:
- pingjob.wait()
- finally:
- pingjob.kill()
-
- for pingconf, pingjob in running_ping_array:
- result = pingjob.result
- passed = pingjob.passed
- results[pingconf] = (result, passed)
-
- return results
-
- def single_ping_evaluate_and_report(self, ping_config, result):
- fmt = "From: <{0.client.hostid} ({0.client_bind})> To: " \
- "<{0.destination.hostid} ({0.destination_address})>"
- description = fmt.format(ping_config)
- if result[0].get("rate", 0) > 50:
- message = "Ping successful --- " + description
- self.add_result(result[1], message, result[0])
- else:
- message = "Ping unsuccessful --- " + description
- self.add_result(result[1], message, result[0])
-
- def tun_id_match(self, src_addr, dst_addr):
- guest1, guest2, guest3, guest4 = (self.matched.guest1,
- self.matched.guest2, self.matched.guest3, self.matched.guest4)
-
- matching_pairs = []
- for pair in [(guest1, guest3), (guest2, guest4)]:
- matching_pairs.extend([pair, pair[::-1]])
-
- devs = []
- for dev in (guest1.devices + guest2.devices + guest3.devices +
- guest4.devices):
- if src_addr in dev.ips or dst_addr in dev.ips:
- devs.append(dev)
- try:
- return (devs[0].host, devs[1].host) not in matching_pairs
- except IndexError:
- return False
-
def hw_config(self, config):
host1, host2, guest1, guest2, guest3, guest4 = (self.matched.host1,
self.matched.host2, self.matched.guest1, self.matched.guest2,
diff --git a/lnst/Recipes/ENRT/VirtualBridgeVlansOverBondRecipe.py
b/lnst/Recipes/ENRT/VirtualBridgeVlansOverBondRecipe.py
index 804dc9c7..6b45e678 100644
--- a/lnst/Recipes/ENRT/VirtualBridgeVlansOverBondRecipe.py
+++ b/lnst/Recipes/ENRT/VirtualBridgeVlansOverBondRecipe.py
@@ -8,13 +8,14 @@ from lnst.Recipes.ENRT.ConfigMixins.OffloadSubConfigMixin import (
OffloadSubConfigMixin)
from lnst.Recipes.ENRT.ConfigMixins.CommonHWSubConfigMixin import (
CommonHWSubConfigMixin)
+from lnst.Recipes.ENRT.PingMixins import VlanPingEvaluatorMixin
from lnst.RecipeCommon.Ping.PingEndpoints import PingEndpoints
from lnst.Devices import VlanDevice
from lnst.Devices import BondDevice
from lnst.Devices import BridgeDevice
-class VirtualBridgeVlansOverBondRecipe(CommonHWSubConfigMixin,
- OffloadSubConfigMixin, BaseEnrtRecipe):
+class VirtualBridgeVlansOverBondRecipe(VlanPingEvaluatorMixin,
+ CommonHWSubConfigMixin, OffloadSubConfigMixin, BaseEnrtRecipe):
host1 = HostReq()
host1.eth0 = DeviceReq(label="to_switch",
driver=RecipeParam("driver"))
host1.eth1 = DeviceReq(label="to_switch",
driver=RecipeParam("driver"))
@@ -195,69 +196,6 @@ class VirtualBridgeVlansOverBondRecipe(CommonHWSubConfigMixin,
self.ctl.wait_for_condition(condition, timeout=5)
- def do_ping_tests(self, recipe_config):
- for ping_config in self.generate_ping_configurations(
- recipe_config):
- exp_fail = []
- for pconf in ping_config:
- cond = self.vlan_id_match(pconf.client_bind,
- pconf.destination_address)
- exp_fail.append(cond)
- result = self.ping_test(ping_config, exp_fail)
- self.ping_evaluate_and_report(result)
-
- def ping_test(self, ping_config, exp_fail):
- results = {}
-
- running_ping_array = []
- for pingconf, fail in zip(ping_config, exp_fail):
- ping, client = self.ping_init(pingconf)
- running_ping = client.prepare_job(ping, fail=fail)
- running_ping.start(bg = True)
- running_ping_array.append((pingconf, running_ping))
-
- for _, pingjob in running_ping_array:
- try:
- pingjob.wait()
- finally:
- pingjob.kill()
-
- for pingconf, pingjob in running_ping_array:
- result = pingjob.result
- passed = pingjob.passed
- results[pingconf] = (result, passed)
-
- return results
-
- def single_ping_evaluate_and_report(self, ping_config, result):
- fmt = "From: <{0.client.hostid} ({0.client_bind})> To: " \
- "<{0.destination.hostid} ({0.destination_address})>"
- description = fmt.format(ping_config)
- if result[0].get("rate", 0) > 50:
- message = "Ping successful --- " + description
- self.add_result(result[1], message, result[0])
- else:
- message = "Ping unsuccessful --- " + description
- self.add_result(result[1], message, result[0])
-
- def vlan_id_match(self, src_addr, dst_addr):
- guest1, guest2, guest3, guest4 = (self.matched.guest1,
- self.matched.guest2, self.matched.guest3, self.matched.guest4)
-
- matching_pairs = []
- for pair in [(guest1, guest3), (guest2, guest4)]:
- matching_pairs.extend([pair, pair[::-1]])
-
- devs = []
- for dev in (guest1.devices + guest2.devices + guest3.devices +
- guest4.devices):
- if src_addr in dev.ips or dst_addr in dev.ips:
- devs.append(dev)
- try:
- return (devs[0].host, devs[1].host) not in matching_pairs
- except IndexError:
- return False
-
@property
def offload_nics(self):
host1, host2, guest1, guest2, guest3, guest4 = (self.matched.host1,
diff --git a/lnst/Recipes/ENRT/VirtualOvsBridgeVlansOverBondRecipe.py
b/lnst/Recipes/ENRT/VirtualOvsBridgeVlansOverBondRecipe.py
index 9e2dfa6d..45f59d07 100644
--- a/lnst/Recipes/ENRT/VirtualOvsBridgeVlansOverBondRecipe.py
+++ b/lnst/Recipes/ENRT/VirtualOvsBridgeVlansOverBondRecipe.py
@@ -8,11 +8,12 @@ from lnst.Recipes.ENRT.ConfigMixins.OffloadSubConfigMixin import (
OffloadSubConfigMixin)
from lnst.Recipes.ENRT.ConfigMixins.CommonHWSubConfigMixin import (
CommonHWSubConfigMixin)
+from lnst.Recipes.ENRT.PingMixins import VlanPingEvaluatorMixin
from lnst.RecipeCommon.Ping.PingEndpoints import PingEndpoints
from lnst.Devices import OvsBridgeDevice
-class VirtualOvsBridgeVlansOverBondRecipe(CommonHWSubConfigMixin,
- OffloadSubConfigMixin, BaseEnrtRecipe):
+class VirtualOvsBridgeVlansOverBondRecipe(VlanPingEvaluatorMixin,
+ CommonHWSubConfigMixin, OffloadSubConfigMixin, BaseEnrtRecipe):
host1 = HostReq()
host1.eth0 = DeviceReq(label="to_switch",
driver=RecipeParam("driver"))
host1.eth1 = DeviceReq(label="to_switch",
driver=RecipeParam("driver"))
@@ -198,66 +199,3 @@ class VirtualOvsBridgeVlansOverBondRecipe(CommonHWSubConfigMixin,
def parallel_stream_qdisc_hw_config_dev_list(self):
return [self.matched.host1.eth0, self.matched.host1.eth1,
self.matched.host2.eth0, self.matched.host2.eth1]
-
- def do_ping_tests(self, recipe_config):
- for ping_config in self.generate_ping_configurations(
- recipe_config):
- exp_fail = []
- for pconf in ping_config:
- cond = self.vlan_id_match(pconf.client_bind,
- pconf.destination_address)
- exp_fail.append(cond)
- result = self.ping_test(ping_config, exp_fail)
- self.ping_evaluate_and_report(result)
-
- def ping_test(self, ping_config, exp_fail):
- results = {}
-
- running_ping_array = []
- for pingconf, fail in zip(ping_config, exp_fail):
- ping, client = self.ping_init(pingconf)
- running_ping = client.prepare_job(ping, fail=fail)
- running_ping.start(bg = True)
- running_ping_array.append((pingconf, running_ping))
-
- for _, pingjob in running_ping_array:
- try:
- pingjob.wait()
- finally:
- pingjob.kill()
-
- for pingconf, pingjob in running_ping_array:
- result = pingjob.result
- passed = pingjob.passed
- results[pingconf] = (result, passed)
-
- return results
-
- def single_ping_evaluate_and_report(self, ping_config, result):
- fmt = "From: <{0.client.hostid} ({0.client_bind})> To: " \
- "<{0.destination.hostid} ({0.destination_address})>"
- description = fmt.format(ping_config)
- if result[0].get("rate", 0) > 50:
- message = "Ping successful --- " + description
- self.add_result(result[1], message, result[0])
- else:
- message = "Ping unsuccessful --- " + description
- self.add_result(result[1], message, result[0])
-
- def vlan_id_match(self, src_addr, dst_addr):
- guest1, guest2, guest3, guest4 = (self.matched.guest1,
- self.matched.guest2, self.matched.guest3, self.matched.guest4)
-
- matching_pairs = []
- for pair in [(guest1, guest3), (guest2, guest4)]:
- matching_pairs.extend([pair, pair[::-1]])
-
- devs = []
- for dev in (guest1.devices + guest2.devices + guest3.devices +
- guest4.devices):
- if src_addr in dev.ips or dst_addr in dev.ips:
- devs.append(dev)
- try:
- return (devs[0].host, devs[1].host) not in matching_pairs
- except IndexError:
- return False
diff --git a/lnst/Recipes/ENRT/VlansOverBondRecipe.py
b/lnst/Recipes/ENRT/VlansOverBondRecipe.py
index 93c62720..69357d94 100644
--- a/lnst/Recipes/ENRT/VlansOverBondRecipe.py
+++ b/lnst/Recipes/ENRT/VlansOverBondRecipe.py
@@ -9,9 +9,11 @@ from lnst.Recipes.ENRT.ConfigMixins.CommonHWSubConfigMixin import (
from lnst.Devices import VlanDevice
from lnst.Devices.VlanDevice import VlanDevice as Vlan
from lnst.Devices import BondDevice
+from lnst.Recipes.ENRT.PingMixins import VlanPingEvaluatorMixin
from lnst.RecipeCommon.Ping.PingEndpoints import PingEndpoints
-class VlansOverBondRecipe(CommonHWSubConfigMixin, OffloadSubConfigMixin,
+class VlansOverBondRecipe(VlanPingEvaluatorMixin,
+ CommonHWSubConfigMixin, OffloadSubConfigMixin,
BaseEnrtRecipe):
host1 = HostReq()
host1.eth0 = DeviceReq(label="net1",
driver=RecipeParam("driver"))
@@ -173,59 +175,3 @@ class VlansOverBondRecipe(CommonHWSubConfigMixin,
OffloadSubConfigMixin,
def parallel_stream_qdisc_hw_config_dev_list(self):
host1, host2 = self.matched.host1, self.matched.host2
return [host1.eth0, host1.eth1, host2.eth0]
-
- def do_ping_tests(self, recipe_config):
- for ping_config in self.generate_ping_configurations(
- recipe_config):
- exp_fail = []
- for pconf in ping_config:
- cond = self.vlan_id_same(pconf.client_bind,
- pconf.destination_address)
- exp_fail.append(cond)
- result = self.ping_test(ping_config, exp_fail)
- self.ping_evaluate_and_report(result)
-
- def ping_test(self, ping_config, exp_fail):
- results = {}
-
- running_ping_array = []
- for pingconf, fail in zip(ping_config, exp_fail):
- ping, client = self.ping_init(pingconf)
- running_ping = client.prepare_job(ping, fail=fail)
- running_ping.start(bg = True)
- running_ping_array.append((pingconf, running_ping))
-
- for _, pingjob in running_ping_array:
- try:
- pingjob.wait()
- finally:
- pingjob.kill()
-
- for pingconf, pingjob in running_ping_array:
- result = pingjob.result
- passed = pingjob.passed
- results[pingconf] = (result, passed)
-
- return results
-
- def single_ping_evaluate_and_report(self, ping_config, result):
- fmt = "From: <{0.client.hostid} ({0.client_bind})> To: " \
- "<{0.destination.hostid} ({0.destination_address})>"
- description = fmt.format(ping_config)
- if result[0].get("rate", 0) > 50:
- message = "Ping successful --- " + description
- self.add_result(result[1], message, result[0])
- else:
- message = "Ping unsuccessful --- " + description
- self.add_result(result[1], message, result[0])
-
- def vlan_id_same(self, src_addr, dst_addr):
- host1, host2 = self.matched.host1, self.matched.host2
- devs = []
- for dev in (host1.devices + host2.devices):
- if src_addr in dev.ips or dst_addr in dev.ips:
- devs.append(dev)
- try:
- return devs[0].vlan_id != devs[1].vlan_id
- except (IndexError, AttributeError):
- return False
diff --git a/lnst/Recipes/ENRT/VlansOverTeamRecipe.py
b/lnst/Recipes/ENRT/VlansOverTeamRecipe.py
index a96b6a94..1ed41312 100644
--- a/lnst/Recipes/ENRT/VlansOverTeamRecipe.py
+++ b/lnst/Recipes/ENRT/VlansOverTeamRecipe.py
@@ -11,8 +11,10 @@ from lnst.RecipeCommon.Ping.PingEndpoints import PingEndpoints
from lnst.Devices import VlanDevice
from lnst.Devices.VlanDevice import VlanDevice as Vlan
from lnst.Devices import TeamDevice
+from lnst.Recipes.ENRT.PingMixins import VlanPingEvaluatorMixin
-class VlansOverTeamRecipe(CommonHWSubConfigMixin, OffloadSubConfigMixin,
+class VlansOverTeamRecipe(VlanPingEvaluatorMixin,
+ CommonHWSubConfigMixin, OffloadSubConfigMixin,
BaseEnrtRecipe):
host1 = HostReq()
host1.eth0 = DeviceReq(label="tnet",
driver=RecipeParam("driver"))
@@ -171,59 +173,3 @@ class VlansOverTeamRecipe(CommonHWSubConfigMixin,
OffloadSubConfigMixin,
def parallel_stream_qdisc_hw_config_dev_list(self):
host1, host2 = self.matched.host1, self.matched.host2
return [host1.eth0, host1.eth1, host2.eth0]
-
- def do_ping_tests(self, recipe_config):
- for ping_config in self.generate_ping_configurations(
- recipe_config):
- exp_fail = []
- for pconf in ping_config:
- cond = self.vlan_id_same(pconf.client_bind,
- pconf.destination_address)
- exp_fail.append(cond)
- result = self.ping_test(ping_config, exp_fail)
- self.ping_evaluate_and_report(result)
-
- def ping_test(self, ping_config, exp_fail):
- results = {}
-
- running_ping_array = []
- for pingconf, fail in zip(ping_config, exp_fail):
- ping, client = self.ping_init(pingconf)
- running_ping = client.prepare_job(ping, fail=fail)
- running_ping.start(bg = True)
- running_ping_array.append((pingconf, running_ping))
-
- for _, pingjob in running_ping_array:
- try:
- pingjob.wait()
- finally:
- pingjob.kill()
-
- for pingconf, pingjob in running_ping_array:
- result = pingjob.result
- passed = pingjob.passed
- results[pingconf] = (result, passed)
-
- return results
-
- def single_ping_evaluate_and_report(self, ping_config, result):
- fmt = "From: <{0.client.hostid} ({0.client_bind})> To: " \
- "<{0.destination.hostid} ({0.destination_address})>"
- description = fmt.format(ping_config)
- if result[0].get("rate", 0) > 50:
- message = "Ping successful --- " + description
- self.add_result(result[1], message, result[0])
- else:
- message = "Ping unsuccessful --- " + description
- self.add_result(result[1], message, result[0])
-
- def vlan_id_same(self, src_addr, dst_addr):
- host1, host2 = self.matched.host1, self.matched.host2
- devs = []
- for dev in (host1.devices + host2.devices):
- if src_addr in dev.ips or dst_addr in dev.ips:
- devs.append(dev)
- try:
- return devs[0].vlan_id != devs[1].vlan_id
- except (IndexError, AttributeError):
- return False
diff --git a/lnst/Recipes/ENRT/VlansRecipe.py b/lnst/Recipes/ENRT/VlansRecipe.py
index 592bc0ac..ddaf1033 100644
--- a/lnst/Recipes/ENRT/VlansRecipe.py
+++ b/lnst/Recipes/ENRT/VlansRecipe.py
@@ -6,10 +6,12 @@ from lnst.Recipes.ENRT.ConfigMixins.OffloadSubConfigMixin import (
OffloadSubConfigMixin)
from lnst.Recipes.ENRT.ConfigMixins.CommonHWSubConfigMixin import (
CommonHWSubConfigMixin)
+from lnst.Recipes.ENRT.PingMixins import VlanPingEvaluatorMixin
from lnst.RecipeCommon.Ping.PingEndpoints import PingEndpoints
from lnst.Devices import VlanDevice
-class VlansRecipe(CommonHWSubConfigMixin, OffloadSubConfigMixin,
+class VlansRecipe(VlanPingEvaluatorMixin,
+ CommonHWSubConfigMixin, OffloadSubConfigMixin,
BaseEnrtRecipe):
host1 = HostReq()
host1.eth0 = DeviceReq(label="net1",
driver=RecipeParam("driver"))
@@ -139,59 +141,3 @@ class VlansRecipe(CommonHWSubConfigMixin, OffloadSubConfigMixin,
@property
def parallel_stream_qdisc_hw_config_dev_list(self):
return [self.matched.host1.eth0, self.matched.host2.eth0]
-
- def do_ping_tests(self, recipe_config):
- for ping_config in self.generate_ping_configurations(
- recipe_config):
- exp_fail = []
- for pconf in ping_config:
- cond = self.vlan_id_same(pconf.client_bind,
- pconf.destination_address)
- exp_fail.append(cond)
- result = self.ping_test(ping_config, exp_fail)
- self.ping_evaluate_and_report(result)
-
- def ping_test(self, ping_config, exp_fail):
- results = {}
-
- running_ping_array = []
- for pingconf, fail in zip(ping_config, exp_fail):
- ping, client = self.ping_init(pingconf)
- running_ping = client.prepare_job(ping, fail=fail)
- running_ping.start(bg = True)
- running_ping_array.append((pingconf, running_ping))
-
- for _, pingjob in running_ping_array:
- try:
- pingjob.wait()
- finally:
- pingjob.kill()
-
- for pingconf, pingjob in running_ping_array:
- result = pingjob.result
- passed = pingjob.passed
- results[pingconf] = (result, passed)
-
- return results
-
- def single_ping_evaluate_and_report(self, ping_config, result):
- fmt = "From: <{0.client.hostid} ({0.client_bind})> To: " \
- "<{0.destination.hostid} ({0.destination_address})>"
- description = fmt.format(ping_config)
- if result[0].get("rate", 0) > 50:
- message = "Ping successful --- " + description
- self.add_result(result[1], message, result[0])
- else:
- message = "Ping unsuccessful --- " + description
- self.add_result(result[1], message, result[0])
-
- def vlan_id_same(self, src_addr, dst_addr):
- host1, host2 = self.matched.host1, self.matched.host2
- devs = []
- for dev in (host1.devices + host2.devices):
- if src_addr in dev.ips or dst_addr in dev.ips:
- devs.append(dev)
- try:
- return devs[0].vlan_id != devs[1].vlan_id
- except (IndexError, AttributeError):
- return False
--
2.21.1