Esempio n. 1
0
    def test_create(self):
        with TestAreaContext("run_context"):
            arg = None
            sim_fs = EnkfFs.createFileSystem("sim_fs",
                                             EnKFFSType.BLOCK_FS_DRIVER_ID,
                                             arg)
            target_fs = None

            mask = BoolVector(initial_size=100, default_value=True)
            mask[50] = False
            runpath_fmt = PathFormat("path/to/sim%d")
            subst_list = SubstitutionList()
            itr = 0
            jobname_fmt = "job%d"
            run_context1 = ErtRunContext(EnkfRunType.ENSEMBLE_EXPERIMENT,
                                         sim_fs, target_fs, mask, runpath_fmt,
                                         jobname_fmt, subst_list, itr)
            run_id1 = run_context1.get_id()

            run_arg0 = run_context1[0]
            with self.assertRaises(ValueError):
                run_arg0.getQueueIndex()

            self.assertEqual(run_arg0.iter_id, itr)
            self.assertEqual(run_id1, run_arg0.get_run_id())

            run_context2 = ErtRunContext(EnkfRunType.ENSEMBLE_EXPERIMENT,
                                         sim_fs, target_fs, mask, runpath_fmt,
                                         jobname_fmt, subst_list, itr)
            run_id2 = run_context2.get_id()

            self.assertFalse(run_id1 == run_id2)

            self.assertTrue(run_context1.is_active(49))
            self.assertFalse(run_context1.is_active(50))
Esempio n. 2
0
    def test_workflow_success(self):
        with TestAreaContext(
                "python/job_queue/workflow_runner_fast") as work_area:
            WorkflowCommon.createWaitJob()

            joblist = WorkflowJoblist()
            self.assertTrue(joblist.addJobFromFile("WAIT", "wait_job"))
            self.assertTrue(
                joblist.addJobFromFile("EXTERNAL_WAIT", "external_wait_job"))

            workflow = Workflow("fast_wait_workflow", joblist)

            self.assertEqual(len(workflow), 2)

            workflow_runner = WorkflowRunner(workflow,
                                             ert=None,
                                             context=SubstitutionList())

            self.assertFalse(workflow_runner.isRunning())
            with workflow_runner:
                workflow_runner.wait()
            self.assertFileExists("wait_started_0")
            self.assertFileDoesNotExist("wait_cancelled_0")
            self.assertFileExists("wait_finished_0")

            self.assertFileExists("wait_started_1")
            self.assertFileDoesNotExist("wait_cancelled_1")
            self.assertFileExists("wait_finished_1")

            self.assertTrue(workflow_runner.workflowResult())
Esempio n. 3
0
    def test_transfer_arg_types(self):
        with TestAreaContext(
                "python/job_queue/forward_model_transfer_arg_types"):
            with open("FWD_MODEL", "w") as f:
                f.write("EXECUTABLE ls\n")
                f.write("MIN_ARG 2\n")
                f.write("MAX_ARG 6\n")
                f.write("ARG_TYPE 0 INT\n")
                f.write("ARG_TYPE 1 FLOAT\n")
                f.write("ARG_TYPE 2 STRING\n")
                f.write("ARG_TYPE 3 BOOL\n")
                f.write("ARG_TYPE 4 RUNTIME_FILE\n")
                f.write("ARG_TYPE 5 RUNTIME_INT\n")

            job = ExtJob("FWD_MODEL", True)

            ext_joblist = ExtJoblist()
            ext_joblist.add_job(job.name(), job)
            forward_model = ForwardModel(ext_joblist)
            forward_model.add_job("FWD_MODEL")

            run_id = "test_no_jobs_id"
            umask = 4
            global_args = SubstitutionList()

            forward_model.formatted_fprintf(run_id, os.getcwd(), "data_root",
                                            global_args, umask,
                                            EnvironmentVarlist())
            config = load_configs(self.JOBS_JSON_FILE)
            printed_job = config["jobList"][0]
            self.assertEqual(printed_job["min_arg"], 2)
            self.assertEqual(printed_job["max_arg"], 6)
            self.assertEqual(printed_job["arg_types"], [
                "INT", "FLOAT", "STRING", "BOOL", "RUNTIME_FILE", "RUNTIME_INT"
            ])
Esempio n. 4
0
 def test_env_varlist(self):
     varlist_string = "global_environment"
     update_string = "global_update_path"
     first = "FIRST"
     second = "SECOND"
     third = "THIRD"
     first_value = "TheFirstValue"
     second_value = "TheSecondValue"
     third_value = "$FIRST:$SECOND"
     third_value_correct = "%s:%s" % (first_value, second_value)
     varlist = EnvironmentVarlist()
     varlist[first] = first_value
     varlist[second] = second_value
     varlist[third] = third_value
     self.assertEqual(len(varlist), 3)
     with TestAreaContext("python/job_queue/env_varlist"):
         forward_model = self.set_up_forward_model([])
         run_id = "test_no_jobs_id"
         umask = 4
         global_args = SubstitutionList()
         forward_model.formatted_fprintf(run_id, os.getcwd(), "data_root",
                                         global_args, umask, varlist)
         config = load_configs(self.JOBS_JSON_FILE)
         env_config = config[varlist_string]
         self.assertEqual(first_value, env_config[first])
         self.assertEqual(second_value, env_config[second])
         self.assertEqual(third_value_correct, env_config[third])
         update_config = config[update_string]
Esempio n. 5
0
    def test_assert_symlink_deleted(self):
        with ErtTestContext("create_runpath2" , self.createTestPath("local/snake_oil_field/snake_oil.ert")) as tc:
            ert = tc.getErt( )
            runpath_list = ert.getRunpathList( )

            ens_size = ert.getEnsembleSize( )
            runner = ert.getEnkfSimulationRunner( )
            mask = BoolVector( initial_size = ens_size , default_value = True )
            fs_manager = ert.getEnkfFsManager( )
            init_fs = fs_manager.getFileSystem("init_fs")

            # create directory structure
            runpath_fmt = ert.getModelConfig().getRunpathFormat( )
            subst_list = SubstitutionList( )
            itr = 0
            run_context = ErtRunContext( EnkfRunType.INIT_ONLY , init_fs, None , mask , runpath_fmt, subst_list , itr )
            runner.createRunPath( run_context )

            # replace field file with symlink
            linkpath = '%s/permx.grdcel' % str(runpath_list[0].runpath)
            targetpath = '%s/permx.grdcel.target' % str(runpath_list[0].runpath)
            open(targetpath, 'a').close()
            remove(linkpath)
            symlink(targetpath, linkpath)

            # recreate directory structure
            runner.createRunPath( run_context )

            # ensure field symlink is replaced by file
            self.assertFalse( path.islink(linkpath) )
Esempio n. 6
0
    def test_assert_export(self):
        with ErtTestContext(
                "create_runpath1",
                self.createTestPath(
                    "local/snake_oil_no_data/snake_oil.ert")) as tc:
            ert = tc.getErt()
            runpath_list = ert.getRunpathList()
            self.assertFalse(path.isfile(runpath_list.getExportFile()))

            ens_size = ert.getEnsembleSize()
            runner = ert.getEnkfSimulationRunner()
            fs_manager = ert.getEnkfFsManager()

            init_fs = fs_manager.getFileSystem("init_fs")
            mask = BoolVector(initial_size=100, default_value=True)
            runpath_fmt = ert.getModelConfig().getRunpathFormat()
            subst_list = SubstitutionList()
            itr = 0
            run_context1 = ErtRunContext(EnkfRunType.INIT_ONLY, init_fs, None,
                                         None, mask, runpath_fmt, subst_list,
                                         itr)

            runner.createRunPath(run_context1)

            self.assertTrue(path.isfile(runpath_list.getExportFile()))
            self.assertEqual("test_runpath_list.txt",
                             path.basename(runpath_list.getExportFile()))
Esempio n. 7
0
    def test_workflow_thread_cancel_external(self):
        with TestAreaContext(
                "python/job_queue/workflow_runner_external") as work_area:
            WorkflowCommon.createWaitJob()

            joblist = WorkflowJoblist()
            self.assertTrue(joblist.addJobFromFile("WAIT",
                                                   "external_wait_job"))
            self.assertTrue("WAIT" in joblist)

            workflow = Workflow("wait_workflow", joblist)

            self.assertEqual(len(workflow), 3)

            workflow_runner = WorkflowRunner(workflow,
                                             ert=None,
                                             context=SubstitutionList())

            self.assertFalse(workflow_runner.isRunning())

            with workflow_runner:
                wait_until(
                    lambda: self.assertTrue(workflow_runner.isRunning()))
                wait_until(lambda: self.assertFileExists("wait_started_0"))
                wait_until(lambda: self.assertFileExists("wait_finished_0"))
                wait_until(lambda: self.assertFileExists("wait_started_1"))
                workflow_runner.cancel()
                self.assertTrue(workflow_runner.isCancelled())

            self.assertFileDoesNotExist("wait_finished_1")
            self.assertFileDoesNotExist("wait_started_2")
            self.assertFileDoesNotExist("wait_cancelled_2")
            self.assertFileDoesNotExist("wait_finished_2")
Esempio n. 8
0
    def run_all(self):
        forward_model = self.set_up_forward_model(range(len(joblist)))
        umask = 0
        run_id = "run_all"
        global_args = SubstitutionList()
        forward_model.formatted_fprintf(run_id, os.getcwd(), "data_root",
                                        global_args, umask)

        self.verify_json_dump(range(len(joblist)), global_args, umask, run_id)
Esempio n. 9
0
    def test_no_jobs(self):
        with TestAreaContext("python/job_queue/forward_model_no_jobs"):
            forward_model = self.set_up_forward_model([])
            run_id = "test_no_jobs_id"
            umask = 4
            global_args = SubstitutionList()
            forward_model.formatted_fprintf(run_id, os.getcwd(), "data_root",
                                            global_args, umask)

            self.verify_json_dump([], global_args, umask, run_id)
    def test_one_job(self):
        with TestAreaContext("python/job_queue/forward_model_one_job"):
            for i in range(len(joblist)):
                forward_model = self.set_up_forward_model([i])
                run_id = "test_one_job"
                umask = 11
                global_args = SubstitutionList()
                forward_model.formatted_fprintf(run_id, os.getcwd(),
                                                global_args, umask)

                self.verify_json_dump([i], global_args, umask, run_id)
Esempio n. 11
0
    def test_failing_workflow_run(self):
        with TestAreaContext("python/job_queue/workflow") as work_area:
            WorkflowCommon.createExternalDumpJob()

            joblist = WorkflowJoblist()
            self.assertTrue(joblist.addJobFromFile("DUMP", "dump_job"))
            self.assertTrue("DUMP" in joblist)

            workflow = Workflow("undefined", joblist)
            context = SubstitutionList()

            self.assertFalse(workflow.run(None, verbose=True, context=context))
Esempio n. 12
0
    def test_workflow_run(self):
        with TestAreaContext("python/job_queue/workflow") as work_area:
            WorkflowCommon.createExternalDumpJob()

            joblist = WorkflowJoblist()
            self.assertTrue(joblist.addJobFromFile("DUMP", "dump_job"))
            self.assertTrue("DUMP" in joblist)

            workflow = Workflow("dump_workflow", joblist)

            self.assertTrue(len(workflow), 2)

            context = SubstitutionList()
            context.addItem("<PARAM>", "text")

            self.assertTrue(workflow.run(None, verbose=True, context=context))

            with open("dump1", "r") as f:
                self.assertEqual(f.read(), "dump_text_1")

            with open("dump2", "r") as f:
                self.assertEqual(f.read(), "dump_text_2")
Esempio n. 13
0
    def __init__(self, workflow, ert=None, context=None):
        """
         @type workflow: Workflow
         @type ert: res.enkf.EnKFMain
         @type context: SubstitutionList
        """
        super(WorkflowRunner, self).__init__()

        self.__workflow = workflow
        self.__ert = ert

        if context is None:
            context = SubstitutionList()

        self.__context = context
        self.__workflow_result = None
Esempio n. 14
0
    def __init__(self, workflow, ert=None, context=None):
        """
         @type workflow: Workflow
         @type ert: res.enkf.EnKFMain
         @type context: SubstitutionList
        """
        super(WorkflowRunner, self).__init__()

        self.__workflow = workflow
        self.__ert = ert

        if context is None:
            context = SubstitutionList()

        self.__context = context
        self.__workflow_result = None
        self._workflow_executor = futures.ThreadPoolExecutor(max_workers=1)
        self._workflow_job = None
Esempio n. 15
0
    def test_workflow_failed_job(self):
        with TestAreaContext("python/job_queue/workflow_runner_fails"):
            WorkflowCommon.createExternalDumpJob()

            joblist = WorkflowJoblist()
            self.assertTrue(joblist.addJobFromFile("DUMP", "dump_failing_job"))
            workflow = Workflow("dump_workflow", joblist)
            self.assertEqual(len(workflow), 2)

            workflow_runner = WorkflowRunner(
                workflow, ert=None, context=SubstitutionList()
            )

            self.assertFalse(workflow_runner.isRunning())
            with patch.object(
                Workflow, "run", side_effect=Exception("mocked workflow error")
            ), workflow_runner:
                workflow_runner.wait()
                self.assertNotEqual(workflow_runner.exception(), None)
    def test_status_file(self):
        with TestAreaContext("status_json"):
            forward_model = self.set_up_forward_model()
            run_id = "test_no_jobs_id"
            umask = 4
            global_args = SubstitutionList()
            varlist = EnvironmentVarlist()
            forward_model.formatted_fprintf(run_id, os.getcwd(), "data_root",
                                            global_args, umask, varlist)

            s = '{"start_time": null, "jobs": [{"status": "Success", "start_time": 1519653419.0, "end_time": 1519653419.0, "name": "SQUARE_PARAMS", "error": null, "current_memory_usage": 2000, "max_memory_usage": 3000}], "end_time": null, "run_id": ""}'

            with open("status.json", "w") as f:
                f.write(s)

            status = ForwardModelStatus.try_load("")
            for job in status.jobs:
                self.assertTrue(isinstance(job.start_time, datetime.datetime))
                self.assertTrue(isinstance(job.end_time, datetime.datetime))
Esempio n. 17
0
    def test_workflow_thread_cancel_external(self):
        with TestAreaContext(
                "python/job_queue/workflow_runner_external") as work_area:
            WorkflowCommon.createWaitJob()

            joblist = WorkflowJoblist()
            self.assertTrue(joblist.addJobFromFile("WAIT",
                                                   "external_wait_job"))
            self.assertTrue("WAIT" in joblist)

            workflow = Workflow("wait_workflow", joblist)

            self.assertEqual(len(workflow), 3)

            workflow_runner = WorkflowRunner(workflow,
                                             ert=None,
                                             context=SubstitutionList())

            self.assertFalse(workflow_runner.isRunning())

            workflow_runner.run()

            time.sleep(1)  # wait for workflow to start
            self.assertTrue(workflow_runner.isRunning())
            self.assertFileExists("wait_started_0")

            time.sleep(1)  # wait for first job to finish

            workflow_runner.cancel()
            time.sleep(1)  # wait for cancel to take effect
            self.assertFileExists("wait_finished_0")

            self.assertFileExists("wait_started_1")
            self.assertFileDoesNotExist("wait_finished_1")

            self.assertTrue(workflow_runner.isCancelled())

            workflow_runner.wait()  # wait for runner to complete

            self.assertFileDoesNotExist("wait_started_2")
            self.assertFileDoesNotExist("wait_cancelled_2")
            self.assertFileDoesNotExist("wait_finished_2")
Esempio n. 18
0
    def test_create(self):
        with TestAreaContext("run_context"):
            arg = None
            init_fs = EnkfFs.createFileSystem("init_fs", EnKFFSType.BLOCK_FS_DRIVER_ID, arg)
            result_fs = None
            target_fs = None

            mask = BoolVector( initial_size = 100 , default_value = True )
            runpath_fmt = PathFormat( "path/to/sim%d" )
            subst_list = SubstitutionList( )
            itr = 0
            run_context1 = ErtRunContext( EnkfRunType.ENSEMBLE_EXPERIMENT , init_fs, result_fs, target_fs , mask , runpath_fmt, subst_list , itr )
            run_id1 = run_context1.get_id( )
            run_arg0 = run_context1[0]
            self.assertEqual( run_id1 , run_arg0.get_run_id( ))
            
            run_context2 = ErtRunContext( EnkfRunType.ENSEMBLE_EXPERIMENT , init_fs, result_fs , target_fs, mask , runpath_fmt, subst_list , itr )
            run_id2 = run_context2.get_id( )

            self.assertFalse( run_id1 == run_id2 )
Esempio n. 19
0
    def test_substitution_list(self):
        subst_list = SubstitutionList()

        subst_list.addItem("Key", "Value", "Doc String")

        self.assertEqual(len(subst_list), 1)

        with self.assertRaises(KeyError):
            item = subst_list[2]

        with self.assertRaises(KeyError):
            item = subst_list["NoSuchKey"]

        with self.assertRaises(KeyError):
            item = subst_list.doc("NoSuchKey")

        self.assertTrue("Key" in subst_list)
        self.assertEqual(subst_list["Key"], "Value")
        self.assertEqual(subst_list.doc("Key"), "Doc String")

        subst_list.addItem("Key2", "Value2", "Doc String2")
        self.assertEqual(len(subst_list), 2)

        keys = subst_list.keys()
        self.assertEqual(keys[0], "Key")
        self.assertEqual(keys[1], "Key2")

        self.assertIn("Key", str(subst_list))
        self.assertIn("SubstitutionList", repr(subst_list))
        self.assertIn("2", repr(subst_list))

        self.assertEqual(1729, subst_list.get("nosuchkey", 1729))
        self.assertIsNone(subst_list.get("nosuchkey"))
        self.assertIsNone(subst_list.get(513))
        for key in ("Key", "Key2"):
            self.assertEqual(subst_list[key], subst_list.get(key))