Skip to content

Commit

Permalink
Merge pull request #441 from Libensemble/testing/forces_output_tests
Browse files Browse the repository at this point in the history
Forces - Functions to test ensemble_dir, exception logging
  • Loading branch information
jlnav committed May 7, 2020
2 parents 68ec448 + 2772e3e commit 0a65b65
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 11 deletions.
10 changes: 10 additions & 0 deletions libensemble/tests/scaling_tests/forces/forces.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
_a < _b ? _a : _b; })

// Flags 0 or 1
#define PRINT_HOSTNAME_ALL_PROCS 1
#define PRINT_PARTICLE_DECOMP 0
#define PRINT_ALL_PARTICLES 0
#define CHECK_THREADS 0
Expand Down Expand Up @@ -364,6 +365,15 @@ int main(int argc, char **argv) {
printf("Random seed: %d\n",rand_seed);
}

if (PRINT_HOSTNAME_ALL_PROCS) {
MPI_Barrier(MPI_COMM_WORLD);
check_threads(rank);
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
printf("Proc: %d is on node %s\n", rank, processor_name);
}

if (CHECK_THREADS) {
check_threads(rank);
}
Expand Down
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)

0 comments on commit 0a65b65

Please sign in to comment.