[CVP,Q4] Add tags and review SL tests

Change-Id: Ic110e7123f42161911fc49daaaf3a3c045886eae
Related-PROD: PROD-30482
diff --git a/test_set/cvp-sanity/README.md b/test_set/cvp-sanity/README.md
index 564f236..3b36f6f 100644
--- a/test_set/cvp-sanity/README.md
+++ b/test_set/cvp-sanity/README.md
@@ -52,7 +52,7 @@
 ```
 For array-type settings please do:
 ```bash
-export skipped_nodes='ctl01.example.com,ctl02.example.com'
+export skipped_nodes=ctl01.example.com,ctl02.example.com
 ```
 
 5) Start tests:
@@ -63,3 +63,11 @@
 ```bash
    # pytest -sv cvp-sanity/tests/ --ignore cvp-sanity/tests/test_mtu.py
 ```
+CVP-sanity-checks supports tags (labels/marks/sets). As of now we have smoke,
+full and sl_dup sets. Smoke will run essential tests only, full set runs all
+tests and sl_dup is a special set that collects the tests that already exist in
+Stacklight. Please do not forget to mark your test when you add it.
+Example (run smoke tests only):
+```bash
+   # pytest -v -m smoke
+```
diff --git a/test_set/cvp-sanity/tests/test_cinder_services.py b/test_set/cvp-sanity/tests/test_cinder_services.py
index a83a3f9..4a6c45e 100644
--- a/test_set/cvp-sanity/tests/test_cinder_services.py
+++ b/test_set/cvp-sanity/tests/test_cinder_services.py
@@ -1,6 +1,9 @@
 import pytest
 
 
+@pytest.mark.sl_dup
+#CinderServiceDown, CinderServicesDownMinor
+@pytest.mark.full
 def test_cinder_services_are_up(local_salt_client, check_cinder_backends):
     """
         # Make sure that cinder backend exists with next command: `salt -C "I@cinder:controller" pillar.get cinder:controller:backend`
@@ -12,7 +15,7 @@
     assert service_down == '', \
         '''Some cinder services are in wrong state'''
 
-
+@pytest.mark.full
 def test_cinder_services_has_all_backends(local_salt_client, check_cinder_backends):
     """
         # Make sure that cinder backend exists with next command: `salt -C "I@cinder:controller" pillar.get cinder:controller:backend`
@@ -31,4 +34,4 @@
     assert cinder_volume == str(backends_num), \
         'Number of cinder-volume services ({0}) does not match ' \
         'number of volume backends ({1})'.format(
-        cinder_volume, str(backends_num))
\ No newline at end of file
+        cinder_volume, str(backends_num))
diff --git a/test_set/cvp-sanity/tests/test_contrail.py b/test_set/cvp-sanity/tests/test_contrail.py
index fcb96f9..862606a 100644
--- a/test_set/cvp-sanity/tests/test_contrail.py
+++ b/test_set/cvp-sanity/tests/test_contrail.py
@@ -14,6 +14,9 @@
         expr_form='pillar'
     )
 
+@pytest.mark.sl_dup
+#ContrailApiDown, ContrailApiDownMinor
+@pytest.mark.full
 def test_contrail_compute_status(local_salt_client, check_openstack):
     cs = get_contrail_status(local_salt_client, 'nova:compute',
                              STATUS_COMMAND, STATUS_FILTER)
@@ -37,7 +40,7 @@
                                                              broken_services,
                                                              indent=4))
 
-
+@pytest.mark.smoke
 def test_contrail_node_status(local_salt_client, check_openstack):
     command = STATUS_COMMAND
 
@@ -67,7 +70,7 @@
                                                              broken_services,
                                                              indent=4))
 
-
+@pytest.mark.smoke
 def test_contrail_vrouter_count(local_salt_client, check_openstack):
     cs = get_contrail_status(local_salt_client, 'nova:compute',
                              STATUS_COMMAND, STATUS_FILTER)
@@ -87,7 +90,7 @@
         ' from the length of compute nodes {}'.format(actual_vrouter_count,
                                                       len(cs.keys()))
 
-
+@pytest.mark.smoke
 def test_public_ui_contrail(local_salt_client, ctl_nodes_pillar, check_openstack):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
     protocol = 'https'
diff --git a/test_set/cvp-sanity/tests/test_default_gateway.py b/test_set/cvp-sanity/tests/test_default_gateway.py
index 8cea880..c1a36da 100644
--- a/test_set/cvp-sanity/tests/test_default_gateway.py
+++ b/test_set/cvp-sanity/tests/test_default_gateway.py
@@ -1,6 +1,8 @@
 import json
+import pytest
 
 
+@pytest.mark.full
 def test_check_default_gateways(local_salt_client, nodes_in_group):
     netstat_info = local_salt_client.cmd(
         tgt="L@"+','.join(nodes_in_group),
diff --git a/test_set/cvp-sanity/tests/test_drivetrain.py b/test_set/cvp-sanity/tests/test_drivetrain.py
index f892932..5efc7e8 100644
--- a/test_set/cvp-sanity/tests/test_drivetrain.py
+++ b/test_set/cvp-sanity/tests/test_drivetrain.py
@@ -48,6 +48,7 @@
     return password
 
 
+@pytest.mark.full
 def test_drivetrain_gerrit(local_salt_client, check_cicd):
     gerrit_password = get_password(local_salt_client,'gerrit:client')
     gerrit_error = ''
@@ -106,6 +107,7 @@
         'Something is wrong with Gerrit'.format(gerrit_error)
 
 
+@pytest.mark.full
 def test_drivetrain_openldap(local_salt_client, check_cicd):
     """
          1. Create a test user 'DT_test_user' in openldap
@@ -207,6 +209,9 @@
         '''Test user was not found'''
 
 
+@pytest.mark.sl_dup
+#DockerService***Outage
+@pytest.mark.full
 def test_drivetrain_services_replicas(local_salt_client, check_cicd):
     """
         # Execute ` salt -C 'I@gerrit:client' cmd.run 'docker service ls'` command to get info  for each docker service like that:
@@ -234,6 +239,7 @@
     assert len(wrong_items) == 0
 
 
+@pytest.mark.full
 def test_drivetrain_components_and_versions(local_salt_client, check_cicd):
     """
         1. Execute command `docker service ls --format "{{.Image}}"'` on  the 'I@gerrit:client' target
@@ -272,6 +278,7 @@
               {}'''.format(json.dumps(mismatch, indent=4))
 
 
+@pytest.mark.full
 def test_jenkins_jobs_branch(local_salt_client, check_cicd):
     """ This test compares Jenkins jobs versions
         collected from the cloud vs collected from pillars.
@@ -319,6 +326,7 @@
               {}'''.format(json.dumps(version_mismatch, indent=4))
 
 
+@pytest.mark.full
 def test_drivetrain_jenkins_job(local_salt_client, check_cicd):
     """
         # Login to Jenkins on jenkins:client
@@ -362,6 +370,8 @@
          '''.format(jenkins_test_job)
 
 
+@pytest.mark.smoke
+# ??
 def test_kdt_all_pods_are_available(local_salt_client, check_kdt):
     """
      # Run kubectl get pods -n drivetrain on kdt-nodes to get status for each pod
@@ -399,6 +409,8 @@
             report=report_with_errors
         )
 
+@pytest.mark.smoke
+# ??
 def test_kfg_all_pods_are_available(local_salt_client, check_kfg):
     """
      # Run kubectl get pods -n drivetrain on cfg node to get status for each pod
diff --git a/test_set/cvp-sanity/tests/test_duplicate_ips.py b/test_set/cvp-sanity/tests/test_duplicate_ips.py
index 3b55a26..bbd532e 100644
--- a/test_set/cvp-sanity/tests/test_duplicate_ips.py
+++ b/test_set/cvp-sanity/tests/test_duplicate_ips.py
@@ -1,7 +1,7 @@
 from collections import Counter
 from pprint import pformat
 import os
-
+import pytest
 import utils
 
 
@@ -14,6 +14,7 @@
     return dup_ifaces
 
 
+@pytest.mark.smoke
 def test_duplicate_ips(local_salt_client):
     testname = os.path.basename(__file__).split('.')[0]
     config = utils.get_configuration()
diff --git a/test_set/cvp-sanity/tests/test_etc_hosts.py b/test_set/cvp-sanity/tests/test_etc_hosts.py
index 8850ab7..61d36ef 100644
--- a/test_set/cvp-sanity/tests/test_etc_hosts.py
+++ b/test_set/cvp-sanity/tests/test_etc_hosts.py
@@ -1,6 +1,8 @@
 import json
+import pytest
 
 
+@pytest.mark.full
 def test_etc_hosts(local_salt_client):
     nodes_info = local_salt_client.cmd(
         tgt='*',
diff --git a/test_set/cvp-sanity/tests/test_galera_cluster.py b/test_set/cvp-sanity/tests/test_galera_cluster.py
index 73f4932..32b1074 100644
--- a/test_set/cvp-sanity/tests/test_galera_cluster.py
+++ b/test_set/cvp-sanity/tests/test_galera_cluster.py
@@ -1,6 +1,10 @@
 import pytest
 
 
+@pytest.mark.sl_dup
+#GaleraServiceDown
+#TODO: a better test
+@pytest.mark.full
 def test_galera_cluster_status(local_salt_client):
     gs = local_salt_client.cmd(
         tgt='galera:*',
diff --git a/test_set/cvp-sanity/tests/test_mounts.py b/test_set/cvp-sanity/tests/test_mounts.py
index 5fe40fc..b79e6db 100644
--- a/test_set/cvp-sanity/tests/test_mounts.py
+++ b/test_set/cvp-sanity/tests/test_mounts.py
@@ -2,6 +2,8 @@
 import pytest
 
 
+@pytest.mark.smoke
+#full?
 def test_mounted_file_systems(local_salt_client, nodes_in_group):
     """
         # Get all mount points from each node in the group  with the next command: `df -h | awk '{print $1}'`
diff --git a/test_set/cvp-sanity/tests/test_mtu.py b/test_set/cvp-sanity/tests/test_mtu.py
index 0a3d2d0..b215c1d 100644
--- a/test_set/cvp-sanity/tests/test_mtu.py
+++ b/test_set/cvp-sanity/tests/test_mtu.py
@@ -4,6 +4,7 @@
 import os
 
 
+@pytest.mark.full
 def test_mtu(local_salt_client, nodes_in_group):
     testname = os.path.basename(__file__).split('.')[0]
     config = utils.get_configuration()
diff --git a/test_set/cvp-sanity/tests/test_nodes.py b/test_set/cvp-sanity/tests/test_nodes.py
index 687f3ae..6ab48df 100644
--- a/test_set/cvp-sanity/tests/test_nodes.py
+++ b/test_set/cvp-sanity/tests/test_nodes.py
@@ -2,6 +2,8 @@
 import pytest
 
 
+@pytest.mark.smoke
+#move to sl?
 def test_minions_status(local_salt_client):
     result = local_salt_client.cmd(
         tgt='salt:master',
diff --git a/test_set/cvp-sanity/tests/test_nodes_in_maas.py b/test_set/cvp-sanity/tests/test_nodes_in_maas.py
index fafd150..74ec865 100644
--- a/test_set/cvp-sanity/tests/test_nodes_in_maas.py
+++ b/test_set/cvp-sanity/tests/test_nodes_in_maas.py
@@ -18,6 +18,7 @@
     return login
 
 
+@pytest.mark.full
 def test_nodes_deployed_in_maas(local_salt_client):
     config = utils.get_configuration()
 
diff --git a/test_set/cvp-sanity/tests/test_nova_services.py b/test_set/cvp-sanity/tests/test_nova_services.py
index 6505d30..54ed76e 100644
--- a/test_set/cvp-sanity/tests/test_nova_services.py
+++ b/test_set/cvp-sanity/tests/test_nova_services.py
@@ -1,6 +1,8 @@
 import pytest
 
 
+@pytest.mark.sl_dup
+@pytest.mark.full
 @pytest.mark.usefixtures('check_openstack')
 def test_nova_services_status(local_salt_client):
     result = local_salt_client.cmd_any(
@@ -12,6 +14,7 @@
         '''Some nova services are in wrong state'''
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_openstack')
 def test_nova_hosts_consistent(local_salt_client):
     all_cmp_services = local_salt_client.cmd_any(
diff --git a/test_set/cvp-sanity/tests/test_ntp_sync.py b/test_set/cvp-sanity/tests/test_ntp_sync.py
index abf0d8a..8da6fad 100644
--- a/test_set/cvp-sanity/tests/test_ntp_sync.py
+++ b/test_set/cvp-sanity/tests/test_ntp_sync.py
@@ -2,7 +2,10 @@
 import utils
 import pytest
 
+
 @pytest.mark.xfail
+@pytest.mark.smoke
+#move to sl?
 def test_ntp_sync(local_salt_client):
     """Test checks that system time is the same across all nodes"""
 
@@ -26,6 +29,7 @@
                              json.dumps(result, indent=4))
 
 
+@pytest.mark.smoke
 def test_ntp_peers_state(local_salt_client):
     """Test gets ntpq peers state and checks the system peer is declared"""
     state = local_salt_client.cmd(
diff --git a/test_set/cvp-sanity/tests/test_oss.py b/test_set/cvp-sanity/tests/test_oss.py
index 9e919c5..469323e 100644
--- a/test_set/cvp-sanity/tests/test_oss.py
+++ b/test_set/cvp-sanity/tests/test_oss.py
@@ -1,8 +1,11 @@
 import requests
 import csv
 import json
+import pytest
 
 
+@pytest.mark.full
+#probably in sl
 def test_oss_status(local_salt_client, check_cicd):
     """
        # Get IP of HAPROXY interface from pillar using 'salt -C "I@docker:swarm:role:master" pillar.get haproxy:proxy:listen:stats:binds:address'
diff --git a/test_set/cvp-sanity/tests/test_packet_checker.py b/test_set/cvp-sanity/tests/test_packet_checker.py
index 29f922d..f8f7491 100644
--- a/test_set/cvp-sanity/tests/test_packet_checker.py
+++ b/test_set/cvp-sanity/tests/test_packet_checker.py
@@ -3,6 +3,7 @@
 import utils
 
 
+@pytest.mark.full
 def test_check_package_versions(local_salt_client, nodes_in_group):
     exclude_packages = utils.get_configuration().get("skipped_packages", [])
     packages_versions = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
@@ -49,6 +50,7 @@
         json.dumps(pkts_data, indent=4))
 
 
+@pytest.mark.full
 def test_packages_are_latest(local_salt_client, nodes_in_group):
     config = utils.get_configuration()
     skip = config.get("test_packages")["skip_test"]
@@ -70,6 +72,7 @@
             node, "\n".join(result))
 
 
+@pytest.mark.full
 def test_check_module_versions(local_salt_client, nodes_in_group):
     exclude_modules = utils.get_configuration().get("skipped_modules", [])
     pre_check = local_salt_client.cmd(
@@ -115,4 +118,4 @@
             pkts_data.append(row)
     assert len(pkts_data) <= 1, \
         "Several problems found: {0}".format(
-        json.dumps(pkts_data, indent=4))
+        json.dumps(pkts_data, indent=4))
\ No newline at end of file
diff --git a/test_set/cvp-sanity/tests/test_rabbit_cluster.py b/test_set/cvp-sanity/tests/test_rabbit_cluster.py
index 73efb57..d0bb44b 100644
--- a/test_set/cvp-sanity/tests/test_rabbit_cluster.py
+++ b/test_set/cvp-sanity/tests/test_rabbit_cluster.py
@@ -1,6 +1,11 @@
 import utils
+import pytest
 
 
+@pytest.mark.sl_dup
+#RabbitmqServiceDown, RabbitmqErrorLogsTooHigh
+#TODO: a better test
+@pytest.mark.full
 def test_checking_rabbitmq_cluster(local_salt_client):
     # disable config for this test
     # it may be reintroduced in future
diff --git a/test_set/cvp-sanity/tests/test_repo_list.py b/test_set/cvp-sanity/tests/test_repo_list.py
index 0e29bc6..0949851 100644
--- a/test_set/cvp-sanity/tests/test_repo_list.py
+++ b/test_set/cvp-sanity/tests/test_repo_list.py
@@ -1,6 +1,8 @@
 import json
+import pytest
 
 
+@pytest.mark.full
 def test_list_of_repo_on_nodes(local_salt_client, nodes_in_group):
     # TODO: pillar.get
     info_salt = local_salt_client.cmd(tgt='L@' + ','.join(
diff --git a/test_set/cvp-sanity/tests/test_salt_master.py b/test_set/cvp-sanity/tests/test_salt_master.py
index 546ff75..f0d6499 100644
--- a/test_set/cvp-sanity/tests/test_salt_master.py
+++ b/test_set/cvp-sanity/tests/test_salt_master.py
@@ -1,6 +1,8 @@
 import json
+import pytest
 
 
+@pytest.mark.full
 def test_uncommited_changes(local_salt_client):
     git_status = local_salt_client.cmd(
         tgt='salt:master',
@@ -10,6 +12,7 @@
            ' some unmerged changes {}'''.format(git_status.values()[0])
 
 
+@pytest.mark.smoke
 def test_reclass_smoke(local_salt_client):
     reclass = local_salt_client.cmd(
         tgt='salt:master',
@@ -21,6 +24,7 @@
                           '\n {}'.format(reclass)
 
 
+@pytest.mark.smoke
 def test_reclass_nodes(local_salt_client):
     reclass = local_salt_client.cmd(
         tgt='salt:master',
diff --git a/test_set/cvp-sanity/tests/test_services.py b/test_set/cvp-sanity/tests/test_services.py
index c704437..224c207 100644
--- a/test_set/cvp-sanity/tests/test_services.py
+++ b/test_set/cvp-sanity/tests/test_services.py
@@ -1,6 +1,5 @@
 import pytest
 import json
-import os
 import utils
 
 # Some nodes can have services that are not applicable for other nodes in similar group.
@@ -10,6 +9,7 @@
 inconsistency_rule = {"kvm03": ["srv-volumes-backup.mount", "rsync"]}
 
 
+@pytest.mark.full
 def test_check_services(local_salt_client, nodes_in_group):
     """
     Skips services if they are not consistent for all node.
diff --git a/test_set/cvp-sanity/tests/test_single_vip.py b/test_set/cvp-sanity/tests/test_single_vip.py
index c18c660..91fcd92 100644
--- a/test_set/cvp-sanity/tests/test_single_vip.py
+++ b/test_set/cvp-sanity/tests/test_single_vip.py
@@ -3,6 +3,7 @@
 import pytest
 
 
+@pytest.mark.smoke
 def test_single_vip_exists(local_salt_client):
     """Test checks that there is only one VIP address
        within one group of nodes (where applicable).
diff --git a/test_set/cvp-sanity/tests/test_stacklight.py b/test_set/cvp-sanity/tests/test_stacklight.py
index 703deea..31ac01e 100644
--- a/test_set/cvp-sanity/tests/test_stacklight.py
+++ b/test_set/cvp-sanity/tests/test_stacklight.py
@@ -3,7 +3,9 @@
 import datetime
 import pytest
 
-
+@pytest.mark.sl_dup
+#ElasticsearchClusterHealthStatusMajor or stacklight-pytest
+@pytest.mark.full
 @pytest.mark.usefixtures('check_kibana')
 def test_elasticsearch_cluster(local_salt_client):
     salt_output = local_salt_client.pillar_get(
@@ -34,6 +36,9 @@
         json.dumps(resp, indent=4))
 
 
+@pytest.mark.sl_dup
+#stacklight-pytest
+@pytest.mark.full
 @pytest.mark.usefixtures('check_kibana')
 def test_kibana_status(local_salt_client):
     proxies = {"http": None, "https": None}
@@ -49,6 +54,8 @@
             "Kibana statuses are unexpected: {}".format(i)
 
 
+@pytest.mark.smoke
+#TODO: recheck
 @pytest.mark.usefixtures('check_kibana')
 def test_elasticsearch_node_count(local_salt_client):
     now = datetime.datetime.now()
@@ -62,7 +69,7 @@
     proxies = {"http": None, "https": None}
     data = ('{"size": 0, "aggs": '
             '{"uniq_hostname": '
-            '{"terms": {"size": 1000, '
+            '{"terms": {"size": 500, '
             '"field": "Hostname.keyword"}}}}')
     response = requests.post(
         'http://{0}:9200/log-{1}/_search?pretty'.format(IP, today),
@@ -88,6 +95,9 @@
             format(len(monitored_nodes), len(all_nodes), missing_nodes)
 
 
+@pytest.mark.sl_dup
+#DockerServiceMonitoring*
+@pytest.mark.full
 def test_stacklight_services_replicas(local_salt_client):
     # TODO
     # change to docker:swarm:role:master ?
@@ -110,6 +120,7 @@
               {}'''.format(json.dumps(wrong_items, indent=4))
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_prometheus')
 def test_prometheus_alert_count(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -128,6 +139,9 @@
                          json.dumps(result), indent=4)
 
 
+@pytest.mark.sl_dup
+#DockerServiceMonitoring* ??
+@pytest.mark.full
 def test_stacklight_containers_status(local_salt_client):
     salt_output = local_salt_client.cmd(
         tgt='I@docker:swarm:role:master and I@prometheus:server',
@@ -159,6 +173,9 @@
               {}'''.format(json.dumps(result, indent=4))
 
 
+@pytest.mark.sl_dup
+#PrometheusTargetDown
+@pytest.mark.full
 def test_running_telegraf_services(local_salt_client):
     salt_output = local_salt_client.cmd(tgt='telegraf:agent',
                                         fun='service.status',
@@ -176,6 +193,9 @@
                          'on following nodes: {}'.format(result)
 
 
+@pytest.mark.sl_dup
+#PrometheusTargetDown
+@pytest.mark.full
 def test_running_fluentd_services(local_salt_client):
     salt_output = local_salt_client.cmd(tgt='fluentd:agent',
                                         fun='service.status',
@@ -185,4 +205,4 @@
               in salt_output.items()
               if status is False]
     assert result == [], 'Fluentd check failed: td-agent service is not ' \
-                         'running on following nodes:'.format(result)
+                         'running on following nodes:'.format(result)
\ No newline at end of file
diff --git a/test_set/cvp-sanity/tests/test_ui_addresses.py b/test_set/cvp-sanity/tests/test_ui_addresses.py
index 0c65451..40ff120 100644
--- a/test_set/cvp-sanity/tests/test_ui_addresses.py
+++ b/test_set/cvp-sanity/tests/test_ui_addresses.py
@@ -1,6 +1,7 @@
 import pytest
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_openstack')
 def test_ui_horizon(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(
@@ -18,6 +19,7 @@
         IP[0])
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_openstack')
 def test_public_openstack(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -33,6 +35,9 @@
         'Public Openstack url is not reachable on {} from ctl nodes'.format(url)
 
 
+@pytest.mark.sl_dup
+#stacklight-pytest?
+@pytest.mark.full
 @pytest.mark.usefixtures('check_kibana')
 def test_internal_ui_kibana(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:stacklight_log_address')
@@ -49,6 +54,7 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_kibana')
 def test_public_ui_kibana(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -65,6 +71,9 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.sl_dup
+#stacklight-pytest?
+@pytest.mark.full
 @pytest.mark.usefixtures('check_prometheus')
 def test_internal_ui_prometheus(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:stacklight_monitor_address')
@@ -81,6 +90,7 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_prometheus')
 def test_public_ui_prometheus(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -97,6 +107,9 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.sl_dup
+#stacklight-pytest?
+@pytest.mark.full
 @pytest.mark.usefixtures('check_prometheus')
 def test_internal_ui_alert_manager(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:stacklight_monitor_address')
@@ -112,6 +125,7 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_prometheus')
 def test_public_ui_alert_manager(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -127,6 +141,9 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.sl_dup
+#stacklight-pytest?
+@pytest.mark.full
 @pytest.mark.usefixtures('check_grafana')
 def test_internal_ui_grafana(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:stacklight_monitor_address')
@@ -142,6 +159,7 @@
         'from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_grafana')
 def test_public_ui_grafana(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -156,6 +174,9 @@
         'Public Grafana page is not reachable on {} from ctl nodes'.format(url)
 
 
+@pytest.mark.sl_dup
+#stacklight-pytest?
+@pytest.mark.full
 @pytest.mark.usefixtures('check_alerta')
 def test_internal_ui_alerta(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:stacklight_monitor_address')
@@ -171,6 +192,7 @@
         'Internal Alerta page is not reachable on {} from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_alerta')
 def test_public_ui_alerta(local_salt_client, ctl_nodes_pillar):
     IP = local_salt_client.pillar_get(param='_param:cluster_public_host')
@@ -186,6 +208,7 @@
         'Public Alerta page is not reachable on {} from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_openstack')
 @pytest.mark.usefixtures('check_drivetrain')
 def test_public_ui_jenkins(local_salt_client, ctl_nodes_pillar):
@@ -202,6 +225,7 @@
         'Public Jenkins page is not reachable on {} from ctl nodes'.format(url)
 
 
+@pytest.mark.smoke
 @pytest.mark.usefixtures('check_openstack')
 @pytest.mark.usefixtures('check_drivetrain')
 def test_public_ui_gerrit(local_salt_client, ctl_nodes_pillar):
@@ -215,4 +239,4 @@
                grep "Gerrit Code Review"'.format(url),
         expr_form='pillar')
     assert len(result[result.keys()[0]]) != 0, \
-        'Public Gerrit page is not reachable on {} from ctl nodes'.format(url)
+        'Public Gerrit page is not reachable on {} from ctl nodes'.format(url)
\ No newline at end of file