roby 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +7 -5
- data/Manifest.txt +91 -16
- data/README.txt +24 -24
- data/Rakefile +92 -64
- data/app/config/app.yml +42 -43
- data/app/config/init.rb +26 -0
- data/benchmark/alloc_misc.rb +123 -0
- data/benchmark/discovery_latency.rb +67 -0
- data/benchmark/garbage_collection.rb +48 -0
- data/benchmark/genom.rb +31 -0
- data/benchmark/transactions.rb +62 -0
- data/bin/roby +1 -1
- data/bin/roby-log +16 -6
- data/doc/guide/.gitignore +2 -0
- data/doc/guide/config.yaml +34 -0
- data/doc/guide/ext/init.rb +14 -0
- data/doc/guide/ext/previous_next.rb +40 -0
- data/doc/guide/ext/rdoc_links.rb +33 -0
- data/doc/guide/index.rdoc +16 -0
- data/doc/guide/overview.rdoc +62 -0
- data/doc/guide/plan_modifications.rdoc +67 -0
- data/doc/guide/src/abstraction/achieve_with.page +8 -0
- data/doc/guide/src/abstraction/forwarding.page +8 -0
- data/doc/guide/src/abstraction/hierarchy.page +19 -0
- data/doc/guide/src/abstraction/index.page +28 -0
- data/doc/guide/src/abstraction/task_models.page +13 -0
- data/doc/guide/src/basics.template +6 -0
- data/doc/guide/src/basics/app.page +139 -0
- data/doc/guide/src/basics/code_examples.page +33 -0
- data/doc/guide/src/basics/dry.page +69 -0
- data/doc/guide/src/basics/errors.page +443 -0
- data/doc/guide/src/basics/events.page +179 -0
- data/doc/guide/src/basics/hierarchy.page +275 -0
- data/doc/guide/src/basics/index.page +11 -0
- data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_4.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/basics/log_replay/hierarchy_error_1.png +0 -0
- data/doc/guide/src/basics/log_replay/hierarchy_error_2.png +0 -0
- data/doc/guide/src/basics/log_replay/hierarchy_error_3.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_1.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_2.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_3.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_relation_window.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_replay_event_representation.png +0 -0
- data/doc/guide/src/basics/plan_objects.page +71 -0
- data/doc/guide/src/basics/relations_display.page +203 -0
- data/doc/guide/src/basics/roby_cycle_overview.png +0 -0
- data/doc/guide/src/basics/shell.page +102 -0
- data/doc/guide/src/basics/summary.page +32 -0
- data/doc/guide/src/basics/tasks.page +357 -0
- data/doc/guide/src/basics_shell_header.txt +16 -0
- data/doc/guide/src/cycle/cycle-overview.png +0 -0
- data/doc/guide/src/cycle/cycle-overview.svg +208 -0
- data/doc/guide/src/cycle/error_handling.page +168 -0
- data/doc/guide/src/cycle/error_instantaneous_repair.png +0 -0
- data/doc/guide/src/cycle/error_instantaneous_repair.svg +1224 -0
- data/doc/guide/src/cycle/garbage_collection.page +10 -0
- data/doc/guide/src/cycle/index.page +23 -0
- data/doc/guide/src/cycle/propagation.page +154 -0
- data/doc/guide/src/cycle/propagation_diamond.png +0 -0
- data/doc/guide/src/cycle/propagation_diamond.svg +1279 -0
- data/doc/guide/src/default.css +319 -0
- data/doc/guide/src/default.template +74 -0
- data/doc/guide/src/htmldoc.metainfo +20 -0
- data/doc/guide/src/htmldoc.virtual +18 -0
- data/doc/guide/src/images/bodybg.png +0 -0
- data/doc/guide/src/images/contbg.png +0 -0
- data/doc/guide/src/images/footerbg.png +0 -0
- data/doc/guide/src/images/gradient1.png +0 -0
- data/doc/guide/src/images/gradient2.png +0 -0
- data/doc/guide/src/index.page +7 -0
- data/doc/guide/src/introduction/index.page +29 -0
- data/doc/guide/src/introduction/install.page +133 -0
- data/doc/{papers.rdoc → guide/src/introduction/publications.page} +5 -2
- data/doc/{videos.rdoc → guide/src/introduction/videos.page} +4 -2
- data/doc/guide/src/plugins/fault_tolerance.page +44 -0
- data/doc/guide/src/plugins/index.page +11 -0
- data/doc/guide/src/plugins/subsystems.page +45 -0
- data/doc/guide/src/relations/dependency.page +89 -0
- data/doc/guide/src/relations/index.page +12 -0
- data/doc/misc/update_github +24 -0
- data/doc/tutorials/02-GoForward.rdoc +3 -3
- data/ext/graph/graph.cc +46 -0
- data/lib/roby.rb +57 -22
- data/lib/roby/app.rb +132 -112
- data/lib/roby/app/plugins/rake.rb +21 -0
- data/lib/roby/app/rake.rb +0 -7
- data/lib/roby/app/run.rb +1 -1
- data/lib/roby/app/scripts/distributed.rb +1 -2
- data/lib/roby/app/scripts/generate/bookmarks.rb +1 -1
- data/lib/roby/app/scripts/results.rb +2 -1
- data/lib/roby/app/scripts/run.rb +6 -2
- data/lib/roby/app/scripts/shell.rb +11 -11
- data/lib/roby/config.rb +1 -1
- data/lib/roby/decision_control.rb +62 -3
- data/lib/roby/distributed.rb +4 -0
- data/lib/roby/distributed/base.rb +8 -0
- data/lib/roby/distributed/communication.rb +12 -8
- data/lib/roby/distributed/connection_space.rb +61 -44
- data/lib/roby/distributed/distributed_object.rb +1 -1
- data/lib/roby/distributed/notifications.rb +22 -30
- data/lib/roby/distributed/peer.rb +13 -8
- data/lib/roby/distributed/proxy.rb +5 -5
- data/lib/roby/distributed/subscription.rb +4 -4
- data/lib/roby/distributed/transaction.rb +3 -3
- data/lib/roby/event.rb +176 -110
- data/lib/roby/exceptions.rb +12 -4
- data/lib/roby/execution_engine.rb +1604 -0
- data/lib/roby/external_process_task.rb +225 -0
- data/lib/roby/graph.rb +0 -6
- data/lib/roby/interface.rb +221 -137
- data/lib/roby/log/console.rb +5 -3
- data/lib/roby/log/data_stream.rb +94 -16
- data/lib/roby/log/dot.rb +8 -8
- data/lib/roby/log/event_stream.rb +13 -3
- data/lib/roby/log/file.rb +43 -18
- data/lib/roby/log/gui/basic_display_ui.rb +89 -0
- data/lib/roby/log/gui/chronicle_view_ui.rb +90 -0
- data/lib/roby/log/gui/data_displays.rb +4 -5
- data/lib/roby/log/gui/data_displays_ui.rb +146 -0
- data/lib/roby/log/gui/relations.rb +18 -18
- data/lib/roby/log/gui/relations_ui.rb +120 -0
- data/lib/roby/log/gui/relations_view_ui.rb +144 -0
- data/lib/roby/log/gui/replay.rb +41 -13
- data/lib/roby/log/gui/replay_controls.rb +3 -0
- data/lib/roby/log/gui/replay_controls.ui +133 -110
- data/lib/roby/log/gui/replay_controls_ui.rb +249 -0
- data/lib/roby/log/hooks.rb +19 -18
- data/lib/roby/log/logger.rb +7 -6
- data/lib/roby/log/notifications.rb +4 -4
- data/lib/roby/log/plan_rebuilder.rb +20 -22
- data/lib/roby/log/relations.rb +44 -16
- data/lib/roby/log/server.rb +1 -4
- data/lib/roby/log/timings.rb +88 -19
- data/lib/roby/plan-object.rb +135 -11
- data/lib/roby/plan.rb +408 -224
- data/lib/roby/planning/loops.rb +32 -25
- data/lib/roby/planning/model.rb +157 -51
- data/lib/roby/planning/task.rb +47 -20
- data/lib/roby/query.rb +128 -92
- data/lib/roby/relations.rb +254 -136
- data/lib/roby/relations/conflicts.rb +6 -9
- data/lib/roby/relations/dependency.rb +358 -0
- data/lib/roby/relations/ensured.rb +0 -1
- data/lib/roby/relations/error_handling.rb +0 -1
- data/lib/roby/relations/events.rb +0 -2
- data/lib/roby/relations/executed_by.rb +26 -11
- data/lib/roby/relations/planned_by.rb +14 -14
- data/lib/roby/robot.rb +46 -0
- data/lib/roby/schedulers/basic.rb +34 -0
- data/lib/roby/standalone.rb +4 -0
- data/lib/roby/standard_errors.rb +21 -15
- data/lib/roby/state/events.rb +5 -4
- data/lib/roby/support.rb +107 -6
- data/lib/roby/task-operations.rb +23 -19
- data/lib/roby/task.rb +522 -148
- data/lib/roby/task_index.rb +80 -0
- data/lib/roby/test/common.rb +283 -44
- data/lib/roby/test/distributed.rb +53 -37
- data/lib/roby/test/testcase.rb +9 -204
- data/lib/roby/test/tools.rb +3 -3
- data/lib/roby/transactions.rb +154 -111
- data/lib/roby/transactions/proxy.rb +40 -7
- data/manifest.xml +20 -0
- data/plugins/fault_injection/README.txt +0 -3
- data/plugins/fault_injection/Rakefile +2 -8
- data/plugins/fault_injection/app.rb +1 -1
- data/plugins/fault_injection/fault_injection.rb +3 -3
- data/plugins/fault_injection/test/test_fault_injection.rb +19 -25
- data/plugins/subsystems/README.txt +0 -3
- data/plugins/subsystems/Rakefile +2 -7
- data/plugins/subsystems/app.rb +27 -16
- data/plugins/subsystems/test/app/config/init.rb +3 -0
- data/plugins/subsystems/test/app/planners/main.rb +1 -1
- data/plugins/subsystems/test/app/tasks/services.rb +1 -1
- data/plugins/subsystems/test/test_subsystems.rb +23 -16
- data/test/distributed/test_communication.rb +32 -15
- data/test/distributed/test_connection.rb +28 -26
- data/test/distributed/test_execution.rb +59 -54
- data/test/distributed/test_mixed_plan.rb +34 -34
- data/test/distributed/test_plan_notifications.rb +26 -26
- data/test/distributed/test_protocol.rb +57 -48
- data/test/distributed/test_query.rb +11 -7
- data/test/distributed/test_remote_plan.rb +71 -71
- data/test/distributed/test_transaction.rb +50 -47
- data/test/mockups/external_process +28 -0
- data/test/planning/test_loops.rb +163 -119
- data/test/planning/test_model.rb +3 -3
- data/test/planning/test_task.rb +27 -7
- data/test/relations/test_conflicts.rb +3 -3
- data/test/relations/test_dependency.rb +324 -0
- data/test/relations/test_ensured.rb +2 -2
- data/test/relations/test_executed_by.rb +94 -19
- data/test/relations/test_planned_by.rb +11 -9
- data/test/suite_core.rb +6 -3
- data/test/suite_distributed.rb +1 -0
- data/test/suite_planning.rb +1 -0
- data/test/suite_relations.rb +2 -2
- data/test/tasks/test_external_process.rb +126 -0
- data/test/{test_thread_task.rb → tasks/test_thread_task.rb} +17 -20
- data/test/test_bgl.rb +21 -1
- data/test/test_event.rb +229 -155
- data/test/test_exceptions.rb +79 -80
- data/test/test_execution_engine.rb +987 -0
- data/test/test_gui.rb +1 -1
- data/test/test_interface.rb +11 -5
- data/test/test_log.rb +18 -7
- data/test/test_log_server.rb +1 -0
- data/test/test_plan.rb +229 -395
- data/test/test_query.rb +193 -35
- data/test/test_relations.rb +88 -8
- data/test/test_state.rb +55 -37
- data/test/test_support.rb +1 -1
- data/test/test_task.rb +371 -218
- data/test/test_testcase.rb +32 -16
- data/test/test_transactions.rb +211 -170
- data/test/test_transactions_proxy.rb +37 -19
- metadata +169 -71
- data/.gitignore +0 -29
- data/doc/styles/allison.css +0 -314
- data/doc/styles/allison.js +0 -316
- data/doc/styles/allison.rb +0 -276
- data/doc/styles/jamis.rb +0 -593
- data/lib/roby/control.rb +0 -746
- data/lib/roby/executives/simple.rb +0 -30
- data/lib/roby/propagation.rb +0 -562
- data/lib/roby/relations/hierarchy.rb +0 -239
- data/lib/roby/transactions/updates.rb +0 -139
- data/test/relations/test_hierarchy.rb +0 -158
- data/test/test_control.rb +0 -399
- data/test/test_propagation.rb +0 -210
data/test/test_testcase.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
|
|
2
2
|
require 'roby/test/common'
|
|
3
3
|
require 'roby/test/testcase'
|
|
4
4
|
require 'roby/test/tasks/simple_task'
|
|
@@ -7,9 +7,25 @@ require 'flexmock'
|
|
|
7
7
|
class TC_Test_TestCase < Test::Unit::TestCase
|
|
8
8
|
include Roby::Test
|
|
9
9
|
include Roby::Test::Assertions
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
Roby.app.setup_global_singletons
|
|
13
|
+
|
|
14
|
+
Roby.engine.at_cycle_end(&Test.method(:check_event_assertions))
|
|
15
|
+
Roby.engine.finalizers << Test.method(:finalize_event_assertions)
|
|
16
|
+
@plan = Roby.plan
|
|
17
|
+
@control = Roby.control
|
|
18
|
+
@engine = Roby.engine
|
|
19
|
+
super
|
|
20
|
+
end
|
|
21
|
+
def teardown
|
|
22
|
+
Roby.engine.at_cycle_end_handlers.delete(Test.method(:check_event_assertions))
|
|
23
|
+
Roby.engine.finalizers.delete(Test.method(:finalize_event_assertions))
|
|
24
|
+
super
|
|
25
|
+
end
|
|
10
26
|
|
|
11
27
|
def test_assert_any_event
|
|
12
|
-
plan.
|
|
28
|
+
plan.add(t = SimpleTask.new)
|
|
13
29
|
t.start!
|
|
14
30
|
assert_nothing_raised do
|
|
15
31
|
assert_any_event(t.event(:start))
|
|
@@ -21,7 +37,7 @@ class TC_Test_TestCase < Test::Unit::TestCase
|
|
|
21
37
|
assert_any_event([t.event(:success)], [t.event(:stop)])
|
|
22
38
|
end
|
|
23
39
|
|
|
24
|
-
plan.
|
|
40
|
+
plan.add(t = SimpleTask.new)
|
|
25
41
|
t.start!
|
|
26
42
|
t.failed!
|
|
27
43
|
assert_raises(Test::Unit::AssertionFailedError) do
|
|
@@ -29,15 +45,15 @@ class TC_Test_TestCase < Test::Unit::TestCase
|
|
|
29
45
|
end
|
|
30
46
|
|
|
31
47
|
Roby.logger.level = Logger::FATAL
|
|
32
|
-
|
|
33
|
-
|
|
48
|
+
Robot.logger.level = Logger::FATAL
|
|
49
|
+
engine.run
|
|
50
|
+
plan.add_permanent(t = SimpleTask.new)
|
|
34
51
|
assert_any_event(t.event(:success)) do
|
|
35
52
|
t.start!
|
|
36
53
|
t.success!
|
|
37
54
|
end
|
|
38
55
|
|
|
39
|
-
|
|
40
|
-
plan.insert(t = SimpleTask.new)
|
|
56
|
+
plan.add_permanent(t = SimpleTask.new)
|
|
41
57
|
assert_raises(Test::Unit::AssertionFailedError) do
|
|
42
58
|
assert_any_event(t.event(:success)) do
|
|
43
59
|
t.start!
|
|
@@ -47,8 +63,7 @@ class TC_Test_TestCase < Test::Unit::TestCase
|
|
|
47
63
|
|
|
48
64
|
## Same test, but check that the assertion succeeds since we *are*
|
|
49
65
|
## checking that +failed+ happens
|
|
50
|
-
|
|
51
|
-
plan.insert(t = SimpleTask.new)
|
|
66
|
+
plan.add_permanent(t = SimpleTask.new)
|
|
52
67
|
assert_nothing_raised do
|
|
53
68
|
assert_any_event(t.event(:failed)) do
|
|
54
69
|
t.start!
|
|
@@ -58,7 +73,7 @@ class TC_Test_TestCase < Test::Unit::TestCase
|
|
|
58
73
|
end
|
|
59
74
|
|
|
60
75
|
def test_assert_succeeds
|
|
61
|
-
|
|
76
|
+
engine.run
|
|
62
77
|
|
|
63
78
|
task = Class.new(SimpleTask) do
|
|
64
79
|
forward :start => :success
|
|
@@ -76,12 +91,13 @@ class TC_Test_TestCase < Test::Unit::TestCase
|
|
|
76
91
|
end
|
|
77
92
|
|
|
78
93
|
def test_sampling
|
|
79
|
-
|
|
94
|
+
engine.run
|
|
80
95
|
|
|
81
96
|
i = 0
|
|
97
|
+
# Sampling of 1s, every 100ms (== 1 cycle)
|
|
82
98
|
samples = Roby::Test.sampling(1, 0.1, :time_test, :index, :dummy) do
|
|
83
99
|
i += 1
|
|
84
|
-
[
|
|
100
|
+
[engine.cycle_start, i + rand / 10 - 0.05, rand / 10 + 0.95]
|
|
85
101
|
end
|
|
86
102
|
cur_size = samples.size
|
|
87
103
|
|
|
@@ -106,17 +122,17 @@ class TC_Test_TestCase < Test::Unit::TestCase
|
|
|
106
122
|
samples = test_sampling
|
|
107
123
|
stats = Roby::Test.stats(samples, :dummy => :absolute)
|
|
108
124
|
assert_in_delta(1, stats.index.mean, 0.05)
|
|
109
|
-
assert_in_delta(0.025, stats.index.stddev, 0.
|
|
125
|
+
assert_in_delta(0.025, stats.index.stddev, 0.1)
|
|
110
126
|
assert_in_delta(1, stats.dummy.mean, 0.05)
|
|
111
|
-
assert_in_delta(0.025, stats.dummy.stddev, 0.
|
|
127
|
+
assert_in_delta(0.025, stats.dummy.stddev, 0.1)
|
|
112
128
|
assert_in_delta(0.1, stats.dt.mean, 0.001, stats.dt)
|
|
113
129
|
assert_in_delta(0, stats.dt.stddev, 0.001)
|
|
114
130
|
|
|
115
131
|
stats = Roby::Test.stats(samples, :index => :rate, :dummy => :absolute_rate)
|
|
116
132
|
assert_in_delta(10, stats.index.mean, 1)
|
|
117
|
-
assert_in_delta(0.25, stats.index.stddev, 0.
|
|
133
|
+
assert_in_delta(0.25, stats.index.stddev, 0.5)
|
|
118
134
|
assert_in_delta(10, stats.dummy.mean, 1)
|
|
119
|
-
assert_in_delta(0.25, stats.dummy.stddev, 0.
|
|
135
|
+
assert_in_delta(0.25, stats.dummy.stddev, 0.5)
|
|
120
136
|
end
|
|
121
137
|
end
|
|
122
138
|
|
data/test/test_transactions.rb
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path('
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('.', File.dirname(__FILE__))
|
|
2
|
+
$LOAD_PATH.unshift File.expand_path(File.join('..', 'lib'), File.dirname(__FILE__))
|
|
2
3
|
require 'roby/test/common'
|
|
3
4
|
require 'roby/test/tasks/simple_task'
|
|
4
5
|
require 'flexmock'
|
|
5
6
|
|
|
6
|
-
require '
|
|
7
|
+
require 'test_plan'
|
|
7
8
|
|
|
8
9
|
# Check that a transaction behaves like a plan
|
|
9
10
|
class TC_TransactionAsPlan < Test::Unit::TestCase
|
|
10
11
|
include TC_PlanStatic
|
|
11
12
|
include Roby::Test
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
attr_reader :real_plan
|
|
14
15
|
attr_reader :plan
|
|
16
|
+
def engine; (real_plan || plan).engine end
|
|
15
17
|
def setup
|
|
16
|
-
@plan = Transaction.new(real_plan)
|
|
17
18
|
super
|
|
19
|
+
@real_plan = @plan
|
|
20
|
+
@plan = Transaction.new(real_plan)
|
|
18
21
|
end
|
|
19
22
|
def teardown
|
|
20
23
|
@plan.discard_transaction
|
|
@@ -33,10 +36,84 @@ module TC_TransactionBehaviour
|
|
|
33
36
|
|
|
34
37
|
SimpleTask = Roby::Test::SimpleTask
|
|
35
38
|
|
|
39
|
+
def test_proxy_creation
|
|
40
|
+
plan.add(t = SimpleTask.new)
|
|
41
|
+
transaction_commit(plan) do |trsc|
|
|
42
|
+
assert !trsc[t, false]
|
|
43
|
+
assert trsc.known_tasks.empty?
|
|
44
|
+
|
|
45
|
+
assert(proxy = trsc[t, true])
|
|
46
|
+
assert(trsc.include?(proxy))
|
|
47
|
+
assert_same(proxy, trsc[t, false])
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_remove_object
|
|
52
|
+
plan.add(t = SimpleTask.new)
|
|
53
|
+
transaction_commit(plan, t) do |trsc, p|
|
|
54
|
+
trsc.remove_object(p)
|
|
55
|
+
assert_same(nil, trsc[t, false])
|
|
56
|
+
assert(!trsc.include?(p))
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
t1, t2, t3 = prepare_plan :missions => 1, :add => 1, :tasks => 1
|
|
60
|
+
t1.depends_on t2
|
|
61
|
+
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
62
|
+
p1.depends_on(t3)
|
|
63
|
+
trsc.remove_object(p1)
|
|
64
|
+
end
|
|
65
|
+
assert(plan.include?(t1))
|
|
66
|
+
assert_equal([t2], t1.children.to_a)
|
|
67
|
+
|
|
68
|
+
t3 = SimpleTask.new
|
|
69
|
+
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
70
|
+
p1.depends_on t3
|
|
71
|
+
p1.remove_child p2
|
|
72
|
+
trsc.remove_object(p1)
|
|
73
|
+
end
|
|
74
|
+
assert(plan.include?(t1))
|
|
75
|
+
assert_equal([t2], t1.children.to_a)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_add_tasks_from_plan
|
|
79
|
+
plan.add(t = SimpleTask.new)
|
|
80
|
+
transaction_commit(plan) do |trsc|
|
|
81
|
+
assert_raises(Roby::ModelViolation) { trsc.add(t) }
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_object_transaction_stack
|
|
86
|
+
plan.add(t = SimpleTask.new)
|
|
87
|
+
transaction_commit(plan, t) do |trsc1, p1|
|
|
88
|
+
assert_equal([trsc1, plan], p1.transaction_stack)
|
|
89
|
+
transaction_commit(trsc1, p1) do |trsc2, p2|
|
|
90
|
+
assert_equal([trsc2, trsc1, plan], p2.transaction_stack)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_merged_relations
|
|
96
|
+
t1, t2, t3 = prepare_plan :add => 3
|
|
97
|
+
t1.depends_on t2
|
|
98
|
+
t2.depends_on t3
|
|
99
|
+
|
|
100
|
+
transaction_commit(plan, t2) do |trsc, p2|
|
|
101
|
+
assert_equal [t1], p2.merged_relations(:each_parent_task, true).map(&:__getobj__)
|
|
102
|
+
assert_equal [t3], p2.merged_relations(:each_child, true).map(&:__getobj__)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
transaction_commit(plan, t2) do |trsc, p2|
|
|
106
|
+
assert_equal [[t2, t1]], p2.merged_relations(:each_parent_task, false).to_a
|
|
107
|
+
assert_equal [[t2, t3]], p2.merged_relations(:each_child, false).to_a
|
|
108
|
+
assert !trsc[t1, false]
|
|
109
|
+
assert !trsc[t3, false]
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
36
113
|
def transaction_op(plan, op, *needed_proxies)
|
|
37
114
|
trsc = Roby::Transaction.new(plan)
|
|
38
115
|
proxies = needed_proxies.map do |o|
|
|
39
|
-
plan.
|
|
116
|
+
plan.add(o) unless o.plan
|
|
40
117
|
|
|
41
118
|
p = trsc[o]
|
|
42
119
|
assert_not_equal(p, o)
|
|
@@ -80,28 +157,28 @@ module TC_TransactionBehaviour
|
|
|
80
157
|
def test_commit_task
|
|
81
158
|
t = prepare_plan :tasks => 1
|
|
82
159
|
transaction_commit(plan, t) do |trsc, p|
|
|
83
|
-
trsc.
|
|
160
|
+
trsc.add(p)
|
|
84
161
|
assert(p.event(:start).child_object?(p.event(:updated_data), Roby::EventStructure::Precedence))
|
|
85
162
|
assert(p.event(:failed).child_object?(p.event(:stop), Roby::EventStructure::Forwarding))
|
|
86
163
|
end
|
|
87
164
|
assert(t.event(:start).child_object?(t.event(:updated_data), Roby::EventStructure::Precedence))
|
|
88
165
|
assert(t.event(:failed).child_object?(t.event(:stop), Roby::EventStructure::Forwarding))
|
|
89
166
|
|
|
90
|
-
t = prepare_plan :
|
|
167
|
+
t = prepare_plan :add => 1
|
|
91
168
|
transaction_commit(plan, t) do |trsc, p|
|
|
92
|
-
trsc.
|
|
169
|
+
trsc.add_mission(p)
|
|
93
170
|
end
|
|
94
171
|
assert(t.event(:start).child_object?(t.event(:updated_data), Roby::EventStructure::Precedence))
|
|
95
172
|
assert(t.event(:failed).child_object?(t.event(:stop), Roby::EventStructure::Forwarding))
|
|
96
173
|
end
|
|
97
174
|
|
|
98
175
|
def test_commit_arguments
|
|
99
|
-
(t1, t2), t = prepare_plan :
|
|
176
|
+
(t1, t2), t = prepare_plan :add => 2, :tasks => 1
|
|
100
177
|
t1.arguments[:first] = 10
|
|
101
178
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
102
179
|
p1.arguments[:first] = 20
|
|
103
180
|
p1.arguments[:second] = p2
|
|
104
|
-
trsc.
|
|
181
|
+
trsc.add(t)
|
|
105
182
|
t.arguments[:task] = p2
|
|
106
183
|
end
|
|
107
184
|
|
|
@@ -129,7 +206,7 @@ module TC_TransactionBehaviour
|
|
|
129
206
|
|
|
130
207
|
transaction_commit(plan) do |trsc|
|
|
131
208
|
assert(!trsc.include?(t3))
|
|
132
|
-
trsc.
|
|
209
|
+
trsc.add(t3)
|
|
133
210
|
assert(trsc.include?(t3))
|
|
134
211
|
assert(!trsc.mission?(t3))
|
|
135
212
|
assert(!plan.include?(t3))
|
|
@@ -140,7 +217,7 @@ module TC_TransactionBehaviour
|
|
|
140
217
|
|
|
141
218
|
transaction_commit(plan) do |trsc|
|
|
142
219
|
assert(!trsc.include?(t2))
|
|
143
|
-
trsc.
|
|
220
|
+
trsc.add_mission(t2)
|
|
144
221
|
assert(trsc.include?(t2))
|
|
145
222
|
assert(trsc.mission?(t2))
|
|
146
223
|
assert(!plan.include?(t2))
|
|
@@ -151,7 +228,7 @@ module TC_TransactionBehaviour
|
|
|
151
228
|
|
|
152
229
|
transaction_commit(plan, t2) do |trsc, p2|
|
|
153
230
|
assert(trsc.mission?(p2))
|
|
154
|
-
trsc.
|
|
231
|
+
trsc.unmark_mission(p2)
|
|
155
232
|
assert(trsc.include?(p2))
|
|
156
233
|
assert(!trsc.mission?(p2))
|
|
157
234
|
assert(plan.include?(t2))
|
|
@@ -160,48 +237,79 @@ module TC_TransactionBehaviour
|
|
|
160
237
|
assert(plan.include?(t2))
|
|
161
238
|
assert(!plan.mission?(t2))
|
|
162
239
|
|
|
240
|
+
plan.add_mission(t3)
|
|
163
241
|
transaction_commit(plan, t3) do |trsc, p3|
|
|
164
242
|
assert(trsc.include?(p3))
|
|
165
243
|
trsc.remove_object(p3)
|
|
166
244
|
assert(!trsc.include?(p3))
|
|
167
|
-
assert(!trsc.wrap(t3, false))
|
|
168
|
-
assert(!trsc.include?(t3))
|
|
169
245
|
assert(plan.include?(t3))
|
|
170
246
|
end
|
|
171
|
-
assert(
|
|
172
|
-
assert(
|
|
247
|
+
assert(plan.include?(t3))
|
|
248
|
+
assert(plan.mission?(t3))
|
|
173
249
|
|
|
174
|
-
plan.
|
|
250
|
+
plan.add_permanent(t3 = Roby::Task.new)
|
|
175
251
|
transaction_commit(plan, t3) do |trsc, p3|
|
|
176
252
|
assert(trsc.permanent?(p3))
|
|
177
|
-
trsc.
|
|
253
|
+
trsc.unmark_permanent(t3)
|
|
178
254
|
assert(!trsc.permanent?(p3))
|
|
179
255
|
assert(plan.permanent?(t3))
|
|
180
256
|
end
|
|
181
257
|
assert(!plan.permanent?(t3))
|
|
182
258
|
|
|
183
259
|
transaction_commit(plan, t3) do |trsc, p3|
|
|
184
|
-
trsc.
|
|
260
|
+
trsc.add_permanent(p3)
|
|
185
261
|
assert(trsc.permanent?(p3))
|
|
186
262
|
assert(!plan.permanent?(t3))
|
|
187
263
|
end
|
|
188
264
|
assert(plan.permanent?(t3))
|
|
189
265
|
end
|
|
266
|
+
|
|
267
|
+
# Tests insertion and removal of free events
|
|
268
|
+
def test_commit_plan_events
|
|
269
|
+
e1, e2 = (1..2).map { Roby::EventGenerator.new }
|
|
270
|
+
plan.add_permanent(e1)
|
|
271
|
+
plan.add(e2)
|
|
272
|
+
|
|
273
|
+
transaction_commit(plan, e1, e2) do |trsc, p1, p2|
|
|
274
|
+
assert(trsc.include?(p1))
|
|
275
|
+
assert(trsc.permanent?(p1))
|
|
276
|
+
assert(trsc.include?(p2))
|
|
277
|
+
assert(!trsc.permanent?(p2))
|
|
278
|
+
|
|
279
|
+
trsc.unmark_permanent(p1)
|
|
280
|
+
assert(!trsc.permanent?(p1))
|
|
281
|
+
end
|
|
282
|
+
assert(!plan.permanent?(e1))
|
|
283
|
+
|
|
284
|
+
e3, e4 = (1..2).map { Roby::EventGenerator.new }
|
|
285
|
+
transaction_commit(plan) do |trsc|
|
|
286
|
+
trsc.add_permanent(e3)
|
|
287
|
+
trsc.add(e4)
|
|
288
|
+
assert(trsc.permanent?(e3))
|
|
289
|
+
assert(trsc.include?(e4))
|
|
290
|
+
assert(!trsc.permanent?(e4))
|
|
291
|
+
end
|
|
292
|
+
assert(plan.include?(e3))
|
|
293
|
+
assert(plan.permanent?(e3))
|
|
294
|
+
assert(plan.include?(e4))
|
|
295
|
+
assert(!plan.permanent?(e4))
|
|
296
|
+
end
|
|
297
|
+
|
|
190
298
|
|
|
191
299
|
def test_commit_task_relations
|
|
192
300
|
(t1, t2), (t3, t4) = prepare_plan(:missions => 2, :tasks => 2)
|
|
193
|
-
t1.
|
|
301
|
+
t1.depends_on t2
|
|
194
302
|
|
|
195
303
|
transaction_commit(plan) do |trsc|
|
|
196
|
-
trsc.
|
|
197
|
-
trsc.
|
|
304
|
+
trsc.add t3
|
|
305
|
+
trsc.add t4
|
|
198
306
|
t3.planned_by t4
|
|
199
307
|
end
|
|
200
308
|
assert(PlannedBy.linked?(t3, t4))
|
|
201
309
|
|
|
202
310
|
t = Roby::Task.new
|
|
203
311
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
204
|
-
t.
|
|
312
|
+
t.depends_on p1
|
|
205
313
|
assert(Hierarchy.linked?(t, p1))
|
|
206
314
|
assert(!Hierarchy.linked?(t, t1))
|
|
207
315
|
end
|
|
@@ -209,7 +317,7 @@ module TC_TransactionBehaviour
|
|
|
209
317
|
|
|
210
318
|
t = Roby::Task.new
|
|
211
319
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
212
|
-
p2.
|
|
320
|
+
p2.depends_on t
|
|
213
321
|
assert(Hierarchy.linked?(p2, t))
|
|
214
322
|
assert(!Hierarchy.linked?(t2, t))
|
|
215
323
|
end
|
|
@@ -223,37 +331,37 @@ module TC_TransactionBehaviour
|
|
|
223
331
|
assert(!Hierarchy.linked?(t1, t2))
|
|
224
332
|
|
|
225
333
|
transaction_commit(plan, t3, t4) do |trsc, p3, p4|
|
|
226
|
-
trsc.
|
|
334
|
+
trsc.remove_object(p3)
|
|
227
335
|
assert(!trsc.include?(p3))
|
|
228
336
|
assert(!PlannedBy.linked?(p3, p4))
|
|
229
337
|
assert(PlannedBy.linked?(t3, t4))
|
|
230
338
|
end
|
|
231
|
-
assert(
|
|
339
|
+
assert(PlannedBy.linked?(t3, t4))
|
|
232
340
|
end
|
|
233
341
|
|
|
234
342
|
def test_commit_event_relations
|
|
235
343
|
(t1, t2), (t3, t4) = prepare_plan :missions => 2, :tasks => 2,
|
|
236
344
|
:model => SimpleTask
|
|
237
|
-
t1.
|
|
345
|
+
t1.signals(:start, t2, :success)
|
|
238
346
|
|
|
239
347
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
240
|
-
trsc.
|
|
241
|
-
|
|
348
|
+
trsc.add t3
|
|
349
|
+
t3.signals(:stop, p2, :start)
|
|
242
350
|
assert(Signal.linked?(t3.event(:stop), p2.event(:start)))
|
|
243
351
|
assert(!Signal.linked?(t3.event(:stop), t2.event(:start)))
|
|
244
352
|
end
|
|
245
353
|
assert(Signal.linked?(t3.event(:stop), t2.event(:start)))
|
|
246
354
|
|
|
247
355
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
248
|
-
|
|
356
|
+
p1.signals(:stop, p2, :start)
|
|
249
357
|
assert(Signal.linked?(p1.event(:stop), p2.event(:start)))
|
|
250
358
|
assert(!Signal.linked?(t1.event(:stop), t2.event(:start)))
|
|
251
359
|
end
|
|
252
360
|
assert(Signal.linked?(t1.event(:stop), t2.event(:start)))
|
|
253
361
|
|
|
254
362
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
255
|
-
trsc.
|
|
256
|
-
p1.
|
|
363
|
+
trsc.add t4
|
|
364
|
+
p1.signals(:stop, t4, :start)
|
|
257
365
|
assert(Signal.linked?(p1.event(:stop), t4.event(:start)))
|
|
258
366
|
end
|
|
259
367
|
assert(Signal.linked?(t1.event(:stop), t4.event(:start)))
|
|
@@ -268,12 +376,12 @@ module TC_TransactionBehaviour
|
|
|
268
376
|
|
|
269
377
|
def test_commit_replace
|
|
270
378
|
task, (planned, mission, child, r) = prepare_plan :missions => 1, :tasks => 4, :model => SimpleTask
|
|
271
|
-
mission.
|
|
379
|
+
mission.depends_on task, :model => SimpleTask
|
|
272
380
|
planned.planned_by task
|
|
273
|
-
task.
|
|
274
|
-
task.
|
|
275
|
-
task.
|
|
276
|
-
task.
|
|
381
|
+
task.depends_on child
|
|
382
|
+
task.signals(:stop, mission, :stop)
|
|
383
|
+
task.forward_to(:stop, planned, :success)
|
|
384
|
+
task.signals(:start, child, :start)
|
|
277
385
|
|
|
278
386
|
transaction_commit(plan, mission, planned, task, child) do |trsc, pm, pp, pt, pc|
|
|
279
387
|
trsc.replace(pt, r)
|
|
@@ -310,47 +418,26 @@ module TC_TransactionBehaviour
|
|
|
310
418
|
def test_relation_validation
|
|
311
419
|
t1, t2 = prepare_plan :tasks => 2
|
|
312
420
|
transaction_commit(plan, t1) do |trsc, p1|
|
|
313
|
-
trsc.
|
|
421
|
+
trsc.add_mission(t2)
|
|
314
422
|
assert_equal(plan, t1.plan)
|
|
315
423
|
assert_equal(trsc, p1.plan)
|
|
316
424
|
assert_equal(trsc, t2.plan)
|
|
317
|
-
assert_raises(RuntimeError) { t1.
|
|
425
|
+
assert_raises(RuntimeError) { t1.depends_on t2 }
|
|
318
426
|
assert_equal(plan, t1.event(:start).plan)
|
|
319
427
|
assert_equal(trsc, p1.event(:start).plan)
|
|
320
428
|
assert_equal(trsc, t2.event(:start).plan)
|
|
321
|
-
assert_raises(RuntimeError) { t1.
|
|
429
|
+
assert_raises(RuntimeError) { t1.signals(:start, t2, :start) }
|
|
322
430
|
end
|
|
323
431
|
end
|
|
324
432
|
|
|
325
|
-
def test_discard_modifications
|
|
326
|
-
t1, t2, t3 = prepare_plan :missions => 1, :discover => 1, :tasks => 1
|
|
327
|
-
t1.realized_by t2
|
|
328
|
-
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
329
|
-
p1.realized_by(t3)
|
|
330
|
-
trsc.remove_object(p1)
|
|
331
|
-
trsc.discard_modifications(t1)
|
|
332
|
-
end
|
|
333
|
-
assert(plan.include?(t1))
|
|
334
|
-
assert_equal([t2], t1.children.to_a)
|
|
335
|
-
|
|
336
|
-
t3 = SimpleTask.new
|
|
337
|
-
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
338
|
-
p1.realized_by t3
|
|
339
|
-
p1.remove_child p2
|
|
340
|
-
trsc.discard_modifications(t1)
|
|
341
|
-
end
|
|
342
|
-
assert(plan.include?(t1))
|
|
343
|
-
assert_equal([t2], t1.children.to_a)
|
|
344
|
-
end
|
|
345
|
-
|
|
346
433
|
def test_plan_finalized_task
|
|
347
|
-
t1, t2, t3 = prepare_plan :missions => 1, :
|
|
348
|
-
t1.
|
|
434
|
+
t1, t2, t3 = prepare_plan :missions => 1, :add => 1
|
|
435
|
+
t1.depends_on t2
|
|
349
436
|
|
|
350
437
|
t3 = SimpleTask.new
|
|
351
438
|
assert_raises(Roby::InvalidTransaction) do
|
|
352
439
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
353
|
-
p1.
|
|
440
|
+
p1.depends_on(t3)
|
|
354
441
|
assert(trsc.wrap(t1, false))
|
|
355
442
|
plan.remove_object(t1)
|
|
356
443
|
assert(trsc.invalid?)
|
|
@@ -360,138 +447,79 @@ module TC_TransactionBehaviour
|
|
|
360
447
|
end
|
|
361
448
|
|
|
362
449
|
def test_plan_add_remove_invalidate
|
|
363
|
-
t1 = prepare_plan :
|
|
450
|
+
t1 = prepare_plan :add => 1
|
|
364
451
|
assert_raises(Roby::InvalidTransaction) do
|
|
365
452
|
transaction_commit(plan, t1) do |trsc, p1|
|
|
366
|
-
trsc.conflict_solver = :invalidate
|
|
367
453
|
plan.remove_object(t1)
|
|
454
|
+
assert(!plan.include?(t1))
|
|
368
455
|
assert(trsc.invalid?)
|
|
369
456
|
end
|
|
370
457
|
end
|
|
371
458
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
end
|
|
459
|
+
# Test for a special case: the task is removed from the transaction and
|
|
460
|
+
# then removed from the plan. We should not invalidate in that case
|
|
461
|
+
t1 = prepare_plan :add => 1
|
|
462
|
+
transaction_commit(plan, t1) do |trsc, p1|
|
|
463
|
+
trsc.remove_object(p1)
|
|
464
|
+
plan.remove_object(t1)
|
|
465
|
+
assert(!trsc.invalid?)
|
|
466
|
+
end
|
|
381
467
|
end
|
|
382
468
|
|
|
383
469
|
def test_plan_relation_update_invalidate
|
|
384
|
-
t1, t2 = prepare_plan :
|
|
470
|
+
t1, t2 = prepare_plan :add => 2
|
|
385
471
|
|
|
386
|
-
t1.
|
|
472
|
+
t1.depends_on t2
|
|
387
473
|
assert_raises(Roby::InvalidTransaction) do
|
|
388
474
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
389
|
-
trsc.conflict_solver = :invalidate
|
|
390
475
|
assert(p1.child_object?(p2, Roby::TaskStructure::Hierarchy))
|
|
391
476
|
t1.remove_child t2
|
|
392
477
|
assert(trsc.invalid?)
|
|
393
478
|
end
|
|
394
479
|
end
|
|
395
480
|
|
|
396
|
-
t1.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
assert(!trsc.invalid?)
|
|
403
|
-
end
|
|
404
|
-
end
|
|
481
|
+
t1.depends_on t2
|
|
482
|
+
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
483
|
+
p1.remove_child p2
|
|
484
|
+
t1.remove_child t2
|
|
485
|
+
assert(!trsc.invalid?)
|
|
486
|
+
end
|
|
405
487
|
|
|
406
488
|
t1.remove_child t2
|
|
407
489
|
assert_raises(Roby::InvalidTransaction) do
|
|
408
490
|
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
409
|
-
|
|
410
|
-
t1.realized_by(t2)
|
|
491
|
+
t1.depends_on(t2)
|
|
411
492
|
assert(trsc.invalid?)
|
|
412
493
|
end
|
|
413
494
|
end
|
|
414
495
|
|
|
415
496
|
t1.remove_child t2
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
assert(!trsc.invalid?)
|
|
422
|
-
end
|
|
423
|
-
end
|
|
497
|
+
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
498
|
+
p1.depends_on p2
|
|
499
|
+
t1.depends_on t2
|
|
500
|
+
assert(!trsc.invalid?)
|
|
501
|
+
end
|
|
424
502
|
end
|
|
425
|
-
|
|
426
|
-
def test_plan_relation_update_solver
|
|
427
|
-
solver = Roby::SolverIgnoreUpdate.new
|
|
428
|
-
|
|
429
|
-
t1, t2, t3 = (1..3).map { SimpleTask.new }
|
|
430
|
-
t1.realized_by t2
|
|
431
|
-
plan.insert(t1)
|
|
432
|
-
|
|
433
|
-
assert_nothing_raised do
|
|
434
|
-
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
435
|
-
trsc.conflict_solver = solver
|
|
436
|
-
p1.realized_by(t3)
|
|
437
|
-
t1.remove_child(t2)
|
|
438
|
-
assert(!trsc.invalid?)
|
|
439
|
-
end
|
|
440
|
-
end
|
|
441
|
-
|
|
442
|
-
t3 = SimpleTask.new
|
|
443
|
-
t1.remove_child t2
|
|
444
|
-
assert_nothing_raised do
|
|
445
|
-
transaction_commit(plan, t1) do |trsc, p1|
|
|
446
|
-
trsc.conflict_solver = solver
|
|
447
|
-
p1.realized_by(t3)
|
|
448
|
-
t1.realized_by(t2)
|
|
449
|
-
assert(!trsc.invalid?)
|
|
450
|
-
end
|
|
451
|
-
end
|
|
452
|
-
end
|
|
453
|
-
|
|
454
|
-
def test_plan_relation_update_update
|
|
455
|
-
t1, t2, t3 = (1..3).map { SimpleTask.new }
|
|
456
|
-
t1.realized_by t2
|
|
457
|
-
plan.insert(t1)
|
|
458
|
-
|
|
459
|
-
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
460
|
-
trsc.conflict_solver = :update
|
|
461
|
-
p1.realized_by(t3)
|
|
462
|
-
assert(p1.child_object?(p2))
|
|
463
|
-
t1.remove_child(t2)
|
|
464
|
-
assert(!trsc.invalid?)
|
|
465
|
-
assert(!p1.child_object?(p2))
|
|
466
|
-
end
|
|
467
|
-
|
|
468
|
-
t3 = SimpleTask.new
|
|
469
|
-
t1.remove_child t2
|
|
470
|
-
transaction_commit(plan, t1, t2) do |trsc, p1, p2|
|
|
471
|
-
trsc.conflict_solver = :update
|
|
472
|
-
p1.realized_by(t3)
|
|
473
|
-
assert(!p1.child_object?(p2))
|
|
474
|
-
|
|
475
|
-
t1.realized_by(t2)
|
|
476
|
-
assert(p1.child_object?(p2))
|
|
477
|
-
assert(!trsc.invalid?)
|
|
478
|
-
end
|
|
479
|
-
end
|
|
480
|
-
|
|
481
503
|
end
|
|
482
504
|
|
|
483
505
|
class TC_Transactions < Test::Unit::TestCase
|
|
484
506
|
include TC_TransactionBehaviour
|
|
485
507
|
include Roby::Test
|
|
486
508
|
|
|
509
|
+
def test_real_plan
|
|
510
|
+
transaction_commit(plan) do |trsc|
|
|
511
|
+
assert_equal(plan, trsc.real_plan)
|
|
512
|
+
end
|
|
513
|
+
end
|
|
514
|
+
|
|
487
515
|
def test_and_event_aggregator
|
|
488
516
|
t1, t2, t3 = (1..3).map { SimpleTask.new }
|
|
489
517
|
transaction_commit(plan, t1) do |trsc, p1|
|
|
490
|
-
trsc.
|
|
491
|
-
trsc.
|
|
518
|
+
trsc.add_mission(t2)
|
|
519
|
+
trsc.add_mission(t3)
|
|
492
520
|
and_generator = (p1.event(:start) & t2.event(:start))
|
|
493
521
|
assert_equal(trsc, and_generator.plan)
|
|
494
|
-
and_generator.
|
|
522
|
+
and_generator.signals t3.event(:start)
|
|
495
523
|
end
|
|
496
524
|
|
|
497
525
|
t1.start!
|
|
@@ -503,18 +531,18 @@ class TC_Transactions < Test::Unit::TestCase
|
|
|
503
531
|
def test_or_event_aggregator
|
|
504
532
|
t1, t2, t3 = (1..3).map { SimpleTask.new }
|
|
505
533
|
transaction_commit(plan, t1) do |trsc, p1|
|
|
506
|
-
trsc.
|
|
507
|
-
trsc.
|
|
508
|
-
(p1.event(:start) | t2.event(:start)).
|
|
534
|
+
trsc.add_mission(t2)
|
|
535
|
+
trsc.add_mission(t3)
|
|
536
|
+
(p1.event(:start) | t2.event(:start)).signals t3.event(:start)
|
|
509
537
|
end
|
|
510
538
|
|
|
511
539
|
t1.start!
|
|
512
540
|
assert(t3.running?)
|
|
513
|
-
|
|
541
|
+
t2.start!
|
|
514
542
|
end
|
|
515
543
|
|
|
516
544
|
def test_commit_event_handlers
|
|
517
|
-
plan.
|
|
545
|
+
plan.add(e = Roby::EventGenerator.new(true))
|
|
518
546
|
def e.called_by_handler(mock)
|
|
519
547
|
mock.called_by_handler
|
|
520
548
|
end
|
|
@@ -537,10 +565,10 @@ class TC_Transactions < Test::Unit::TestCase
|
|
|
537
565
|
ev = nil
|
|
538
566
|
transaction_commit(plan, t1) do |trsc, p1|
|
|
539
567
|
ev = EventGenerator.new do
|
|
540
|
-
p1.
|
|
541
|
-
p1.
|
|
568
|
+
p1.forward_to(:start, t2, :start)
|
|
569
|
+
p1.signals(:start, t3, :start)
|
|
542
570
|
end
|
|
543
|
-
trsc.
|
|
571
|
+
trsc.add(ev)
|
|
544
572
|
ev
|
|
545
573
|
end
|
|
546
574
|
ev.call
|
|
@@ -554,16 +582,29 @@ class TC_RecursiveTransaction < Test::Unit::TestCase
|
|
|
554
582
|
include TC_TransactionBehaviour
|
|
555
583
|
include Roby::Test
|
|
556
584
|
|
|
557
|
-
|
|
558
|
-
|
|
585
|
+
attr_reader :real_plan
|
|
586
|
+
def engine; (real_plan || plan).engine end
|
|
559
587
|
def setup
|
|
560
|
-
@plan = Roby::Transaction.new(real_plan)
|
|
561
588
|
super
|
|
589
|
+
@real_plan = @plan
|
|
590
|
+
@plan = Roby::Transaction.new(real_plan)
|
|
562
591
|
end
|
|
563
592
|
def teardown
|
|
564
|
-
|
|
565
|
-
|
|
593
|
+
plan.discard_transaction
|
|
594
|
+
real_plan.clear
|
|
566
595
|
super
|
|
567
596
|
end
|
|
597
|
+
|
|
598
|
+
def test_real_plan
|
|
599
|
+
transaction_commit(plan) do |trsc|
|
|
600
|
+
assert_equal(real_plan, trsc.real_plan)
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
def test_transaction_stack
|
|
605
|
+
transaction_commit(plan) do |trsc|
|
|
606
|
+
assert_equal([trsc, plan, real_plan], trsc.transaction_stack)
|
|
607
|
+
end
|
|
608
|
+
end
|
|
568
609
|
end
|
|
569
610
|
|