diff --git a/lib/ramble/ramble/test/end_to_end/shared_context.py b/lib/ramble/ramble/test/end_to_end/shared_context.py new file mode 100644 index 000000000..a5d57868f --- /dev/null +++ b/lib/ramble/ramble/test/end_to_end/shared_context.py @@ -0,0 +1,84 @@ +# Copyright 2022-2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 or the MIT license +# , at your +# option. This file may not be copied, modified, or distributed +# except according to those terms. + +import os +import glob + +import pytest + +import ramble.workspace +import ramble.config +import ramble.software_environments +from ramble.main import RambleCommand + + +# everything here uses the mock_workspace_path +pytestmark = pytest.mark.usefixtures('mutable_config', + 'mutable_mock_workspace_path', + 'mock_applications', + 'mock_modifiers', + ) + +workspace = RambleCommand('workspace') + + +def test_shared_contexts(mutable_config, mutable_mock_workspace_path, mock_applications, mock_modifiers): + test_config = """ +ramble: + variables: + mpi_command: 'mpirun -n {n_ranks} -ppn {processes_per_node}' + batch_submit: 'batch_submit {execute_experiment}' + partition: 'part1' + processes_per_node: '1' + n_threads: '1' + applications: + shared-context: + workloads: + test_wl: + experiments: + simple_test: + modifiers: + - name: test-mod + variables: + n_nodes: 1 + spack: + concretized: true + packages: {} + environments: {} +""" + workspace_name = 'test_shared_context' + with ramble.workspace.create(workspace_name) as ws: + ws.write() + + config_path = os.path.join(ws.config_dir, ramble.workspace.config_file_name) + + with open(config_path, 'w+') as f: + f.write(test_config) + ws._re_read() + + workspace('setup', '--dry-run', global_args=['-w', workspace_name]) + + # Create fake figures of merit. + exp_dir = os.path.join(ws.root, 'experiments', 'shared-context', 'test_wl', 'simple_test') + with open(os.path.join(exp_dir, 'simple_test.out'), 'w+') as f: + f.write('fom_context mod_context\n') + f.write('123.4 seconds app_fom\n') + + with open(os.path.join(exp_dir, 'test_analysis.log'), 'w+') as f: + f.write("fom_contextFOM_GOES_HERE") + + workspace('analyze', '-f', 'text', 'json', global_args=['-w', workspace_name]) + + results_files = glob.glob(os.path.join(ws.root, 'results.latest.txt')) + + with open(results_files[0], 'r') as f: + data = f.read() + assert 'matched_shared_context' in data # find the merged context + assert 'test_fom = 123.4' in data # from the app + assert 'shared_context_fom' in data # from the mod + diff --git a/var/ramble/repos/builtin.mock/modifiers/test-mod/modifier.py b/var/ramble/repos/builtin.mock/modifiers/test-mod/modifier.py index 960f1e866..186c244d8 100644 --- a/var/ramble/repos/builtin.mock/modifiers/test-mod/modifier.py +++ b/var/ramble/repos/builtin.mock/modifiers/test-mod/modifier.py @@ -31,8 +31,13 @@ class TestMod(BasicModifier): figure_of_merit('test_mod_fom', fom_regex=fom_regex, group_name='fom', units='', log_file='{analysis_log}', contexts=['test_mod_context']) + figure_of_merit('shared_context_fom', fom_regex=fom_regex, group_name='fom', + units='', log_file='{analysis_log}', contexts=['test_shared_context']) + figure_of_merit_context('test_mod_context', regex=fom_regex, output_format='{context}') + figure_of_merit_context('test_shared_context', regex=fom_regex, output_format='matched_shared_context') + register_builtin('test_builtin', required=True, injection_method='append') def test_builtin(self):