diff --git a/tcp_tests/tests/environment/test_generate_model.py b/tcp_tests/tests/environment/test_generate_model.py
new file mode 100644
index 0000000..a936bb5
--- /dev/null
+++ b/tcp_tests/tests/environment/test_generate_model.py
@@ -0,0 +1,79 @@
+#    Copyright 2017 Mirantis, Inc.
+#
+#    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 pytest
+import os
+
+from tcp_tests import logger
+from tcp_tests import settings
+from tcp_tests.helpers import ext
+
+LOG = logger.logger
+
+
+class TestGenerateModel(object):
+    """Test class that generates and checks a cluster model"""
+
+    @pytest.mark.fail_snapshot
+    def test_generate_model(self, config, underlay, salt_actions):
+        config.salt.salt_master_host = \
+            underlay.host_by_node_role(
+                node_role=ext.UNDERLAY_NODE_ROLES.salt_master)
+
+        commands = underlay.read_template(config.salt_deploy.salt_steps_path)
+        salt_actions.install(commands)
+
+        node_name = underlay.get_target_node_names('cfg01.')[0]
+        arch_model_name = 'model_{0}.tar.gz'.format(settings.ENV_NAME)
+        commands = [
+            {
+                'description': "Copy generated model to /root/reclass",
+                'node_name': node_name,
+                'cmd': ('cp -r /srv/salt/reclass/ /root/;'
+                        'rm -rf /root/reclass/classes/service/;'
+                        'rm -rf /root/reclass/classes/system/;')},
+            {
+                'description': ("Archive the model to the /root/{0}"
+                                .format(arch_model_name)),
+                'node_name': node_name,
+                'cmd': ('cd /root/reclass/;'
+                        'tar --warning=no-file-changed -czf /root/{0} ./'
+                        .format(arch_model_name))},
+            {
+                'description': "Download the model to the host",
+                'node_name': node_name,
+                'download': {
+                    'remote_path': '/root/',
+                    'remote_filename': arch_model_name,
+                    'local_path': os.getcwd()
+                }},
+        ]
+
+        salt_actions.execute_commands(commands=commands,
+                                      label="Get the model from the cfg01")
+
+
+#        tar_cmd = (
+#            'cp -r /srv/salt/reclass/ /root/;'
+#            'rm -rf /root/reclass/classes/service/;'
+#            'rm -rf /root/reclass/classes/system/;'
+#            'cd /root/reclass/;'
+#            'tar --warning=no-file-changed -czf /root/model_{0}.tar.gz ./'
+#            .format(settings.ENV_NAME))
+#        with underlay.remote(host=config.salt.salt_master_host) as r:
+#            r.check_call(tar_cmd, verbose=True)
+#            r.download('model_{0}.tar.gz'.format(settings.ENV_NAME),
+#                       os.getcwd())
+
+        LOG.info("*************** DONE **************")
