Add grab version func
Change-Id: I942db548d9df5273da7bb2155fadd06f09b45384
diff --git a/tcp_tests/fixtures/underlay_fixtures.py b/tcp_tests/fixtures/underlay_fixtures.py
index e1420b5..a1476e3 100644
--- a/tcp_tests/fixtures/underlay_fixtures.py
+++ b/tcp_tests/fixtures/underlay_fixtures.py
@@ -196,3 +196,26 @@
underlay = underlay_ssh_manager.UnderlaySSHManager(config)
return underlay
+
+
+@pytest.fixture(scope='function', autouse=True)
+def grab_versions(request, underlay):
+ """Fixture for grab package versions at the end of test
+
+ Marks:
+ grab_versions(name=None) - make snapshot if test is passed. If
+ name argument provided, it will be used for creating data,
+ otherwise, test function name will be used
+
+ """
+ grab_version = request.keywords.get('grab_versions', None)
+
+ def test_fin():
+ default_name = getattr(request.node.function, '_name',
+ request.node.function.__name__)
+ if hasattr(request.node, 'rep_call') and request.node.rep_call.passed \
+ and grab_version:
+ artifact_name = utils.extract_name_from_mark(grab_version) or \
+ "{}".format(default_name)
+ underlay.get_logs(artifact_name)
+ request.addfinalizer(test_fin)
diff --git a/tcp_tests/managers/underlay_ssh_manager.py b/tcp_tests/managers/underlay_ssh_manager.py
index 53f5aee..12ea22d 100644
--- a/tcp_tests/managers/underlay_ssh_manager.py
+++ b/tcp_tests/managers/underlay_ssh_manager.py
@@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
+import os
import random
import StringIO
@@ -22,6 +23,7 @@
import yaml
from tcp_tests import logger
+from tcp_tests.helpers import ext
from tcp_tests.helpers import utils
LOG = logger.logger
@@ -390,3 +392,40 @@
}
template = utils.render_template(file_path, options=options)
return yaml.load(template)
+
+ def get_logs(self, artifact_name,
+ node_role=ext.UNDERLAY_NODE_ROLES.salt_master):
+ master_node = [ssh for ssh in self.config_ssh
+ if node_role in ssh['roles']][0]
+ cmd = ("dpkg -l | grep formula > "
+ "/var/log/{0}_packages.output".format(master_node['node_name']))
+
+ tar_cmd = ('tar --absolute-names'
+ ' --warning=no-file-changed '
+ '-czf {t} {d}'.format(
+ t='{0}_log.tar.gz'.format(artifact_name), d='/var/log'))
+ minion_nodes = [ssh for ssh in self.config_ssh
+ if node_role not in ssh['roles']]
+ for node in minion_nodes:
+ with self.remote(host=node['host']) as r_node:
+ r_node.check_call(('tar '
+ '--absolute-names '
+ '--warning=no-file-changed '
+ '-czf {t} {d}'.format(
+ t='{0}.tar.gz'.format(node['node_name']), d='/var/log')),
+ verbose=True, raise_on_err=False)
+ with self.remote(master_node['node_name']) as r:
+ for node in minion_nodes:
+ packages_minion_cmd = ("salt '{0}*' cmd.run "
+ "'dpkg -l' > /var/log/"
+ "{0}_packages.output".format(
+ node['node_name']))
+ r.check_call(packages_minion_cmd)
+ r.check_call("rsync {0}:/root/*.tar.gz "
+ "/var/log/".format(node['node_name']),
+ verbose=True, raise_on_err=False)
+ r.check_call(cmd)
+
+ r.check_call(tar_cmd)
+ r.download(destination='{0}_log.tar.gz'.format(artifact_name),
+ target=os.getcwd())
diff --git a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
index 7f2daf5..eb33a2f 100644
--- a/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
+++ b/tcp_tests/tests/system/test_install_mcp11_ovs_ocata.py
@@ -24,6 +24,7 @@
class Test_Mcp11_install(object):
"""Test class for testing mcp11 vxlan deploy"""
+ @pytest.mark.grab_versions
@pytest.mark.fail_snapshot
@pytest.mark.cz8119
def test_mcp11_ocata_ovs_install(self, underlay,