|
@@ -64,7 +64,7 @@ def get_configs():
|
|
|
serverConfiguration.STACK_LOCATION_KEY : "/var/lib/ambari-server/resources/stacks",
|
|
|
serverConfiguration.COMMON_SERVICES_PATH_PROPERTY : "/var/lib/ambari-server/resources/common-services",
|
|
|
serverConfiguration.EXTENSION_PATH_PROPERTY : "/var/lib/ambari-server/resources/extensions",
|
|
|
- serverConfiguration.DASHBOARD_PATH_PROPERTY : "/var/lib/ambari-server/resources/dashboards",
|
|
|
+ serverConfiguration.RESOURCES_DIR_PROPERTY : "/var/lib/ambari-server/resources",
|
|
|
serverConfiguration.MPACKS_STAGING_PATH_PROPERTY : mpacks_directory,
|
|
|
serverConfiguration.SERVER_TMP_DIR_PROPERTY : "/tmp",
|
|
|
serverConfiguration.JDBC_DATABASE_PROPERTY: "postgres"
|
|
@@ -100,9 +100,11 @@ class TestMpacks(TestCase):
|
|
|
fail = True
|
|
|
self.assertTrue(fail)
|
|
|
|
|
|
+ @patch("os.path.exists")
|
|
|
@patch("ambari_server.setupMpacks.get_YN_input")
|
|
|
@patch("ambari_server.setupMpacks.run_mpack_install_checker")
|
|
|
- def test_validate_purge(self, run_mpack_install_checker_mock, get_YN_input_mock):
|
|
|
+ @patch("ambari_server.setupMpacks.get_ambari_properties")
|
|
|
+ def test_validate_purge(self, get_ambari_properties_mock, run_mpack_install_checker_mock, get_YN_input_mock, os_path_exists_mock):
|
|
|
options = self._create_empty_options_mock()
|
|
|
options.purge = True
|
|
|
purge_list = options.purge_list.split(',')
|
|
@@ -112,6 +114,7 @@ class TestMpacks(TestCase):
|
|
|
replay_mode = False
|
|
|
run_mpack_install_checker_mock.return_value = (0, "No errors found", "")
|
|
|
get_YN_input_mock.return_value = True
|
|
|
+ os_path_exists_mock.return_value = True
|
|
|
|
|
|
fail = False
|
|
|
try:
|
|
@@ -160,22 +163,28 @@ class TestMpacks(TestCase):
|
|
|
extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
|
|
|
common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
- os_path_exists_mock.return_value = False
|
|
|
+ os_path_exists_mock.side_effect = [True]
|
|
|
|
|
|
purge_stacks_and_mpacks(None)
|
|
|
- os_path_exists_calls = []
|
|
|
+ os_path_exists_calls = [
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
+ ]
|
|
|
os_path_exists_mock.assert_has_calls(os_path_exists_calls)
|
|
|
|
|
|
+ os_path_exists_mock.side_effect = [True, False, False]
|
|
|
purge_stacks_and_mpacks(options.purge_list.split(","))
|
|
|
os_path_exists_calls = [
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call(stacks_directory),
|
|
|
call(mpacks_directory)
|
|
|
]
|
|
|
os_path_exists_mock.assert_has_calls(os_path_exists_calls)
|
|
|
|
|
|
options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
|
|
|
+ os_path_exists_mock.side_effect = [True, False, False, False]
|
|
|
purge_stacks_and_mpacks(options.purge_list.split(","))
|
|
|
os_path_exists_calls = [
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call(stacks_directory),
|
|
|
call(common_services_directory),
|
|
|
call(mpacks_directory)
|
|
@@ -183,8 +192,10 @@ class TestMpacks(TestCase):
|
|
|
os_path_exists_mock.assert_has_calls(os_path_exists_calls)
|
|
|
|
|
|
options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, EXTENSION_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
|
|
|
+ os_path_exists_mock.side_effect = [True, False, False, False]
|
|
|
purge_stacks_and_mpacks(options.purge_list.split(","))
|
|
|
os_path_exists_calls = [
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call(stacks_directory),
|
|
|
call(extensions_directory),
|
|
|
call(mpacks_directory)
|
|
@@ -193,10 +204,13 @@ class TestMpacks(TestCase):
|
|
|
|
|
|
options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
|
|
|
options.replay_mode = True
|
|
|
+ os_path_exists_mock.side_effect = [True, False, False, False]
|
|
|
purge_stacks_and_mpacks(options.purge_list.split(","))
|
|
|
os_path_exists_calls = [
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call(stacks_directory),
|
|
|
- call(common_services_directory)
|
|
|
+ call(common_services_directory),
|
|
|
+ call(mpacks_directory)
|
|
|
]
|
|
|
os_path_exists_mock.assert_has_calls(os_path_exists_calls)
|
|
|
|
|
@@ -266,10 +280,11 @@ class TestMpacks(TestCase):
|
|
|
get_ambari_version_mock.return_value = "2.4.0.0"
|
|
|
run_os_command_mock.return_value = (0, "", "")
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
- """
|
|
|
+
|
|
|
os_path_exists_calls = [call('/tmp/mystack.tar.gz'),
|
|
|
call('mpacks/mystack-ambari-mpack-1.0.0.0/mpack.json'),
|
|
|
call('mpacks/mystack-ambari-mpack-1.0.0.0/hooks/before_install.py'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks'),
|
|
|
call('/var/lib/ambari-server/resources/extensions'),
|
|
|
call('/var/lib/ambari-server/resources/common-services'),
|
|
@@ -277,12 +292,14 @@ class TestMpacks(TestCase):
|
|
|
call(mpacks_directory + '/cache'),
|
|
|
call('/var/lib/ambari-server/resources/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/common-services/SERVICEA'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEA/1.0/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEA/2.0/dashboards'),
|
|
|
call('/var/lib/ambari-server/resources/common-services/SERVICEB'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEB/1.0.0/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEB/2.0.0/dashboards'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
|
|
@@ -295,22 +312,26 @@ class TestMpacks(TestCase):
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/2.0/services/SERVICEA/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/2.0/services/SERVICEB/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/hooks/after_install.py')]
|
|
|
- """
|
|
|
- os_path_exists_mock.side_effect = [True, True, True, False, True, False, False, False, False,
|
|
|
- False, False, False, False, False, False,
|
|
|
- False, False, False, False, False, False, False, False,
|
|
|
- False, False, False, False, True]
|
|
|
+
|
|
|
+ os_path_exists_mock.side_effect = [True, True, True, True, False, True, False, False, False, False,
|
|
|
+ False, True, False, False, False, False, False, False, True, False,
|
|
|
+ False, False, False, False, False, False, False, False, False, False,
|
|
|
+ True]
|
|
|
get_ambari_properties_mock.return_value = configs
|
|
|
shutil_move_mock.return_value = True
|
|
|
|
|
|
- install_mpack(options)
|
|
|
+ try:
|
|
|
+ install_mpack(options)
|
|
|
+ except Exception as e:
|
|
|
+ print e
|
|
|
|
|
|
stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
|
|
|
common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
|
|
|
extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
- dashboards_directory = serverConfiguration.get_dashboard_location(configs)
|
|
|
mpacks_staging_directory = os.path.join(mpacks_directory, "mystack-ambari-mpack-1.0.0.0")
|
|
|
+ resources_directory = configs[serverConfiguration.RESOURCES_DIR_PROPERTY]
|
|
|
+ dashboards_directory = os.path.join(resources_directory, "dashboards")
|
|
|
|
|
|
run_os_command_calls = [
|
|
|
call([
|
|
@@ -377,6 +398,7 @@ class TestMpacks(TestCase):
|
|
|
"SERVICEB", None)
|
|
|
]
|
|
|
|
|
|
+ os_path_exists_mock.assert_has_calls(os_path_exists_calls)
|
|
|
self.assertTrue(purge_stacks_and_mpacks_mock.called)
|
|
|
run_os_command_mock.assert_has_calls(run_os_command_calls)
|
|
|
os_mkdir_mock.assert_has_calls(os_mkdir_calls)
|
|
@@ -403,8 +425,8 @@ class TestMpacks(TestCase):
|
|
|
expand_mpack_mock.return_value = "mpacks/myextension-ambari-mpack-1.0.0.0"
|
|
|
get_ambari_version_mock.return_value = "2.4.0.0"
|
|
|
|
|
|
- os_path_exists_mock.side_effect = [True, True, True, False, True, False, False, False,
|
|
|
- False, True, False, False, False]
|
|
|
+ os_path_exists_mock.side_effect = [True, True, True, True, False, True, False, False, False,
|
|
|
+ False, True, True, False, False, False]
|
|
|
get_ambari_properties_mock.return_value = configs
|
|
|
shutil_move_mock.return_value = True
|
|
|
|
|
@@ -413,10 +435,12 @@ class TestMpacks(TestCase):
|
|
|
extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
mpacks_staging_directory = os.path.join(mpacks_directory, "myextension-ambari-mpack-1.0.0.0")
|
|
|
- dashboards_directory = serverConfiguration.get_dashboard_location(configs)
|
|
|
+ resources_directory = configs[serverConfiguration.RESOURCES_DIR_PROPERTY]
|
|
|
+ dashboards_directory = os.path.join(resources_directory, "dashboards")
|
|
|
|
|
|
os_path_exists_calls = [call('/tmp/myextension.tar.gz'),
|
|
|
call('mpacks/myextension-ambari-mpack-1.0.0.0/mpack.json'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks'),
|
|
|
call('/var/lib/ambari-server/resources/extensions'),
|
|
|
call('/var/lib/ambari-server/resources/common-services'),
|
|
@@ -424,6 +448,7 @@ class TestMpacks(TestCase):
|
|
|
call(mpacks_directory + '/cache'),
|
|
|
call('/var/lib/ambari-server/resources/dashboards'),
|
|
|
call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/extensions'),
|
|
|
call('/var/lib/ambari-server/resources/extensions/MYEXTENSION'),
|
|
|
call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/extensions/MYEXTENSION/1.0/services'),
|
|
@@ -476,9 +501,9 @@ class TestMpacks(TestCase):
|
|
|
expand_mpack_mock.return_value = "mpacks/myservice-ambari-mpack-1.0.0.0"
|
|
|
get_ambari_version_mock.return_value = "2.4.0.0"
|
|
|
|
|
|
- os_path_exists_mock.side_effect = [True, True, True, True, True, True,
|
|
|
- True, True, False, False, False, False,
|
|
|
- True, True, True, False, True, True,
|
|
|
+ os_path_exists_mock.side_effect = [True, True, True, True, True, True, True,
|
|
|
+ True, True, False, False, True, False, False,
|
|
|
+ True, True, True, True, False, True, True,
|
|
|
True, False]
|
|
|
|
|
|
get_ambari_properties_mock.return_value = configs
|
|
@@ -491,11 +516,13 @@ class TestMpacks(TestCase):
|
|
|
common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
mpacks_staging_directory = os.path.join(mpacks_directory, "myservice-ambari-mpack-1.0.0.0")
|
|
|
- dashboards_directory = serverConfiguration.get_dashboard_location(configs)
|
|
|
+ resources_directory = configs[serverConfiguration.RESOURCES_DIR_PROPERTY]
|
|
|
+ dashboards_directory = os.path.join(resources_directory, "dashboards")
|
|
|
|
|
|
os_path_exists_calls = [call('/tmp/myservice.tar.gz'),
|
|
|
call('mpacks/myservice-ambari-mpack-1.0.0.0/mpack.json'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks'),
|
|
|
call('/var/lib/ambari-server/resources/extensions'),
|
|
|
call('/var/lib/ambari-server/resources/common-services'),
|
|
@@ -503,8 +530,10 @@ class TestMpacks(TestCase):
|
|
|
call(mpacks_directory + '/cache'),
|
|
|
call('/var/lib/ambari-server/resources/dashboards'),
|
|
|
call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/common-services/MYSERVICE'),
|
|
|
call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/common-services/MYSERVICE/1.0.0/dashboards'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
|
|
@@ -562,14 +591,14 @@ class TestMpacks(TestCase):
|
|
|
get_ambari_version_mock.return_value = "2.4.0.0"
|
|
|
run_os_command_mock.return_value = (0, "", "")
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
- os_path_exists_mock.side_effect = [True, True, True, True, True, True, True, True,
|
|
|
- True, True, True, True, True, True, True, False,
|
|
|
- False, True, False, False, True, False, False,
|
|
|
- False, False, False, True, True, True, False,
|
|
|
- True, True, False, True, True, False, False,
|
|
|
- False, False, False, True, True, True, True,
|
|
|
- True, True, True, False, True, False, True, True,
|
|
|
- True, True, True, True]
|
|
|
+ os_path_exists_mock.side_effect = [True, True, True, True, True, True, True, True, True, True,
|
|
|
+ True, True, True, True, True, True, True, False, False, True,
|
|
|
+ True, False, False, True, False, False, False, False, False, True,
|
|
|
+ True, True, True, False, True, True, False, True, True, False,
|
|
|
+ False, False, False, False, True, True, True, True, True, True,
|
|
|
+ True, False, True, False, True, True, True, True, True, True,
|
|
|
+ True]
|
|
|
+
|
|
|
get_ambari_properties_mock.return_value = configs
|
|
|
shutil_move_mock.return_value = True
|
|
|
|
|
@@ -579,10 +608,12 @@ class TestMpacks(TestCase):
|
|
|
common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
|
|
|
mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
|
|
|
mpacks_staging_directory = os.path.join(mpacks_directory, "mystack-ambari-mpack-1.0.0.1")
|
|
|
- dashboards_directory = serverConfiguration.get_dashboard_location(configs)
|
|
|
+ resources_directory = configs[serverConfiguration.RESOURCES_DIR_PROPERTY]
|
|
|
+ dashboards_directory = os.path.join(resources_directory, "dashboards")
|
|
|
|
|
|
os_path_exists_calls = [call('/tmp/mystack-1.0.0.1.tar.gz'),
|
|
|
call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call(mpacks_directory),
|
|
|
call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/mpack.json'),
|
|
|
call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'),
|
|
@@ -591,6 +622,7 @@ class TestMpacks(TestCase):
|
|
|
call('/tmp/mystack-1.0.0.1.tar.gz'),
|
|
|
call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'),
|
|
|
call('mpacks/mystack-ambari-mpack-1.0.0.1/hooks/before_upgrade.py'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks'),
|
|
|
call('/var/lib/ambari-server/resources/extensions'),
|
|
|
call('/var/lib/ambari-server/resources/common-services'),
|
|
@@ -598,6 +630,7 @@ class TestMpacks(TestCase):
|
|
|
call(mpacks_directory + '/cache'),
|
|
|
call('/var/lib/ambari-server/resources/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/common-services/SERVICEA'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEA/1.0/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEA/2.0/dashboards'),
|
|
@@ -607,6 +640,7 @@ class TestMpacks(TestCase):
|
|
|
call('/var/lib/ambari-server/resources/common-services/SERVICEC'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEC/1.0.0/dashboards'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEC/2.0.0/dashboards'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
|
|
|
call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
|
|
@@ -631,6 +665,7 @@ class TestMpacks(TestCase):
|
|
|
call('/var/lib/ambari-server/resources/dashboards/grafana-dashboards/SERVICEC'),
|
|
|
call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/SERVICEC.txt'),
|
|
|
call('/var/lib/ambari-server/resources/dashboards/service-metrics/SERVICEC.txt'),
|
|
|
+ call('/var/lib/ambari-server/resources'),
|
|
|
call(mpacks_directory),
|
|
|
call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/mpack.json'),
|
|
|
call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'),
|
|
@@ -775,7 +810,7 @@ class TestMpacks(TestCase):
|
|
|
serverConfiguration.COMMON_SERVICES_PATH_PROPERTY : os.path.join(uninstall_directory, "common-services"),
|
|
|
serverConfiguration.EXTENSION_PATH_PROPERTY : os.path.join(uninstall_directory, "extensions"),
|
|
|
serverConfiguration.MPACKS_STAGING_PATH_PROPERTY : mpacks_directory,
|
|
|
- serverConfiguration.DASHBOARD_PATH_PROPERTY : os.path.join(uninstall_directory, "dashboards"),
|
|
|
+ serverConfiguration.RESOURCES_DIR_PROPERTY : uninstall_directory,
|
|
|
serverConfiguration.SERVER_TMP_DIR_PROPERTY : "/tmp"
|
|
|
}
|
|
|
|
|
@@ -784,7 +819,8 @@ class TestMpacks(TestCase):
|
|
|
stacks_directory = fake_configs[serverConfiguration.STACK_LOCATION_KEY]
|
|
|
extension_directory = fake_configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
|
|
|
common_services_directory = fake_configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
|
|
|
- dashboard_directory = fake_configs[serverConfiguration.DASHBOARD_PATH_PROPERTY]
|
|
|
+ resources_directory = fake_configs[serverConfiguration.RESOURCES_DIR_PROPERTY]
|
|
|
+ dashboards_directory = os.path.join(resources_directory, "dashboards")
|
|
|
|
|
|
_uninstall_mpack("mystack-ambari-mpack", "1.0.0.1")
|
|
|
|
|
@@ -794,8 +830,8 @@ class TestMpacks(TestCase):
|
|
|
call(os.path.join(stacks_directory, "2.0/files/metainfo2.xml")),
|
|
|
call(os.path.join(extension_directory, "SERVICEB")),
|
|
|
call(os.path.join(common_services_directory, "SERVICEB")),
|
|
|
- call(os.path.join(dashboard_directory, "SERVICEB")),
|
|
|
- call(os.path.join(dashboard_directory, "files/STORM.txt"))]
|
|
|
+ call(os.path.join(dashboards_directory, "SERVICEB")),
|
|
|
+ call(os.path.join(dashboards_directory, "files/STORM.txt"))]
|
|
|
|
|
|
def _create_empty_options_mock(self):
|
|
|
options = MagicMock()
|