Add 'k8s chain update' test

Change-Id: Ica0cdf83e3a3b3a74e1eef8557d7064e97db1967
Related-PROD: PROD-17808
diff --git a/tcp_tests/tests/system/test_k8s_actions.py b/tcp_tests/tests/system/test_k8s_actions.py
index 30dcba1..a8dbe72 100644
--- a/tcp_tests/tests/system/test_k8s_actions.py
+++ b/tcp_tests/tests/system/test_k8s_actions.py
@@ -77,3 +77,53 @@
 
         show_step(1)
         k8s_deployed.start_k8s_cncf_verification()
+
+    @pytest.mark.grap_versions
+    @pytest.mark.fail_snapshot
+    def test_k8s_chain_update(self, show_step, underlay, config, k8s_deployed,
+                              k8s_chain_update_log_helper):
+        """Test for chain-upgrading k8s hypercube pool and checking it
+
+        Scenario:
+            1. Prepare salt on hosts
+            2. Setup controller nodes
+            3. Setup compute nodes
+            4. Setup Kubernetes cluster
+            5. Run and expose sample test service
+            6. Run conformance to check consistency
+            7. For every version in update chain:
+               Update cluster to new version, check test sample service
+               availability, run conformance
+        """
+
+        deployment_name = 'test-dep-chain-upgrade'
+
+        show_step(5)
+        k8s_deployed.kubectl_run(
+            deployment_name, 'gcr.io/google-samples/node-hello:1.0', '8080')
+        k8s_deployed.kubectl_expose(
+            'deployment', deployment_name, '8080', 'ClusterIP')
+        sample_service_ip = k8s_deployed.get_svc_ip(deployment_name, 'default')
+        k8s_deployed.wait_deploy_ready(deployment_name)
+
+        def check_is_test_service_available():
+            assert "Hello Kubernetes!" in k8s_deployed.curl(
+                "http://{}:{}".format(sample_service_ip, 8080))
+
+        check_is_test_service_available()
+
+        show_step(6)
+        k8s_deployed.run_conformance(log_out="k8s_conformance.log")
+
+        show_step(7)
+        chain_versions = config.k8s.k8s_update_chain.split(" ")
+        for version in chain_versions:
+            LOG.info("Chain update to '{}' version".format(version))
+            k8s_deployed.update_k8s_images(version)
+
+            LOG.info("Checking test service availability")
+            check_is_test_service_available()
+
+            LOG.info("Running conformance on {} version".format(version))
+            log_name = "k8s_conformance_{}.log".format(version)
+            k8s_deployed.run_conformance(log_out=log_name, raise_on_err=False)