File: py_u_TestFind.py

package info (click to toggle)
ecflow 5.15.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,868 kB
  • sloc: cpp: 269,341; python: 22,756; sh: 3,609; perl: 770; xml: 333; f90: 204; ansic: 141; makefile: 70
file content (159 lines) | stat: -rw-r--r-- 5,694 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#
# Copyright 2009- ECMWF.
#
# This software is licensed under the terms of the Apache Licence version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
# In applying this licence, ECMWF does not waive the privileges and immunities
# granted to it by virtue of its status as an intergovernmental organisation
# nor does it submit to any jurisdiction.
#

from ecflow import Suite, Family, Task, Defs, Client, debug_build, Edit
import ecflow_test_util as Test
import os


def create_defs(name=""):
    suite_name = name
    if len(suite_name) == 0: suite_name = "s1"
    defs = Defs(Edit(FRED_2="XX", DEFS_VAR="0"),
                Suite(suite_name, Edit(SUITE_VAR="1", FRED_1="%FRED_2%"),
                      Family("f1", Edit(FRED_0="%FRED_1%"),
                             Task("f1_t1", Edit(TASK_VAR="3", FRED="%FRED_0%")),
                             Task("f1_t2", Edit(TASK_VAR="3", FRED="%FRED_0%"))
                             ),
                      Family("f2", Edit(FRED_0="%FRED_1%"),
                             Task("f2_t1", Edit(TASK_VAR="3", FRED="%FRED_0%")),
                             Task("f2_t2", Edit(TASK_VAR="3", FRED="%FRED_0%"))
                             )
                      )
                )
    return defs;


def test_ecflow_1213(defs):
    s1 = defs.find_node_path("suite", "s1")
    assert s1 == "/s1", " expected to find suite s1"

    f1 = defs.find_node_path("family", "f1")
    assert f1 == "/s1/f1", " expected to find family f1"

    f2 = defs.find_node_path("family", "f2")
    assert f2 == "/s1/f2", " expected to find family f2"

    f1_t1 = defs.find_node_path("task", "f1_t1")
    f1_t2 = defs.find_node_path("task", "f1_t2")
    assert f1_t1 == "/s1/f1/f1_t1", " expected to find task f1_t1"
    assert f1_t2 == "/s1/f1/f1_t2", " expected to find task f1_t2"

    f2_t1 = defs.find_node_path("task", "f2_t1")
    f2_t2 = defs.find_node_path("task", "f2_t2")
    assert f2_t1 == "/s1/f2/f2_t1", " expected to find task f2_t1"
    assert f2_t2 == "/s1/f2/f2_t2", " expected to find task f2_t2"

    # find_node
    s1 = defs.find_node("suite", "/s1")
    assert s1 is not None and isinstance(s1, Suite), "expected find find suite s1"

    f1 = defs.find_node("family", "/s1/f1")
    assert f1 is not None and isinstance(f1, Family), " expected to find family f1"

    f2 = defs.find_node("family", "/s1/f2")
    assert f2 is not None and isinstance(f2, Family), " expected to find family f2"

    f1_t1 = defs.find_node("task", "/s1/f1/f1_t1")
    f1_t2 = defs.find_node("task", "/s1/f1/f1_t2")
    assert f1_t1 is not None and isinstance(f1_t1, Task), " expected to find task f1_t1"
    assert f1_t2 is not None and isinstance(f1_t2, Task), " expected to find task f1_t2"

    f2_t1 = defs.find_node("task", "/s1/f2/f2_t1")
    f2_t2 = defs.find_node("task", "/s1/f2/f2_t2")
    assert f2_t1 is not None and isinstance(f2_t1, Task), " expected to find task f2_t1"
    assert f2_t2 is not None and isinstance(f2_t1, Task), " expected to find task f2_t2"


if __name__ == "__main__":

    Test.print_test_start(os.path.basename(__file__))

    defs = create_defs()

    test_ecflow_1213(defs)

    s1 = defs.find_suite("s1")
    assert s1 is not None, "expected find find suite s1"
    assert "s1" in defs, "expected find find suite s1"

    sx = defs.find_suite("sx")
    assert sx is None, "expected not to find suite sx"

    f1 = s1.find_family("f1")
    assert f1 is not None, "expected find find family f1"
    f1 = s1.find_node("f1")
    assert f1 is not None, "expected find find family f1"

    fx = s1.find_family("fx")
    assert fx is None, "expected not to find family fx"
    fx = s1.find_node("fx")
    assert fx is None, "expected not to find family fx"

    f2 = s1.find_family("f2")
    assert f2 is not None, "expected find find family f2"
    f2 = s1.find_node("f2")
    assert f2 is not None, "expected find find family f2"

    f2_t1 = f2.find_task("f2_t1")
    assert f2_t1 is not None, "Expected to find task"

    f2_t2 = f2.find_task("f2_t2")
    assert f2_t2 is not None, "Expected to find task"
    f2_t2 = f2.find_node("f2_t2")
    assert f2_t2 is not None, "Expected to find task"

    f2_tx = f2.find_task("f2_tx")
    assert f2_tx is None, "Expected not to find task"
    f2_tx = f2.find_node("f2_tx")
    assert f2_tx is None, "Expected not to find task"

    tasks = defs.get_all_tasks()
    assert len(tasks) == 4, "Expected four tasks, but found " + str(len(tasks))
    for task in tasks:
        # test find variable
        var = task.find_parent_variable("TASK_VAR")
        assert not var.empty()
        assert var.value() == "3"

        var = task.find_parent_variable_sub_value("FRED")
        assert var == "XX"

        var = task.find_parent_variable_sub_value("ZZZZ")
        assert var == ""

        var = task.find_variable("TASK_VAR")
        assert not var.empty()
        assert var.value() == "3"

        var = task.find_parent_variable("SUITE_VAR");
        assert not var.empty()
        assert var.value() == "1"

        var = task.find_parent_variable("DEFS_VAR")
        assert not var.empty()
        assert var.value() == "0"

        var = task.find_parent_variable("MADE_UP_VAR")
        assert var.empty()

        if task.name() == "f1_t1":
            node = task.find_node_up_the_tree("f1")
            assert node is not None
            assert node.get_abs_node_path() == "/s1/f1"

            node = task.find_node_up_the_tree("s1")
            assert node is not None
            assert node.get_abs_node_path() == "/s1"

            node = task.find_node_up_the_tree("freddd")
            assert node is None

    print("All Tests pass")