def test_2_nfas_2_versions_1_increment(self):
        buffer = SharedVersionedMatchBuffer()

        run_id_a = generate_unique_string()
        run_id_a_incr = generate_unique_string()
        run_id_b = generate_unique_string()

        # create two versions for run a and run b
        version_a = RunVersion()
        version_a.add_level(run_id_a)
        version_a_str = version_a.get_version_as_str()

        version_b = RunVersion()
        version_b.add_level(run_id_b)

        # add event a into version a, run a
        buffer.put_event(nfa_name=NFA_NAME_A,
                         run_id=run_id_a,
                         version=version_a_str,
                         state_label=LABEL_LAYER_A,
                         event=event_a)

        # increment version a
        version_a.increment_level(generate_unique_string())
        version_a_incr_str = version_a.get_version_as_str()

        # add event b to version a incr, run a incr
        buffer.put_event(nfa_name=NFA_NAME_A,
                         run_id=run_id_a,
                         version=version_a_str,
                         state_label=LABEL_LAYER_B,
                         event=event_b,
                         new_run_id=run_id_a_incr,
                         new_version=version_a_incr_str)

        # add event c to version b, run b
        buffer.put_event(nfa_name=NFA_NAME_B,
                         run_id=run_id_b,
                         version=version_b.get_version_as_str(),
                         state_label=LABEL_LAYER_C,
                         event=event_c)

        # should only return events associated with version a and incr
        history_1 = buffer.get_all_events(nfa_name=NFA_NAME_A,
                                          run_id=run_id_a_incr,
                                          version=version_a)

        self.assertDictEqual(history_1.events, {
            LABEL_LAYER_A: [event_a],
            LABEL_LAYER_B: [event_b]
        })

        # should only return events associated with version 2 and run 2
        history_2 = buffer.get_all_events(nfa_name=NFA_NAME_B,
                                          run_id=run_id_b,
                                          version=version_b)

        self.assertDictEqual(history_2.events, {LABEL_LAYER_C: [event_c]})
    def test_1_level_10_increments_1_event_per_increment(self):
        buffer = SharedVersionedMatchBuffer()
        run_id = generate_unique_string()

        events = [
            PrimitiveEvent(timestamp=EpochNSClock.generate_timestamp())
            for _ in range(10)
        ]

        version = RunVersion()
        version.add_level(run_id)
        version_current = version.get_version_as_str()

        for event in events:
            version.increment_level(generate_unique_string())
            version_next = version.get_version_as_str()

            buffer.put_event(nfa_name=NFA_NAME_A,
                             run_id=run_id,
                             version=version_current,
                             state_label=LABEL_LAYER_A,
                             event=event,
                             new_version=version_next)

            version_current = version_next

        history_events = buffer.get_all_events(
            nfa_name=NFA_NAME_A, run_id=run_id,
            version=version).events[LABEL_LAYER_A]

        self.assertEqual(10, len(history_events))

        for event in events:
            self.assertTrue(event in history_events)