Add scenario which updates GlusterFS

Change-Id: Id441641455029c185bbee7f8ba07c6f357609c9c
diff --git a/tcp_tests/tests/system/test_update.py b/tcp_tests/tests/system/test_update.py
index 4ec04b0..9796ade 100644
--- a/tcp_tests/tests/system/test_update.py
+++ b/tcp_tests/tests/system/test_update.py
@@ -137,6 +137,92 @@
     @pytest.mark.grab_versions
     @pytest.mark.parametrize("_", [settings.ENV_NAME])
     @pytest.mark.run_mcp_update
+    def test_update_glusterfs(self, salt_actions, reclass_actions,
+                              show_step, _):
+        """ Upgrade GlusterFS
+        Scenario:
+        1. In infra/init.yml in Reclass, add the glusterfs_version parameter
+        2. Start linux.system.repo state
+        3. Start "update-glusterfs" job
+        4. Check version for GlusterFS servers
+        5. Check version for GlusterFS clients
+
+        """
+        salt = salt_actions
+        reclass = reclass_actions
+        jenkins_creds = salt.get_cluster_jenkins_creds()
+        jenkins_url = jenkins_creds.get('url')
+        jenkins_user = jenkins_creds.get('user')
+        jenkins_pass = jenkins_creds.get('pass')
+
+        def has_only_similar(param_by_nodes):
+            """
+            :param param_by_nodes:  dict
+            :return: bool, True if all items in the dict have similar keys
+            """
+            params = list(param_by_nodes.values())
+
+            def are_similar(x): return x == params[0]
+
+            return all(map(are_similar, params)),
+        # ############## Change reclass ######################################
+        show_step(1)
+        reclass.add_key(
+            "parameters._param.linux_system_repo_mcp_glusterfs_version_number",
+            "5",
+            "cluster/*/infra/init.yml"
+        )
+        # ################# Run linux.system state ###########################
+        show_step(2)
+        salt.enforce_state("*", "linux.system.repo")
+
+        # ############## Start deploy-upgrade-galera job #####################
+        show_step(3)
+        jenkins_build_timeout = 40 * 60
+        job_name = 'update-glusterfs'
+
+        update_glusterfs = run_jenkins_job.run_job(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            build_timeout=jenkins_build_timeout,
+            verbose=False,
+            job_name=job_name)
+
+        (description, stages) = get_jenkins_job_stages.get_deployment_result(
+            host=jenkins_url,
+            username=jenkins_user,
+            password=jenkins_pass,
+            job_name=job_name,
+            build_number='lastBuild')
+
+        LOG.info(description)
+        LOG.info('\n'.join(stages))
+
+        assert update_glusterfs == 'SUCCESS', "{0}\n{1}".format(
+            description, '\n'.join(stages))
+
+        # ################ Check GlusterFS version for servers ##############
+        show_step(4)
+        gluster_server_versions_by_nodes = salt.cmd_run(
+            "I@glusterfs:server",
+            "glusterd --version|head -n1")[0]
+
+        assert has_only_similar(gluster_server_versions_by_nodes),\
+            gluster_server_versions_by_nodes
+
+        # ################ Check GlusterFS version for clients ##############
+        show_step(5)
+        gluster_client_versions_by_nodes = salt.cmd_run(
+            "I@glusterfs:client",
+            "glusterfs --version|head -n1")[0]
+
+        assert has_only_similar(gluster_client_versions_by_nodes), \
+            gluster_client_versions_by_nodes
+
+    @pytest.mark.grab_versions
+    @pytest.mark.parametrize("_", [settings.ENV_NAME])
+    @pytest.mark.run_mcp_update
     def test_update_galera(self, salt_actions, reclass_actions, show_step, _):
         """ Upgrade Galera automatically
 
@@ -150,6 +236,7 @@
         """
         salt = salt_actions
         reclass = reclass_actions
+        jenkins_creds = salt.get_cluster_jenkins_creds()
         # ################### Enable pipeline #################################
         show_step(1)
         reclass.add_class(
@@ -172,15 +259,13 @@
         salt.enforce_state("dbs*", "linux.system.repo")
         salt.enforce_state("cfg*", "salt.master")
 
-        jenkins_creds = salt.get_cluster_jenkins_creds()
-
         # #################### Login Jenkins on cid01 node ###################
         show_step(6)
 
         jenkins_url = jenkins_creds.get('url')
         jenkins_user = jenkins_creds.get('user')
         jenkins_pass = jenkins_creds.get('pass')
-        jenkins_build_timeout = 40*60
+        jenkins_build_timeout = 40 * 60
         job_name = 'deploy-upgrade-galera'
         job_parameters = {
             'INTERACTIVE': 'false'