Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Forces - Functions to test ensemble_dir, exception logging #441

Merged
merged 3 commits into from
May 7, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
67 changes: 67 additions & 0 deletions libensemble/tests/scaling_tests/forces/forces_support.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import os

outfiles = ['err.txt', 'forces.stat', 'out.txt']


def check_log_exception():
with open('ensemble.log', 'r') as el:
out = el.readlines()
assert 'forces_simf.ForcesException\n' in out, \
"ForcesException not received by manager or logged."


def test_libe_stats(status):
with open('libE_stats.txt', 'r') as ls:
out = ls.readlines()
assert all([line.endswith(status) for line in out if 'sim' in line]), \
"Deliberate error status not logged or raised for all sim instances."


def test_ensemble_dir(libE_specs, dir, nworkers, sim_max):
if not os.path.isdir(dir):
print('Specified ensemble directory {} not found.'.format(dir))
return

if not libE_specs.get('sim_dirs_make'):
print('Typical tests of ensemble directories dont apply without sim_dirs.')
return

if libE_specs.get('use_worker_dirs'):
assert len(os.listdir(dir)) == nworkers, \
"Number of worker directories ({}) doesn't match nworkers ({})".format(len(os.listdir(dir)), nworkers)

num_sim_dirs = 0
files_found = []

worker_dirs = [i for i in os.listdir(dir) if i.startswith('worker')]
for worker_dir in worker_dirs:
sim_dirs = [i for i in os.listdir(os.path.join(dir, worker_dir)) if i.startswith('sim')]
num_sim_dirs += len(sim_dirs)

for sim_dir in sim_dirs:
files_found.append(all([i in os.listdir(os.path.join(dir, worker_dir, sim_dir))
for i in outfiles]))

assert num_sim_dirs == sim_max, \
"Number of simulation specific-directories ({}) doesn't match sim_max ({})".format(num_sim_dirs, sim_max)

assert all(files_found), \
"Set of expected files ['err.txt', 'forces.stat', 'out.txt'] not found in each sim_dir."

else:
sim_dirs = os.listdir(dir)
assert all([i.startswith('sim') for i in sim_dirs]), \
"All directories within ensemble dir not labeled as (or aren't) sim_dirs."

assert len(sim_dirs) == sim_max, \
"Number of simulation specific-directories ({}) doesn't match sim_max ({})".format(len(sim_dirs), sim_max)

files_found = []
for sim_dir in sim_dirs:
files_found.append(all([i in os.listdir(os.path.join(dir, sim_dir))
for i in outfiles]))

assert all(files_found), \
"Set of expected files ['err.txt', 'forces.stat', 'out.txt'] not found in each sim_dir."

print('Output directory {} passed tests.'.format(dir))
14 changes: 3 additions & 11 deletions libensemble/tests/scaling_tests/forces/run_libe_forces.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from libensemble.libE_manager import ManagerException
from libensemble.tools import parse_args, save_libE_output, add_unique_random_streams
from libensemble import libE_logger
from forces_support import test_libe_stats, test_ensemble_dir, check_log_exception

USE_BALSAM = False
PERSIS_GEN = False
Expand All @@ -20,13 +21,6 @@
from libensemble.alloc_funcs.give_sim_work_first import give_sim_work_first as alloc_f


def test_libe_stats(status):
with open('libE_stats.txt', 'r') as ls:
out = ls.readlines()
assert all([line.endswith(status) for line in out if 'sim' in line]), \
"Deliberate error status not logged or raised for all sim instances."


libE_logger.set_level('INFO') # INFO is now default

nworkers, is_master, libE_specs, _ = parse_args()
Expand Down Expand Up @@ -108,13 +102,11 @@ def test_libe_stats(status):

except ManagerException:
if is_master and sim_specs['user']['fail_on_sim']:
with open('ensemble.log', 'r') as el:
out = el.readlines()
assert 'forces_simf.ForcesException\n' in out, \
"ForcesException not received by manager or logged."
check_log_exception()
test_libe_stats('Exception occurred\n')
else:
if is_master:
save_libE_output(H, persis_info, __file__, nworkers)
if sim_specs['user']['fail_on_submit']:
test_libe_stats('Task Failed\n')
test_ensemble_dir(libE_specs, './ensemble', nworkers, sim_max)