Exclude fixed offload types from tests

Closes-Bug #1529070

Change-Id: Ib13c376ff96b2f769c6731f61f38cffa9779956e
This commit is contained in:
zatserklyany 2015-12-29 22:44:36 +02:00
parent bf3b7d58a6
commit 55f0dd1334
3 changed files with 178 additions and 141 deletions

View File

@ -1353,6 +1353,16 @@ class FuelWebClient(object):
for node in nailgun_nodes:
self.update_node_networks(node['id'], assigned_networks)
@logwrap
def get_offloading_modes(self, node_id, interfaces):
offloading_types = []
for i in self.client.get_node_interfaces(node_id):
for interface in interfaces:
if i['name'] == interface:
for offloading_type in i['offloading_modes']:
offloading_types.append(offloading_type['name'])
return offloading_types
@logwrap
def update_offloads(self, node_id, update_values, interface_to_update):
interfaces = self.client.get_node_interfaces(node_id)

View File

@ -15,6 +15,7 @@
from copy import deepcopy
from proboscis.asserts import assert_equal
from proboscis.asserts import assert_true
from proboscis import test
from fuelweb_test.helpers.checkers import check_offload
@ -27,11 +28,13 @@ from fuelweb_test.tests.test_bonding_base import BondingTest
@test(groups=["bonding_ha_one_controller", "bonding"])
class TestOffloading(BondingTest):
bond0_offloading_types = ['generic-receive-offload',
'generic-segmentation-offload',
'tcp-segmentation-offload']
offloadings_1 = ['generic-receive-offload',
'generic-segmentation-offload',
'tcp-segmentation-offload']
bond1_offloading_types = ['rx-all']
offloadings_2 = ['rx-all',
'rx-vlan-offload',
'tx-vlan-offload']
def prepare_offloading_modes(self, interfaces, offloading_types, state):
modes = [{'name': name, 'state': state} for name in offloading_types]
@ -83,22 +86,36 @@ class TestOffloading(BondingTest):
}
)
self.show_step(4)
bond0_interfaces = self.get_bond_interfaces(self.BOND_CONFIG, 'bond0')
offloading_modes = self.prepare_offloading_modes(
['bond0'], self.bond0_offloading_types, 'false')
bond1_interfaces = self.get_bond_interfaces(self.BOND_CONFIG, 'bond1')
offloading_modes += self.prepare_offloading_modes(
['bond1'], self.bond1_offloading_types, 'true')
nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
self.show_step(4)
bond0 = self.get_bond_interfaces(self.BOND_CONFIG, 'bond0')
bond1 = self.get_bond_interfaces(self.BOND_CONFIG, 'bond1')
offloadings_1 = []
offloadings_2 = []
for node in nodes:
modes = self.fuel_web.get_offloading_modes(node['id'], bond0)
for name in self.offloadings_1:
if name in modes and name not in offloadings_1:
offloadings_1.append(name)
modes = self.fuel_web.get_offloading_modes(node['id'], bond1)
for name in self.offloadings_2:
if name in modes and name not in offloadings_2:
offloadings_2.append(name)
assert_true(len(offloadings_1) > 0, "No types for disable offloading")
assert_true(len(offloadings_2) > 0, "No types for enable offloading")
modes = self.prepare_offloading_modes(['bond0'], offloadings_1, False)
modes += self.prepare_offloading_modes(['bond1'], offloadings_2, True)
self.show_step(5)
for node in nodes:
self.fuel_web.update_node_networks(
node['id'],
interfaces_dict=deepcopy(self.INTERFACES),
raw_data=deepcopy(self.BOND_CONFIG))
for offloading in offloading_modes:
for offloading in modes:
self.fuel_web.update_offloads(
node['id'], deepcopy(offloading), offloading['name'])
@ -112,16 +129,16 @@ class TestOffloading(BondingTest):
self.show_step(9)
for node in nodes:
for eth in bond0_interfaces:
for name in self.bond0_offloading_types:
for eth in bond0:
for name in offloadings_1:
with self.env.d_env.get_ssh_to_remote(node['ip']) as host:
result = check_offload(host, eth, name)
assert_equal(
result, 'off',
"Offload type '{0}': '{1}' - node-{2}, {3}".format(
name, result, node['id'], eth))
for eth in bond1_interfaces:
for name in self.bond1_offloading_types:
for eth in bond1:
for name in offloadings_2:
with self.env.d_env.get_ssh_to_remote(node['ip']) as host:
result = check_offload(host, eth, name)
assert_equal(
@ -179,22 +196,36 @@ class TestOffloading(BondingTest):
}
)
self.show_step(4)
bond0_interfaces = self.get_bond_interfaces(self.BOND_CONFIG, 'bond0')
offloading_modes = self.prepare_offloading_modes(
['bond0'], self.bond0_offloading_types, 'false')
bond1_interfaces = self.get_bond_interfaces(self.BOND_CONFIG, 'bond1')
offloading_modes += self.prepare_offloading_modes(
['bond1'], self.bond1_offloading_types, 'true')
nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
self.show_step(4)
bond0 = self.get_bond_interfaces(self.BOND_CONFIG, 'bond0')
bond1 = self.get_bond_interfaces(self.BOND_CONFIG, 'bond1')
offloadings_1 = []
offloadings_2 = []
for node in nodes:
modes = self.fuel_web.get_offloading_modes(node['id'], bond0)
for name in self.offloadings_1:
if name in modes and name not in offloadings_1:
offloadings_1.append(name)
modes = self.fuel_web.get_offloading_modes(node['id'], bond1)
for name in self.offloadings_2:
if name in modes and name not in offloadings_2:
offloadings_2.append(name)
assert_true(len(offloadings_1) > 0, "No types for disable offloading")
assert_true(len(offloadings_2) > 0, "No types for enable offloading")
modes = self.prepare_offloading_modes(['bond0'], offloadings_1, False)
modes += self.prepare_offloading_modes(['bond1'], offloadings_2, True)
self.show_step(5)
for node in nodes:
self.fuel_web.update_node_networks(
node['id'],
interfaces_dict=deepcopy(self.INTERFACES),
raw_data=deepcopy(self.BOND_CONFIG))
for offloading in offloading_modes:
for offloading in modes:
self.fuel_web.update_offloads(
node['id'], deepcopy(offloading), offloading['name'])
@ -208,16 +239,16 @@ class TestOffloading(BondingTest):
self.show_step(9)
for node in nodes:
for eth in bond0_interfaces:
for name in self.bond0_offloading_types:
for eth in bond0:
for name in offloadings_1:
with self.env.d_env.get_ssh_to_remote(node['ip']) as host:
result = check_offload(host, eth, name)
assert_equal(
result, 'off',
"Offload type '{0}': '{1}' - node-{2}, {3}".format(
name, result, node['id'], eth))
for eth in bond1_interfaces:
for name in self.bond1_offloading_types:
for eth in bond1:
for name in offloadings_2:
with self.env.d_env.get_ssh_to_remote(node['ip']) as host:
result = check_offload(host, eth, name)
assert_equal(

View File

@ -15,13 +15,12 @@
from copy import deepcopy
from proboscis.asserts import assert_equal
from proboscis.asserts import assert_true
from proboscis import test
from fuelweb_test.helpers.checkers import check_offload
from fuelweb_test.helpers.decorators import log_snapshot_after_test
from fuelweb_test import logger
from fuelweb_test.settings import DEPLOYMENT_MODE
from fuelweb_test.settings import iface_alias
from fuelweb_test import settings
from fuelweb_test.tests.base_test_case import SetupEnvironment
from fuelweb_test.tests.base_test_case import TestBasic
@ -29,6 +28,27 @@ from fuelweb_test.tests.base_test_case import TestBasic
@test(groups=["offloading"])
class TestOffloading(TestBasic):
interfaces = {
settings.iface_alias('eth1'): ['public'],
settings.iface_alias('eth2'): ['management'],
settings.iface_alias('eth3'): ['private'],
settings.iface_alias('eth4'): ['storage'],
}
offloadings_1 = ['generic-receive-offload',
'generic-segmentation-offload',
'tcp-segmentation-offload',
'large-receive-offload']
offloadings_2 = ['rx-all',
'rx-vlan-offload',
'tx-vlan-offload']
def prepare_offloading_modes(self, interface, types, state):
return [{'name': interface,
'offloading_modes': [{'name': name, 'state': state,
'sub': []} for name in types]}]
@test(depends_on=[SetupEnvironment.prepare_slaves_3],
groups=["offloading_neutron_vlan", "offloading"])
@log_snapshot_after_test
@ -55,35 +75,13 @@ class TestOffloading(TestBasic):
self.show_step(1, initialize=True)
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
mode=DEPLOYMENT_MODE,
mode=settings.DEPLOYMENT_MODE,
settings={
"net_provider": 'neutron',
"net_segment_type": 'vlan',
"net_segment_type": settings.NEUTRON_SEGMENT['vlan'],
}
)
interfaces = {
iface_alias('eth1'): ['public'],
iface_alias('eth2'): ['private'],
iface_alias('eth3'): ['management'],
iface_alias('eth4'): ['storage'],
}
offloading_modes = [{
'name': iface_alias('eth1'),
'offloading_modes': [{
'state': 'true',
'name': 'rx-vlan-offload',
'sub': []}, {
'state': 'true',
'name': 'tx-vlan-offload',
'sub': []}]}, {
'name': iface_alias('eth2'),
'offloading_modes': [{
'state': 'false',
'name': 'large-receive-offload',
'sub': []}]}]
self.show_step(2)
self.show_step(3)
self.fuel_web.update_nodes(
@ -94,14 +92,38 @@ class TestOffloading(TestBasic):
}
)
slave_nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
iface1 = settings.iface_alias('eth3')
iface2 = settings.iface_alias('eth2')
nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
self.show_step(4)
for node in slave_nodes:
self.fuel_web.update_node_networks(node['id'],
deepcopy(interfaces))
for offloading in offloading_modes:
offloadings_1 = []
offloadings_2 = []
for node in nodes:
modes = self.fuel_web.get_offloading_modes(node['id'], [iface1])
for name in self.offloadings_1:
if name in modes and name not in offloadings_1:
offloadings_1.append(name)
modes = self.fuel_web.get_offloading_modes(node['id'], [iface2])
for name in self.offloadings_2:
if name in modes and name not in offloadings_2:
offloadings_2.append(name)
assert_true(len(offloadings_1) > 0, "No types for disable offloading")
assert_true(len(offloadings_2) > 0, "No types for enable offloading")
modes = self.prepare_offloading_modes(iface1, offloadings_1, False)
modes += self.prepare_offloading_modes(iface2, offloadings_2, True)
for node in nodes:
self.fuel_web.update_node_networks(
node['id'],
interfaces_dict=deepcopy(self.interfaces))
for offloading in modes:
self.fuel_web.update_offloads(
node['id'], deepcopy(offloading), offloading['name'])
self.show_step(5)
self.fuel_web.verify_network(cluster_id)
self.show_step(6)
@ -110,32 +132,18 @@ class TestOffloading(TestBasic):
self.fuel_web.verify_network(cluster_id)
self.show_step(8)
nodes = [self.fuel_web.get_nailgun_node_by_name(node)
for node in ['slave-01', 'slave-02', 'slave-03']]
for node in nodes:
with self.env.d_env.get_ssh_to_remote(node['ip']) as remote:
logger.info("Verify Offload types")
result = check_offload(remote,
iface_alias('eth1'),
'rx-vlan-offload')
assert_equal(result, "on",
"Offload type {0} is {1} on remote host"
.format('rx-vlan-offload', result))
result = check_offload(remote,
iface_alias('eth1'),
'tx-vlan-offload')
assert_equal(result, "on",
"Offload type {0} is {1} on remote host"
.format('tx-vlan-offload', result))
result = check_offload(remote,
iface_alias('eth2'),
'large-receive-offload')
assert_equal(result, "off",
"Offload type {0} is {1} on remote host"
.format('large-receive-offload', result))
for name in offloadings_1:
result = check_offload(remote, iface1, name)
assert_equal(result, "off",
"Offload type {0} is {1} on {2}".format(
name, result, node['name']))
for name in offloadings_2:
result = check_offload(remote, iface2, name)
assert_equal(result, "on",
"Offload type {0} is {1} on {2}".format(
name, result, node['name']))
self.show_step(9)
self.fuel_web.run_ostf(cluster_id=cluster_id)
@ -156,8 +164,8 @@ class TestOffloading(TestBasic):
5. Run network verification
6. Deploy the cluster
7. Run network verification
8. Run OSTF
9. Verify offloading modes on nodes
8. Verify offloading modes on nodes
9. Run OSTF
Duration 30m
Snapshot offloading_neutron_vxlan
@ -168,35 +176,13 @@ class TestOffloading(TestBasic):
self.show_step(1, initialize=True)
cluster_id = self.fuel_web.create_cluster(
name=self.__class__.__name__,
mode=DEPLOYMENT_MODE,
mode=settings.DEPLOYMENT_MODE,
settings={
"net_provider": 'neutron',
"net_segment_type": 'tun',
"net_segment_type": settings.NEUTRON_SEGMENT['vlan'],
}
)
interfaces = {
iface_alias('eth1'): ['public'],
iface_alias('eth2'): ['private'],
iface_alias('eth3'): ['management'],
iface_alias('eth4'): ['storage'],
}
offloading_modes = [{
'name': iface_alias('eth1'),
'offloading_modes': [{
'state': 'true',
'name': 'rx-vlan-offload',
'sub': []}, {
'state': 'true',
'name': 'tx-vlan-offload',
'sub': []}]}, {
'name': iface_alias('eth2'),
'offloading_modes': [{
'state': 'false',
'name': 'large-receive-offload',
'sub': []}]}]
self.show_step(2)
self.show_step(3)
self.fuel_web.update_nodes(
@ -207,14 +193,38 @@ class TestOffloading(TestBasic):
}
)
slave_nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
iface1 = settings.iface_alias('eth3')
iface2 = settings.iface_alias('eth2')
nodes = self.fuel_web.client.list_cluster_nodes(cluster_id)
self.show_step(4)
for node in slave_nodes:
self.fuel_web.update_node_networks(node['id'],
deepcopy(interfaces))
for offloading in offloading_modes:
offloadings_1 = []
offloadings_2 = []
for node in nodes:
modes = self.fuel_web.get_offloading_modes(node['id'], [iface1])
for name in self.offloadings_1:
if name in modes and name not in offloadings_1:
offloadings_1.append(name)
modes = self.fuel_web.get_offloading_modes(node['id'], [iface2])
for name in self.offloadings_2:
if name in modes and name not in offloadings_2:
offloadings_2.append(name)
assert_true(len(offloadings_1) > 0, "No types for disable offloading")
assert_true(len(offloadings_2) > 0, "No types for enable offloading")
modes = self.prepare_offloading_modes(iface1, offloadings_1, False)
modes += self.prepare_offloading_modes(iface2, offloadings_2, True)
for node in nodes:
self.fuel_web.update_node_networks(
node['id'],
interfaces_dict=deepcopy(self.interfaces))
for offloading in modes:
self.fuel_web.update_offloads(
node['id'], deepcopy(offloading), offloading['name'])
self.show_step(5)
self.fuel_web.verify_network(cluster_id)
self.show_step(6)
@ -223,32 +233,18 @@ class TestOffloading(TestBasic):
self.fuel_web.verify_network(cluster_id)
self.show_step(8)
nodes = [self.fuel_web.get_nailgun_node_by_name(node)
for node in ['slave-01', 'slave-02', 'slave-03']]
for node in nodes:
with self.env.d_env.get_ssh_to_remote(node['ip']) as remote:
logger.info("Verify Offload types")
result = check_offload(remote,
iface_alias('eth1'),
'rx-vlan-offload')
assert_equal(result, "on",
"Offload type {0} is {1} on remote host"
.format('rx-vlan-offload', result))
result = check_offload(remote,
iface_alias('eth1'),
'tx-vlan-offload')
assert_equal(result, "on",
"Offload type {0} is {1} on remote host"
.format('tx-vlan-offload', result))
result = check_offload(remote,
iface_alias('eth2'),
'large-receive-offload')
assert_equal(result, "off",
"Offload type {0} is {1} on remote host"
.format('large-receive-offload', result))
for name in offloadings_1:
result = check_offload(remote, iface1, name)
assert_equal(result, "off",
"Offload type {0} is {1} on {2}".format(
name, result, node['name']))
for name in offloadings_2:
result = check_offload(remote, iface2, name)
assert_equal(result, "on",
"Offload type {0} is {1} on {2}".format(
name, result, node['name']))
self.show_step(9)
self.fuel_web.run_ostf(cluster_id=cluster_id)