File: TestAdd.cpp

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 (123 lines) | stat: -rw-r--r-- 4,214 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
/*
 * 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.
 */

#include <iostream>
#include <stdexcept>

#include <boost/test/unit_test.hpp>

#include "ecflow/node/Defs.hpp"
#include "ecflow/node/Family.hpp"
#include "ecflow/node/Suite.hpp"
#include "ecflow/node/Task.hpp"
#include "ecflow/test/scaffold/Naming.hpp"

using namespace std;
using namespace ecf;

BOOST_AUTO_TEST_SUITE(U_Node)

BOOST_AUTO_TEST_SUITE(T_Add)

BOOST_AUTO_TEST_CASE(test_add) {
    ECF_NAME_THIS_TEST();

    defs_ptr defs = Defs::create();
    task_ptr t1   = Task::create("t1");
    family_ptr f1 = Family::create("f1");
    suite_ptr s1  = Suite::create("s1");

    defs->addSuite(s1);
    s1->addFamily(f1);
    f1->addTask(t1);

    defs_ptr defs2 = Defs::create();
    suite_ptr s2   = Suite::create("s2");
    family_ptr f2  = Family::create("f2");

    // This should all fail since, they are already owned.
    // Otherwise we end up with two different container owning the same object
    BOOST_CHECK_THROW(s2->addFamily(f1), std::runtime_error);
    BOOST_CHECK_THROW(f2->addTask(t1), std::runtime_error);
    BOOST_CHECK_THROW(defs2->addSuite(s1), std::runtime_error);
}

BOOST_AUTO_TEST_CASE(test_add_error) {
    ECF_NAME_THIS_TEST();

    defs_ptr defs = Defs::create();
    suite_ptr s1  = defs->add_suite("s1");
    s1->add_task("t1");
    s1->add_family("f1");
    BOOST_CHECK_THROW(defs->add_suite("s1"), std::runtime_error); // duplicate suite
    BOOST_CHECK_THROW(s1->add_task("t1"), std::runtime_error);    // duplicate task
    BOOST_CHECK_THROW(s1->add_family("t1"), std::runtime_error);  // duplicate name
    BOOST_CHECK_THROW(s1->add_task("f1"), std::runtime_error);    // duplicate name
}

BOOST_AUTO_TEST_CASE(test_add_delete_time) {
    ECF_NAME_THIS_TEST(); // ECFLOW-1260

    // Make sure that if we delete any time based attributes
    Defs defs;
    suite_ptr s1 = defs.add_suite("s1");
    task_ptr t1  = s1->add_task("t1");

    BOOST_REQUIRE_MESSAGE(!t1->hasTimeDependencies(), "Expected no time attributes");

    ecf::CronAttr cronAttr;
    ecf::TimeSlot start(0, 0);
    ecf::TimeSlot finish(10, 0);
    ecf::TimeSlot incr(0, 5);
    std::vector<int> weekdays;
    for (int i = 0; i < 7; ++i) {
        weekdays.push_back(i);
    }
    std::vector<int> daysOfMonth;
    for (int i = 1; i < 32; ++i) {
        daysOfMonth.push_back(i);
    }
    std::vector<int> months;
    for (int i = 1; i < 13; ++i) {
        months.push_back(i);
    }
    cronAttr.addTimeSeries(start, finish, incr);
    cronAttr.addWeekDays(weekdays);
    cronAttr.addDaysOfMonth(daysOfMonth);
    cronAttr.addMonths(months);
    t1->addCron(cronAttr);
    BOOST_CHECK_MESSAGE(t1->hasTimeDependencies(), "Expected time attributes");
    t1->deleteCron("");
    BOOST_CHECK_MESSAGE(!t1->hasTimeDependencies(), "Expected no time attributes");

    t1->addDate(DateAttr(1, 2, 2009));
    BOOST_CHECK_MESSAGE(t1->hasTimeDependencies(), "Expected time attributes");
    t1->deleteDate("");
    BOOST_CHECK_MESSAGE(!t1->hasTimeDependencies(), "Expected no time attributes");

    t1->addDay(DayAttr(DayAttr::MONDAY));
    BOOST_CHECK_MESSAGE(t1->hasTimeDependencies(), "Expected time attributes");
    t1->deleteDay("");
    BOOST_CHECK_MESSAGE(!t1->hasTimeDependencies(), "Expected no time attributes");

    t1->addTime(ecf::TimeAttr(ecf::TimeSlot(0, 0), ecf::TimeSlot(10, 1), ecf::TimeSlot(0, 1), true));
    BOOST_CHECK_MESSAGE(t1->hasTimeDependencies(), "Expected time attributes");
    t1->deleteTime("");
    BOOST_CHECK_MESSAGE(!t1->hasTimeDependencies(), "Expected no time attributes");

    t1->addToday(ecf::TodayAttr(ecf::TimeSlot(10, 12)));
    BOOST_CHECK_MESSAGE(t1->hasTimeDependencies(), "Expected time attributes");
    t1->deleteToday("");
    BOOST_CHECK_MESSAGE(!t1->hasTimeDependencies(), "Expected no time attributes");
}

BOOST_AUTO_TEST_SUITE_END()

BOOST_AUTO_TEST_SUITE_END()