diff --git a/test/test_fb_users.py b/test/test_fb_users.py index fa3c0d8b39f17ad47b452e12efa06fd513d91825..25a2ed8412db7bb5885e0250749018af3109df6c 100644 --- a/test/test_fb_users.py +++ b/test/test_fb_users.py @@ -95,18 +95,51 @@ def test_tt_only_simple_workload(): launch_fb_test_1user(user_category='fb_user_think_time_only', test_input='proto_SABjson_v2') +def assert_simu_output_are_close_enough(out_dir1, out_dir2): + """Returns true if the jobs.csv in both directories are epsilon-close (for + the normalized euclidean distance) for each of the fields submission time, + start time and finish time.""" + epsilon = 1e-6 # precision of 0.0001% + + dis = distances(f"{out_dir1}/_jobs.csv", f"{out_dir2}/_jobs.csv", + euclidean=False, norm_eucl=True, + field=["submission_time", "starting_time", "finish_time"]) + assert dis["submission_time"]["normalized_euclidean"] < epsilon + assert dis["starting_time"]["normalized_euclidean"] < epsilon + assert dis["finish_time"]["normalized_euclidean"] < epsilon + + def test_tt_only_multiuser(): - """4 users generated from the 10 first days of metacentrum log.""" + """Workload: 4 users taken from the 10 first days of metacentrum log. + This tests checks: + - that the simulation with feedback doesn't fail for multiuser instances + - that the simulation outputs are "very close" to the rigid replay, no + matter the delimitation approach, because the platform is oversized. + To test the "closeness" we make use of custom distances (see batmen-tools). + """ names = ["user5", "user9", "user10", "user11"] - category = "fb_user_think_time_only" + # Launch a simulation with replay rigid, for comparison + category = "replay_user_rigid" + test_name = "mc_10days" + jsons = [f"test/workloads/split_by_user/{user}.json" for user in names] + make_fb_user_description_file( + user_name=names, user_category=[category]*4, input_json=jsons) + rigid_dir = run_user(category, mc_europar_platform, empty_workload, + test_name=f'{category}-{test_name}', schedconf=schedconf_file) + + + # Launch feedback users on the same original log, and compare with rigid + category = "fb_user_think_time_only" + # mc_10_days_a60 test_name = "mc_10days_a60" jsons = [f"test/workloads/SABjson/{test_name}/{user}.SABjson" for user in names] make_fb_user_description_file( user_name=names, user_category=[category]*4, input_json=jsons) - run_user(category, mc_europar_platform, empty_workload, - test_name=f'{category}-{test_name}', schedconf=schedconf_file) + feedback_dir = run_user(category, mc_europar_platform, empty_workload, + test_name=f'{category}-{test_name}', schedconf=schedconf_file) + assert_simu_output_are_close_enough(feedback_dir, rigid_dir) # mc_10_days_l60 test_name = "mc_10days_l60" @@ -115,6 +148,7 @@ def test_tt_only_multiuser(): user_name=names, user_category=[category]*4, input_json=jsons) run_user(category, mc_europar_platform, empty_workload, test_name=f'{category}-{test_name}', schedconf=schedconf_file) + assert_simu_output_are_close_enough(feedback_dir, rigid_dir) # mc_10_days_m60 @@ -124,13 +158,7 @@ def test_tt_only_multiuser(): user_name=names, user_category=[category]*4, input_json=jsons) run_user(category, mc_europar_platform, empty_workload, test_name=f'{category}-{test_name}', schedconf=schedconf_file) + assert_simu_output_are_close_enough(feedback_dir, rigid_dir) - # Replay rigid, for comparison - category = "replay_user_rigid" - test_name = "mc_10days" - jsons = [f"test/workloads/split_by_user/{user}.json" for user in names] - make_fb_user_description_file( - user_name=names, user_category=[category]*4, input_json=jsons) - run_user(category, mc_europar_platform, empty_workload, - test_name=f'{category}-{test_name}', schedconf=schedconf_file) +