Пример #1
0
def monitor_failing_ensemble():
    return (Consumer("Monitor").forms_narrative_with(
        Provider("Ensemble Evaluator")
    ).given(
        "Ensemble with 2 reals, with 2 steps each, with 2 jobs each, job 1 in real 1 fails"
    ).responds_with("Snapshot").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_SNAPSHOT,
            source=ReMatch(re.compile(".*"), ""),
        )
    ]).responds_with("Starting").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
            source=ReMatch(re.compile(".*"), ""),
            data={identifiers.STATUS: state.ENSEMBLE_STATE_STARTED},
        )
    ]).responds_with("Failure").repeating_unordered_events(
        [],
        terminator=EventDescription(
            type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
            source=ReMatch(re.compile(".*"), ""),
            data={
                identifiers.REALS: {
                    "1": {
                        identifiers.STEPS: {
                            "0": {
                                identifiers.JOBS: {
                                    "1": {
                                        identifiers.STATUS:
                                        state.JOB_STATE_FAILURE
                                    }
                                }
                            }
                        },
                        identifiers.STATUS: state.REALIZATION_STATE_FAILED,
                    },
                }
            },
        ),
    ).responds_with("Stopped").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
            source=ReMatch(re.compile(".*"), ""),
            data={identifiers.STATUS: state.ENSEMBLE_STATE_STOPPED},
        )
    ]).receives("Monitor done").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_USER_DONE,
            source=ReMatch(re.compile(".*"), ""),
        )
    ]).responds_with("Termination").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_TERMINATED,
            source=ReMatch(re.compile(".*"), ""),
        )
    ]).with_unmarshaller("application/json",
                         serialization.evaluator_unmarshaller).with_marshaller(
                             "application/json",
                             serialization.evaluator_marshaller).with_name(
                                 "Monitor Failing Ensemble"))
Пример #2
0
def monitor_failing_evaluation():
    return (Consumer("Monitor").forms_narrative_with(
        Provider("Ensemble Evaluator"), ).given("a failing evaluation").
            responds_with("start then failure").cloudevents_in_order([
                EventDescription(
                    type_=identifiers.EVTYPE_EE_SNAPSHOT,
                    source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
                    source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
                    data={identifiers.STATUS: state.ENSEMBLE_STATE_STARTED},
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
                    source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
                    data={identifiers.STATUS: state.ENSEMBLE_STATE_FAILED},
                ),
            ]).receives("done").cloudevents_in_order([
                EventDescription(
                    type_=identifiers.EVTYPE_EE_USER_DONE,
                    source=ReMatch(re.compile(r"/ert/monitor/."),
                                   "/ert/monitor/007"),
                ),
            ]).responds_with("termination").cloudevents_in_order([
                EventDescription(
                    type_=identifiers.EVTYPE_EE_TERMINATED,
                    source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
                ),
            ]).with_marshaller(
                "application/json",
                serialization.evaluator_marshaller).with_unmarshaller(
                    "application/json",
                    serialization.evaluator_unmarshaller).with_name(
                        "Monitor Failed Evaluation"))
Пример #3
0
def dispatch_failing_job():
    return (Consumer("Dispatch").forms_narrative_with(
        Provider("Ensemble Evaluator")).given("small ensemble").receives(
            "a job eventually fails").cloudevents_in_order([
                EventDescription(
                    type_=identifiers.EVTYPE_ENSEMBLE_STARTED,
                    source="/ert/ee/0",
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_STEP_RUNNING,
                    source="/ert/ee/0/real/0/stage/0/step/0",
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_JOB_RUNNING,
                    source="/ert/ee/0/real/0/stage/0/step/0/job/0",
                    data={identifiers.CURRENT_MEMORY_USAGE: 1000},
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_STEP_RUNNING,
                    source="/ert/ee/0/real/1/stage/0/step/0",
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_JOB_RUNNING,
                    source="/ert/ee/0/real/1/stage/0/step/0/job/0",
                    data={identifiers.CURRENT_MEMORY_USAGE: 2000},
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_JOB_SUCCESS,
                    source="/ert/ee/0/real/0/stage/0/step/0/job/0",
                    data={identifiers.CURRENT_MEMORY_USAGE: 2000},
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_JOB_FAILURE,
                    source="/ert/ee/0/real/1/stage/0/step/0/job/0",
                    data={identifiers.ERROR_MSG: "error"},
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_STEP_FAILURE,
                    source="/ert/ee/0/real/1/stage/0/step/0",
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_FM_STEP_SUCCESS,
                    source="/ert/ee/0/real/0/stage/0/step/0",
                ),
                EventDescription(
                    type_=identifiers.EVTYPE_ENSEMBLE_STOPPED,
                    source="/ert/ee/0",
                ),
            ]).with_name("Dispatch Failing Job"))
Пример #4
0
async def test_interaction(unused_tcp_port):
    narrative = (
        Consumer("Consumer")
        .forms_narrative_with(Provider("Provider"))
        .given("some data exists")
        .receives("a request")
        .cloudevents_in_order([EventDescription(type_="start", source="/consumer")])
        .responds_with("an end response")
        .cloudevents_in_order([EventDescription(type_="end", source="/provider")])
        .on_uri(f"ws://localhost:{unused_tcp_port}")
    )
    async with narrative:
        async with websockets.connect(narrative.uri) as websocket:
            await websocket.send(
                to_json(CloudEvent({"id": "0", "source": "/consumer", "type": "start"}))
            )
            end = await websocket.recv()
            assert from_json(end)["type"] == "end"
Пример #5
0
def monitor_successful_ensemble():
    return (Consumer("Monitor").forms_narrative_with(
        Provider("Ensemble Evaluator"),
    ).given("a successful one-member one-step one-job ensemble").responds_with(
        "starting snapshot"
    ).cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_SNAPSHOT,
            source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
        ),
    ]).responds_with("a bunch of snapshot updates").repeating_unordered_events(
        [
            EventDescription(
                type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
                source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
            ),
        ],
        terminator=EventDescription(
            type_=identifiers.EVTYPE_EE_SNAPSHOT_UPDATE,
            source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
            data={identifiers.STATUS: state.ENSEMBLE_STATE_STOPPED},
        ),
    ).receives("done").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_USER_DONE,
            source=ReMatch(re.compile(r"/ert/monitor/."), "/ert/monitor/007"),
        ),
    ]).responds_with("termination").cloudevents_in_order([
        EventDescription(
            type_=identifiers.EVTYPE_EE_TERMINATED,
            source=ReMatch(re.compile(r"/ert/ee/ee."), "/ert/ee/ee-0"),
            datacontenttype="application/octet-stream",
            data=cloudpickle.dumps("hello world"),
        ),
    ]).with_marshaller(
        "application/json",
        serialization.evaluator_marshaller).with_unmarshaller(
            "application/json",
            serialization.evaluator_unmarshaller).with_unmarshaller(
                "application/octet-stream",
                pickle.loads).with_name("Monitor Successful Ensemble"))