Skip to content

Commit

Permalink
decider run tests
Browse files Browse the repository at this point in the history
  • Loading branch information
r3w0p committed Apr 25, 2022
1 parent 4f71af0 commit fcef180
Show file tree
Hide file tree
Showing 3 changed files with 208 additions and 13 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
https://github.com/r3w0p/bobocep/actions/workflows/cicd.yml)
[![Security](https://github.com/r3w0p/bobocep/actions/workflows/security.yml/badge.svg)](
https://github.com/r3w0p/bobocep/actions/workflows/security.yml)
[![coverage](https://coveralls.io/repos/github/r3w0p/bobocep/badge.svg?branch=develop)](
[![Coverage](https://coveralls.io/repos/github/r3w0p/bobocep/badge.svg?branch=develop)](
https://coveralls.io/github/r3w0p/bobocep?branch=develop)
[![Open Issues](https://img.shields.io/github/issues-raw/r3w0p/bobocep.svg)](
https://github.com/r3w0p/bobocep/issues)
Expand Down
22 changes: 12 additions & 10 deletions bobocep/engine/decider/bobo_decider_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,23 +87,25 @@ def _process_not_loop(self,
if block.strict:
self._halted = True
else:
temp_index += 1
self._move_forward(event, block, temp_index)

elif block.optional:
if not match and temp_index + 1 < len(self.pattern.blocks):
temp_index += 1
block = self.pattern.blocks[temp_index]
if block.loop:
self._process_loop(event, block, temp_index)
else:
self._process_not_loop(event, block, temp_index)
if not match:
if temp_index + 1 < len(self.pattern.blocks):
temp_index += 1
block = self.pattern.blocks[temp_index]
if block.loop:
self._process_loop(event, block, temp_index)
else:
self._process_not_loop(event, block, temp_index)
else:
self._move_forward(event, block, temp_index)

else:
if not match:
if block.strict:
self._halted = True
else:
temp_index += 1
self._move_forward(event, block, temp_index)

def _is_match(self,
Expand All @@ -123,5 +125,5 @@ def _move_forward(self,
block: BoboPatternBlock,
temp_index: int):
self._add_event(event, block)
self._block_index = temp_index
self._block_index = temp_index + 1
self._halted = self.is_complete()
197 changes: 195 additions & 2 deletions tests/test_engine/test_decider/test_bobo_decider_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def test_pattern_3_block_halt_complete_on_init():
assert not run.is_complete()


def test_pattern_3_block_halt_complete_process_to_complete():
def test_pattern_3_block_halt_complete_to_complete():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
.followed_by("group_b", BoboPredicateCallable(lambda e, h: True)) \
Expand Down Expand Up @@ -86,6 +86,25 @@ def test_pattern_3_block_halt_no_match_on_strict():
assert not run.is_complete()


def test_pattern_3_block_halt_no_match_on_strict_negated_to_complete():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
.not_next("group_b", BoboPredicateCallable(lambda e, h: False)) \
.followed_by("group_c", BoboPredicateCallable(lambda e, h: True)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), None))

run.process(BoboEventPrimitive("event_b", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), None))
assert run.is_halted()
assert run.is_complete()


def test_pattern_3_block_halt_match_on_strict_negated():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
Expand All @@ -101,7 +120,7 @@ def test_pattern_3_block_halt_match_on_strict_negated():
assert not run.is_complete()


def test_pattern_4_block_not_match_optional_process_to_complete():
def test_pattern_4_block_not_match_optional_to_complete():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
.followed_by("group_b", BoboPredicateCallable(lambda e, h: False),
Expand All @@ -120,3 +139,177 @@ def test_pattern_4_block_not_match_optional_process_to_complete():
run.process(BoboEventPrimitive("event_c", datetime.now(), None))
assert run.is_halted()
assert run.is_complete()


def test_pattern_4_block_match_optional_to_complete():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
.followed_by("group_b", BoboPredicateCallable(lambda e, h: True),
optional=True) \
.followed_by("group_c", BoboPredicateCallable(lambda e, h: True)) \
.followed_by("group_d", BoboPredicateCallable(lambda e, h: True)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), None))

run.process(BoboEventPrimitive("event_b", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_d", datetime.now(), None))
assert run.is_halted()
assert run.is_complete()


def test_pattern_4_block_not_match_optional_then_loop():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
.followed_by("group_b", BoboPredicateCallable(lambda e, h: True),
optional=False) \
.followed_by("group_c", BoboPredicateCallable(lambda e, h: True),
loop=True) \
.followed_by("group_d", BoboPredicateCallable(lambda e, h: True)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), None))

run.process(BoboEventPrimitive("event_b", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_d", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_e", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()


def test_pattern_4_block_match_optional_then_loop():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: True)) \
.followed_by("group_b", BoboPredicateCallable(lambda e, h: True),
optional=True) \
.followed_by("group_c", BoboPredicateCallable(lambda e, h: True),
loop=True) \
.followed_by("group_d", BoboPredicateCallable(lambda e, h: True)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), None))

run.process(BoboEventPrimitive("event_b", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_d", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_e", datetime.now(), None))
assert not run.is_halted()
assert not run.is_complete()


def test_pattern_3_block_loop_not_match_strict():
pattern = BoboPatternBuilder() \
.followed_by("group_a", BoboPredicateCallable(lambda e, h: e.data)) \
.next("group_b", BoboPredicateCallable(lambda e, h: e.data),
loop=True) \
.followed_by("group_c", BoboPredicateCallable(lambda e, h: e.data)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), True))

run.process(BoboEventPrimitive("event_b", datetime.now(), True))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), True))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_d", datetime.now(), False))
assert run.is_halted()
assert not run.is_complete()


def test_pattern_3_block_loop_to_complete():
pattern = BoboPatternBuilder() \
.followed_by("group_a",
BoboPredicateCallable(lambda e, h: e.data == 1)) \
.followed_by("group_b",
BoboPredicateCallable(lambda e, h: e.data == 2),
loop=True) \
.followed_by("group_c",
BoboPredicateCallable(lambda e, h: e.data == 3)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), 1))

run.process(BoboEventPrimitive("event_b", datetime.now(), 2))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), 2))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_d", datetime.now(), 3))
assert run.is_halted()
assert run.is_complete()


def test_pattern_4_block_2_loop_to_complete():
pattern = BoboPatternBuilder() \
.followed_by("group_a",
BoboPredicateCallable(lambda e, h: e.data == 1)) \
.followed_by("group_b",
BoboPredicateCallable(lambda e, h: e.data == 2),
loop=True) \
.followed_by("group_c",
BoboPredicateCallable(lambda e, h: e.data == 3),
loop=True) \
.followed_by("group_d",
BoboPredicateCallable(lambda e, h: e.data == 4)) \
.generate("pattern")

run = BoboDeciderRun("run_id", pattern,
BoboEventPrimitive("event_a", datetime.now(), 1))

run.process(BoboEventPrimitive("event_b", datetime.now(), 2))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_c", datetime.now(), 2))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_d", datetime.now(), 3))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_e", datetime.now(), 3))
assert not run.is_halted()
assert not run.is_complete()

run.process(BoboEventPrimitive("event_f", datetime.now(), 4))
assert run.is_halted()
assert run.is_complete()

0 comments on commit fcef180

Please sign in to comment.