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

Batch fix reorder scripts regression tests #411

Merged
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cime_config/cesm/config_files.xml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@

<entry id="CONFIG_TESTS_FILE">
<type>char</type>
<default_value>$CIMEROOT/scripts/Testing/Testcases/config_tests.xml</default_value>
<default_value>$CIMEROOT/cime_config/config_tests.xml</default_value>
<group>test</group>
<file>env_test.xml</file>
<desc>file containing system test descriptions </desc>
Expand Down
3 changes: 2 additions & 1 deletion cime_config/cesm/machines/config_batch.xml
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,8 @@

<batch_system MACH="yellowstone" type="lsf" version="9.1">
<queues>
<queue walltimemax="24:00" jobmin="1" jobmax="8">caldera</queue>
<queue walltimemax="24:00" jobmin="1" jobmax="1" jobname="case.lt_archive">hpss</queue>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

adds support for jobname allowing a special queue for a certain job

<queue walltimemax="24:00" jobmin="1" jobmax="8" >caldera</queue>
<queue walltimemax="12:00" jobmin="9" jobmax="16384" default="true">regular</queue>
<queue walltimemax="12:00" jobmin="16385" jobmax="65536">capability</queue>
</queues>
Expand Down
12 changes: 9 additions & 3 deletions utils/python/CIME/XML/env_batch.py
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ def set_job_defaults(self, bjobs, pesize=None, walltime=None, force_queue=None):
else:
task_count = int(task_count)

queue = force_queue if force_queue is not None else self.select_best_queue(task_count)
queue = force_queue if force_queue is not None else self.select_best_queue(task_count, job)
self.set_value("JOB_QUEUE", queue, subgroup=job)

walltime = self.get_max_walltime(queue) if walltime is None else walltime
Expand Down Expand Up @@ -330,6 +330,8 @@ def get_submit_args(self, case, job):
if name is None:
submitargs+=" %s"%flag
else:
if name.startswith("$"):
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correct parsing of name field in queue

name = name[1:]
val = case.get_value(name,subgroup=job)
if val is None:
val = case.get_resolved_value(name)
Expand Down Expand Up @@ -464,7 +466,7 @@ def get_job_id(self, output):
jobid = re.search(jobid_pattern, output).group(1)
return jobid

def select_best_queue(self, num_pes):
def select_best_queue(self, num_pes, job=None):
# Make sure to check default queue first.
all_queues = []
all_queues.append( self.get_default_queue())
Expand All @@ -473,8 +475,12 @@ def select_best_queue(self, num_pes):
if queue is not None:
jobmin = queue.get("jobmin")
jobmax = queue.get("jobmax")
jobname = queue.get("jobname")
if jobname is not None:
if job == jobname:
return queue.text
# if the fullsum is between the min and max # jobs, then use this queue.
if jobmin is not None and jobmax is not None and num_pes >= int(jobmin) and num_pes <= int(jobmax):
elif jobmin is not None and jobmax is not None and num_pes >= int(jobmin) and num_pes <= int(jobmax):
return queue.text
return None

Expand Down
44 changes: 22 additions & 22 deletions utils/python/tests/scripts_regression_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,15 +113,15 @@ def setup_proxy():
return False

###############################################################################
class B_TestCreateNewcase(unittest.TestCase):
class J_TestCreateNewcase(unittest.TestCase):
###############################################################################
def setUp(self):
self._testroot = MACHINE.get_value("CESMSCRATCHROOT")
self._testdirs = []
self._do_teardown = []

def test_createnewcase(self):
testdir = os.path.join(self._testroot, 'scripts_regression_tests.testcreatenewcase')
testdir = os.path.join(self._testroot, 'scripts_regression_tests.testcreatenewcase.%s'% CIME.utils.get_utc_timestamp())
if os.path.exists(testdir):
shutil.rmtree(testdir)
self._testdirs.append(testdir)
Expand All @@ -137,7 +137,7 @@ def test_createnewcase(self):
self._do_teardown.append(testdir)

def test_user_mods(self):
testdir = os.path.join(self._testroot, 'scripts_regression_tests.testusermods')
testdir = os.path.join(self._testroot, 'scripts_regression_tests.testusermods.%s'% CIME.utils.get_utc_timestamp())
if os.path.exists(testdir):
shutil.rmtree(testdir)
self._testdirs.append(testdir)
Expand All @@ -162,17 +162,17 @@ def tearDown(self):
elif do_teardown:
shutil.rmtree(tfile)
###############################################################################
class D_TestWaitForTests(unittest.TestCase):
class M_TestWaitForTests(unittest.TestCase):
###############################################################################

###########################################################################
def setUp(self):
###########################################################################
self._testroot = MACHINE.get_value("CESMSCRATCHROOT")
self._testdir_all_pass = os.path.join(self._testroot, 'scripts_regression_tests.testdir_all_pass')
self._testdir_with_fail = os.path.join(self._testroot, 'scripts_regression_tests.testdir_with_fail')
self._testdir_unfinished = os.path.join(self._testroot, 'scripts_regression_tests.testdir_unfinished')
self._testdir_unfinished2 = os.path.join(self._testroot, 'scripts_regression_tests.testdir_unfinished2')
self._testdir_all_pass = os.path.join(self._testroot, 'scripts_regression_tests.testdir_all_pass.%s'% CIME.utils.get_utc_timestamp())
self._testdir_with_fail = os.path.join(self._testroot, 'scripts_regression_tests.testdir_with_fail.%s'% CIME.utils.get_utc_timestamp())
self._testdir_unfinished = os.path.join(self._testroot, 'scripts_regression_tests.testdir_unfinished.%s'% CIME.utils.get_utc_timestamp())
self._testdir_unfinished2 = os.path.join(self._testroot, 'scripts_regression_tests.testdir_unfinished2.%s'% CIME.utils.get_utc_timestamp())
testdirs = [self._testdir_all_pass, self._testdir_with_fail, self._testdir_unfinished, self._testdir_unfinished2]
for testdir in testdirs:
if os.path.exists(testdir):
Expand Down Expand Up @@ -417,7 +417,7 @@ def tearDown(self):
os.remove(file_to_clean)

###############################################################################
class C_TestCreateTest(TestCreateTestCommon):
class N_TestCreateTest(TestCreateTestCommon):
###############################################################################

###########################################################################
Expand Down Expand Up @@ -472,7 +472,7 @@ def test_create_test_rebless_namelist(self):
self.simple_test(True, "-c -n -b %s -t %s-%s" % (self._baseline_name, self._baseline_name, CIME.utils.get_utc_timestamp()))

###############################################################################
class E_TestTestScheduler(TestCreateTestCommon):
class O_TestTestScheduler(TestCreateTestCommon):
###############################################################################

###########################################################################
Expand Down Expand Up @@ -609,7 +609,7 @@ def test_b_full(self):
self.assertEqual(ts.get_status(MEMLEAK_PHASE), TEST_PASS_STATUS)

###############################################################################
class TestJenkinsGenericJob(TestCreateTestCommon):
class P_TestJenkinsGenericJob(TestCreateTestCommon):
###############################################################################

###########################################################################
Expand Down Expand Up @@ -705,7 +705,7 @@ def test_jenkins_generic_job_kill(self):
assert_dashboard_has_build(self, build_name)

###############################################################################
class TestBlessTestResults(TestCreateTestCommon):
class Q_TestBlessTestResults(TestCreateTestCommon):
###############################################################################

_test_name = "TESTRUNDIFF_Mmpi-serial.f19_g16_rx1.A"
Expand Down Expand Up @@ -761,7 +761,7 @@ def test_bless_test_results(self):

###############################################################################
@unittest.skip("Disabling this test until we figure out how to integrate ACME tests and CIME xml files.")
class TestUpdateACMETests(unittest.TestCase):
class R_TestUpdateACMETests(unittest.TestCase):
###############################################################################

###########################################################################
Expand Down Expand Up @@ -868,7 +868,7 @@ def test_full_system(self):
self.assertTrue(test_time > 0, msg="test time was zero for %s" % test_status)

###############################################################################
class TestCimeCase(TestCreateTestCommon):
class K_TestCimeCase(TestCreateTestCommon):
###############################################################################

###########################################################################
Expand Down Expand Up @@ -910,7 +910,7 @@ def test_cime_case(self):
self.assertEqual(case.get_value("PIO_TYPENAME"), "netcdf")

###############################################################################
class TestSingleSubmit(TestCreateTestCommon):
class X_TestSingleSubmit(TestCreateTestCommon):
###############################################################################

###########################################################################
Expand All @@ -933,7 +933,7 @@ def test_single_submit(self):
msg="COMMAND SHOULD HAVE WORKED\nwait_for_tests output:\n%s\n\nerrput:\n%s\n\ncode: %d" % (output, errput, stat))

###############################################################################
class TestSaveTimings(TestCreateTestCommon):
class L_TestSaveTimings(TestCreateTestCommon):
###############################################################################

###########################################################################
Expand All @@ -954,7 +954,7 @@ def test_save_timings(self):
msg="COMMAND SHOULD HAVE WORKED\nwait_for_tests output:\n%s\n\nerrput:\n%s\n\ncode: %d" % (output, errput, stat))

###############################################################################
class TestXMLQuery(unittest.TestCase):
class C_TestXMLQuery(unittest.TestCase):
# Testing command line scripts
###############################################################################

Expand All @@ -964,7 +964,7 @@ def setUp(self):
self._testdirs = []
self._do_teardown = []

testdir = os.path.join(self._testroot, 'scripts_regression_tests.testscripts')
testdir = os.path.join(self._testroot, 'scripts_regression_tests.testscripts.%s'% CIME.utils.get_utc_timestamp())
machine = 'melvin'
if os.path.exists(testdir):
shutil.rmtree(testdir)
Expand Down Expand Up @@ -1037,7 +1037,7 @@ def test_subgroup(self):
self.assertEqual(searchObj.group() , group_out)

###############################################################################
class CheckCode(unittest.TestCase):
class B_CheckCode(unittest.TestCase):
###############################################################################

###########################################################################
Expand Down Expand Up @@ -1283,7 +1283,7 @@ def assert_variable_matches(self, var_name, regex, env=None, var=None):


###############################################################################
class TestMacrosBasic(unittest.TestCase):
class G_TestMacrosBasic(unittest.TestCase):
###############################################################################

"""Basic infrastructure tests.
Expand Down Expand Up @@ -1317,7 +1317,7 @@ def test_script_rejects_bad_build_system(self):


###############################################################################
class TestMakeMacros(unittest.TestCase):
class H_TestMakeMacros(unittest.TestCase):
###############################################################################

"""Makefile macros tests.
Expand Down Expand Up @@ -1592,7 +1592,7 @@ def test_variable_insertion_with_machine_specific_setting(self):

###############################################################################
@unittest.skipIf(FAST_ONLY, "Skipping slow CMake tests.")
class TestCMakeMacros(TestMakeMacros):
class I_TestCMakeMacros(H_TestMakeMacros):
###############################################################################

"""CMake macros tests.
Expand Down