Exclude fixed offload types from tests
Closes-Bug #1529070 Change-Id: Ib13c376ff96b2f769c6731f61f38cffa9779956e
This commit is contained in:
parent
bf3b7d58a6
commit
55f0dd1334
|
@ -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)
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue