From 9b8c9d27ad553c2c475ca45d8411cc906209120b Mon Sep 17 00:00:00 2001 From: Georgy Dyuldin Date: Mon, 27 Feb 2017 14:13:48 +0300 Subject: [PATCH] Add test_network_in_agent_with_server_add_delete Change-Id: Ia4ba683edc3e2b85bbc8686caabc1ca81ded6ddd --- .../vapor/vapor/helpers/agent_steps.py | 29 ++++++++++++++ .../vapor/vapor/tests/common/test_base.py | 40 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 plugin_test/vapor/vapor/helpers/agent_steps.py diff --git a/plugin_test/vapor/vapor/helpers/agent_steps.py b/plugin_test/vapor/vapor/helpers/agent_steps.py new file mode 100644 index 000000000..d84cc2035 --- /dev/null +++ b/plugin_test/vapor/vapor/helpers/agent_steps.py @@ -0,0 +1,29 @@ +"""Assertion helpers.""" + +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import xml.etree.ElementTree as ET + + +def get_vna_vn(session, ip, port, network_fq_name): + """Return a dict with network parameter on agent or None.""" + response = session.get( + 'http://{ip}:{port}/Snh_VnListReq?name={name}'.format( + ip=ip, port=port, name=network_fq_name)) + response.raise_for_status() + tree = ET.fromstring(response.content) + networks = tree.findall('.//list/VnSandeshData') + + for network in networks: + if network.find('name').text in network_fq_name: + return {el.tag: el.text for el in network} diff --git a/plugin_test/vapor/vapor/tests/common/test_base.py b/plugin_test/vapor/vapor/tests/common/test_base.py index 00cb8bfee..8bc92a364 100644 --- a/plugin_test/vapor/vapor/tests/common/test_base.py +++ b/plugin_test/vapor/vapor/tests/common/test_base.py @@ -22,6 +22,7 @@ from pycontrail import exceptions import pycontrail.types as contrail_types import pytest +from vapor.helpers import agent_steps from vapor.helpers import asserts from vapor.helpers import contrail_status from vapor import settings @@ -442,3 +443,42 @@ def test_create_multiple_servers_on_many_networks( for network in networks: server_steps.create_servers( count=4, flavor=flavor, image=cirros_image, networks=[network]) + + +def test_network_in_agent_with_server_add_delete( + contrail_api_client, session, contrail_services_http_introspect_ports, + network, server, server_steps): + """Validate network's existence and removal in agent. + + Steps: + #. Create network, subnet + #. Launch server on it + #. Check that network is present on one of vrouter agent + #. Delete server + #. Check that network is not present on any of vrouter agent + """ + contrail_network = contrail_api_client.virtual_network_read( + id=network['id']) + network_fq_name = contrail_network.get_fq_name_str() + + nodes = contrail_services_http_introspect_ports['contrail-vrouter-agent'] + port = nodes['port'] + agent_networks = [] + for ip in nodes['ips']: + agent_network = agent_steps.get_vna_vn(session, ip, port, + network_fq_name) + if agent_network: + agent_networks.append(agent_network) + + assert_that(agent_networks, is_not(empty())) + + server_steps.delete_servers([server]) + + agent_networks = [] + for ip in nodes['ips']: + agent_network = agent_steps.get_vna_vn(session, ip, port, + network_fq_name) + if agent_network: + agent_networks.append(agent_network) + + assert_that(agent_networks, empty())