commit 98d533f39741398134837abe504b6961a3f6344d
Author: Jiri Prochazka <jprochaz(a)redhat.com>
Date: Tue Nov 25 16:31:10 2014 +0100
Phase 2 team tests added
First version of phase 2 tests added.
* Tests included:
+ team vs team
+ team vs bond
+ team vs eth
+ 3 VLANs over team
Signed-off-by: Jiri Prochazka <jprochaz(a)redhat.com>
Signed-off-by: Jiri Pirko <jiri(a)resnulli.us>
.../phase2/3_vlans_over_active_backup_team.xml | 102 ++++++++++++++++++
.../phase2/3_vlans_over_round_robin_team.xml | 102 ++++++++++++++++++
.../regression_tests/phase2/3_vlans_over_team.py | 93 +++++++++++++++++
.../phase2/active_backup_double_team.xml | 58 ++++++++++
.../regression_tests/phase2/active_backup_team.xml | 40 +++++++
.../active_backup_team_vs_active_backup_bond.xml | 54 ++++++++++
.../active_backup_team_vs_round_robin_bond.xml | 54 ++++++++++
.../phase2/round_robin_double_team.xml | 58 ++++++++++
.../regression_tests/phase2/round_robin_team.xml | 40 +++++++
.../round_robin_team_vs_active_backup_bond.xml | 54 ++++++++++
.../round_robin_team_vs_round_robin_bond.xml | 54 ++++++++++
recipes/regression_tests/phase2/team_test.py | 110 ++++++++++++++++++++
12 files changed, 819 insertions(+), 0 deletions(-)
---
diff --git a/recipes/regression_tests/phase2/3_vlans_over_active_backup_team.xml
b/recipes/regression_tests/phase2/3_vlans_over_active_backup_team.xml
new file mode 100644
index 0000000..59ff534
--- /dev/null
+++ b/recipes/regression_tests/phase2/3_vlans_over_active_backup_team.xml
@@ -0,0 +1,102 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"activebackup"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="1.2.3.4/24" />
+ </addresses>
+ </team>
+ <vlan id="vlan10">
+ <options>
+ <option name="vlan_tci" value="10" />
+ </options>
+ <slaves>
+ <slave id="test_if" />
+ </slaves>
+ <addresses>
+ <address value="192.168.10.1/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan20">
+ <options>
+ <option name="vlan_tci" value="20" />
+ </options>
+ <slaves>
+ <slave id="test_if" />
+ </slaves>
+ <addresses>
+ <address value="192.168.20.1/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan30">
+ <options>
+ <option name="vlan_tci" value="30" />
+ </options>
+ <slaves>
+ <slave id="test_if" />
+ </slaves>
+ <addresses>
+ <address value="192.168.30.1/24" />
+ </addresses>
+ </vlan>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <vlan id="vlan10">
+ <options>
+ <option name="vlan_tci" value="10" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ </slaves>
+ <addresses>
+ <address value="192.168.10.2/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan20">
+ <options>
+ <option name="vlan_tci" value="20" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ </slaves>
+ <addresses>
+ <address value="192.168.20.2/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan30">
+ <options>
+ <option name="vlan_tci" value="30" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ </slaves>
+ <addresses>
+ <address value="192.168.30.2/24" />
+ </addresses>
+ </vlan>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="3_vlans_over_team.py" />
+</lnstrecipe>
diff --git a/recipes/regression_tests/phase2/3_vlans_over_round_robin_team.xml
b/recipes/regression_tests/phase2/3_vlans_over_round_robin_team.xml
new file mode 100644
index 0000000..0e9f009
--- /dev/null
+++ b/recipes/regression_tests/phase2/3_vlans_over_round_robin_team.xml
@@ -0,0 +1,102 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"roundrobin"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="1.2.3.4/24" />
+ </addresses>
+ </team>
+ <vlan id="vlan10">
+ <options>
+ <option name="vlan_tci" value="10" />
+ </options>
+ <slaves>
+ <slave id="test_if" />
+ </slaves>
+ <addresses>
+ <address value="192.168.10.1/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan20">
+ <options>
+ <option name="vlan_tci" value="20" />
+ </options>
+ <slaves>
+ <slave id="test_if" />
+ </slaves>
+ <addresses>
+ <address value="192.168.20.1/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan30">
+ <options>
+ <option name="vlan_tci" value="30" />
+ </options>
+ <slaves>
+ <slave id="test_if" />
+ </slaves>
+ <addresses>
+ <address value="192.168.30.1/24" />
+ </addresses>
+ </vlan>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <vlan id="vlan10">
+ <options>
+ <option name="vlan_tci" value="10" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ </slaves>
+ <addresses>
+ <address value="192.168.10.2/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan20">
+ <options>
+ <option name="vlan_tci" value="20" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ </slaves>
+ <addresses>
+ <address value="192.168.20.2/24" />
+ </addresses>
+ </vlan>
+ <vlan id="vlan30">
+ <options>
+ <option name="vlan_tci" value="30" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ </slaves>
+ <addresses>
+ <address value="192.168.30.2/24" />
+ </addresses>
+ </vlan>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="3_vlans_over_team.py" />
+</lnstrecipe>
diff --git a/recipes/regression_tests/phase2/3_vlans_over_team.py
b/recipes/regression_tests/phase2/3_vlans_over_team.py
new file mode 100644
index 0000000..645e2cf
--- /dev/null
+++ b/recipes/regression_tests/phase2/3_vlans_over_team.py
@@ -0,0 +1,93 @@
+from lnst.Controller.Task import ctl
+
+# ------
+# SETUP
+# ------
+
+m1 = ctl.get_host("testmachine1")
+m2 = ctl.get_host("testmachine2")
+
+m1.sync_resources(modules=["IcmpPing", "Netperf"])
+m2.sync_resources(modules=["IcmpPing", "Netperf"])
+
+# ------
+# TESTS
+# ------
+
+vlans = ["vlan10", "vlan20", "vlan30"]
+offloads = ["gso", "gro", "tso"]
+
+for vlan1 in vlans:
+ for vlan2 in vlans:
+ ping_mod = ctl.get_module("IcmpPing",
+ options={
+ "addr" : m2.get_ip(vlan2),
+ "count" : 100,
+ "iface" : m1.get_devname(vlan1),
+ "interval" : 0.1
+ })
+ netperf_srv = ctl.get_module("Netperf",
+ options={
+ "role" : "server",
+ "bind" : m1.get_ip(vlan1),
+ })
+ netperf_cli_tcp = ctl.get_module("Netperf",
+ options={
+ "role" : "client",
+ "netperf_server" :
+ m1.get_ip(vlan1),
+ "duration" : 60,
+ "testname" :
"TCP_STREAM",
+ "netperf_opts" :
+ "-L %s" % m2.get_ip(vlan1)
+ })
+ netperf_cli_udp = ctl.get_module("Netperf",
+ options={
+ "role" : "client",
+ "netperf_server" :
+ m1.get_ip(vlan1),
+ "duration" : 60,
+ "testname" :
"UDP_STREAM",
+ "netperf_opts" :
+ "-L %s" % m2.get_ip(vlan1)
+ })
+ for offload in offloads:
+ # These tests should pass
+ # Ping between same VLANs
+ if vlan1 == vlan2:
+ for state in ["on", "off"]:
+ # Offload setup
+ m1.run("ethtool -K %s %s %s" %
(m1.get_devname("eth1"),
+ offload, state))
+ m1.run("ethtool -K %s %s %s" %
(m1.get_devname("eth2"),
+ offload, state))
+ m1.run("ethtool -K %s %s %s" %
(m1.get_devname("eth3"),
+ offload, state))
+ m2.run("ethtool -K %s %s %s" %
(m2.get_devname("eth1"),
+ offload, state))
+ # Ping test
+ m1.run(ping_mod)
+
+ # Netperf test (both TCP and UDP)
+ srv_proc = m1.run(netperf_srv, bg=True)
+ ctl.wait(2)
+ m2.run(netperf_cli_tcp, timeout=65)
+ m2.run(netperf_cli_udp, timeout=65)
+ srv_proc.intr()
+
+ # These tests should fail
+ # Ping across different VLAN
+ elif vlan1 != vlan2:
+ for state in ["on", "off"]:
+ # Offload setup
+ m1.run("ethtool -K %s %s %s" %
(m1.get_devname("eth1"),
+ offload, state))
+ m1.run("ethtool -K %s %s %s" %
(m1.get_devname("eth2"),
+ offload, state))
+ m1.run("ethtool -K %s %s %s" %
(m1.get_devname("eth3"),
+ offload, state))
+ m2.run("ethtool -K %s %s %s" %
(m2.get_devname("eth1"),
+ offload, state))
+
+ # Ping test
+ m1.run(ping_mod, expect="fail")
diff --git a/recipes/regression_tests/phase2/active_backup_double_team.xml
b/recipes/regression_tests/phase2/active_backup_double_team.xml
new file mode 100644
index 0000000..0f98b40
--- /dev/null
+++ b/recipes/regression_tests/phase2/active_backup_double_team.xml
@@ -0,0 +1,58 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"activebackup"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "10:22:33:44:55:66",
+ "runner" : {"name" :
"activebackup"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
+
+
diff --git a/recipes/regression_tests/phase2/active_backup_team.xml
b/recipes/regression_tests/phase2/active_backup_team.xml
new file mode 100644
index 0000000..44a6430
--- /dev/null
+++ b/recipes/regression_tests/phase2/active_backup_team.xml
@@ -0,0 +1,40 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"activebackup"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="test_if" label="tnet">
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </eth>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
diff --git a/recipes/regression_tests/phase2/active_backup_team_vs_active_backup_bond.xml
b/recipes/regression_tests/phase2/active_backup_team_vs_active_backup_bond.xml
new file mode 100644
index 0000000..621a4e8
--- /dev/null
+++ b/recipes/regression_tests/phase2/active_backup_team_vs_active_backup_bond.xml
@@ -0,0 +1,54 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"activebackup"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <bond id="test_if">
+ <options>
+ <option name="mode" value="active-backup"
/>
+ <option name="miimon" value="100" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </bond>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
+
+
diff --git a/recipes/regression_tests/phase2/active_backup_team_vs_round_robin_bond.xml
b/recipes/regression_tests/phase2/active_backup_team_vs_round_robin_bond.xml
new file mode 100644
index 0000000..e7119a7
--- /dev/null
+++ b/recipes/regression_tests/phase2/active_backup_team_vs_round_robin_bond.xml
@@ -0,0 +1,54 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"activebackup"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <bond id="test_if">
+ <options>
+ <option name="mode" value="balance-rr"
/>
+ <option name="miimon" value="100" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </bond>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
+
+
diff --git a/recipes/regression_tests/phase2/round_robin_double_team.xml
b/recipes/regression_tests/phase2/round_robin_double_team.xml
new file mode 100644
index 0000000..fe6bdfe
--- /dev/null
+++ b/recipes/regression_tests/phase2/round_robin_double_team.xml
@@ -0,0 +1,58 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "10:22:33:44:55:66",
+ "runner" : {"name" :
"roundrobin"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"roundrobin"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
+
+
diff --git a/recipes/regression_tests/phase2/round_robin_team.xml
b/recipes/regression_tests/phase2/round_robin_team.xml
new file mode 100644
index 0000000..4a69db9
--- /dev/null
+++ b/recipes/regression_tests/phase2/round_robin_team.xml
@@ -0,0 +1,40 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"roundrobin"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="test_if" label="tnet">
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </eth>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
diff --git a/recipes/regression_tests/phase2/round_robin_team_vs_active_backup_bond.xml
b/recipes/regression_tests/phase2/round_robin_team_vs_active_backup_bond.xml
new file mode 100644
index 0000000..d645f1f
--- /dev/null
+++ b/recipes/regression_tests/phase2/round_robin_team_vs_active_backup_bond.xml
@@ -0,0 +1,54 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"roundrobin"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <bond id="test_if">
+ <options>
+ <option name="mode" value="active-backup"
/>
+ <option name="miimon" value="100" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </bond>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
+
+
diff --git a/recipes/regression_tests/phase2/round_robin_team_vs_round_robin_bond.xml
b/recipes/regression_tests/phase2/round_robin_team_vs_round_robin_bond.xml
new file mode 100644
index 0000000..d134119
--- /dev/null
+++ b/recipes/regression_tests/phase2/round_robin_team_vs_round_robin_bond.xml
@@ -0,0 +1,54 @@
+<lnstrecipe>
+ <network>
+ <host id="testmachine1">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <team id="test_if">
+ <options>
+ <option name="teamd_config">
+ {
+ "hwaddr" : "00:11:22:33:44:55",
+ "runner" : {"name" :
"roundrobin"}
+ }
+ </option>
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.1/24" />
+ </addresses>
+ </team>
+ </interfaces>
+ </host>
+ <host id="testmachine2">
+ <interfaces>
+ <eth id="eth1" label="tnet" />
+ <eth id="eth2" label="tnet" />
+ <eth id="eth3" label="tnet" />
+ <bond id="test_if">
+ <options>
+ <option name="mode" value="balance-rr"
/>
+ <option name="miimon" value="100" />
+ </options>
+ <slaves>
+ <slave id="eth1" />
+ <slave id="eth2" />
+ <slave id="eth3" />
+ </slaves>
+ <addresses>
+ <address value="192.168.0.2/24" />
+ </addresses>
+ </bond>
+ </interfaces>
+ </host>
+ </network>
+
+ <task python="team_test.py" />
+</lnstrecipe>
+
+
diff --git a/recipes/regression_tests/phase2/team_test.py
b/recipes/regression_tests/phase2/team_test.py
new file mode 100644
index 0000000..38e058b
--- /dev/null
+++ b/recipes/regression_tests/phase2/team_test.py
@@ -0,0 +1,110 @@
+from lnst.Controller.Task import ctl
+
+# ------
+# SETUP
+# ------
+
+m1 = ctl.get_host("testmachine1")
+m2 = ctl.get_host("testmachine2")
+
+m1.sync_resources(modules=["IcmpPing", "Netperf"])
+m2.sync_resources(modules=["IcmpPing", "Netperf"])
+
+m1_ip = m1.get_ip("test_if")
+m2_ip = m2.get_ip("test_if")
+
+# ------
+# TESTS
+# ------
+
+offloads = ["tso", "gro", "gso"]
+
+ping_mod = ctl.get_module("IcmpPing",
+ options={
+ "addr" : m2_ip,
+ "count" : 100,
+ "iface" : m1.get_devname("test_if"),
+ "interval" : 0.1
+ })
+
+netperf_srv = ctl.get_module("Netperf",
+ options = {
+ "role" : "server",
+ "bind" : m1_ip
+ })
+
+netperf_cli_tcp = ctl.get_module("Netperf",
+ options = {
+ "role" : "client",
+ "netperf_server" : m1_ip,
+ "duration" : 60,
+ "testname" : "TCP_STREAM",
+ "netperf_opts" : "-L %s" %
m2_ip
+ })
+
+netperf_cli_udp = ctl.get_module("Netperf",
+ options = {
+ "role" : "client",
+ "netperf_server" : m1_ip,
+ "duration" : 60,
+ "testname" : "UDP_STREAM",
+ "netperf_opts" : "-L %s" %
m2_ip
+ })
+for offload in offloads:
+ for state in ["on", "off"]:
+ m1.run("ethtool -K %s %s %s" % (m1.get_devname("test_if"),
offload,
+ state))
+ m2.run("ethtool -K %s %s %s" % (m2.get_devname("test_if"),
offload,
+ state))
+ m1.run(ping_mod)
+ server_proc = m1.run(netperf_srv, bg=True)
+ ctl.wait(2)
+ m2.run(netperf_cli_tcp, timeout=65)
+ m2.run(netperf_cli_udp, timeout=65)
+ server_proc.intr()
+
+ping_mod = ctl.get_module("IcmpPing",
+ options={
+ "addr" : m1_ip,
+ "count" : 100,
+ "iface" : m2.get_devname("test_if"),
+ "interval" : 0.1
+ })
+
+
+netperf_srv = ctl.get_module("Netperf",
+ options = {
+ "role" : "server",
+ "bind" : m2_ip
+ })
+
+netperf_cli_tcp = ctl.get_module("Netperf",
+ options = {
+ "role" : "client",
+ "netperf_server" : m2_ip,
+ "duration" : 60,
+ "testname" : "TCP_STREAM",
+ "netperf_opts" : "-L %s" %
m1_ip
+ })
+
+netperf_cli_udp = ctl.get_module("Netperf",
+ options = {
+ "role" : "client",
+ "netperf_server" : m2_ip,
+ "duration" : 60,
+ "testname" : "UDP_STREAM",
+ "netperf_opts" : "-L %s" %
m1_ip
+ })
+
+for offload in offloads:
+ for state in ["on", "off"]:
+ m1.run("ethtool -K %s %s %s" % (m1.get_devname("test_if"),
offload,
+ state))
+ m2.run("ethtool -K %s %s %s" % (m2.get_devname("test_if"),
offload,
+ state))
+ m2.run(ping_mod)
+ server_proc = m2.run(netperf_srv, bg=True)
+ ctl.wait(2)
+ m1.run(netperf_cli_tcp, timeout=65)
+ m1.run(netperf_cli_udp, timeout=65)
+ server_proc.intr()