Bases: object
Superclass of ControlFlow types
Bases: sts.syncproto.sts_syncer.STSSyncCallback, pox.lib.revent.revent.EventMixin
If get_interpolated_time is None, will always wait on deterministic values. If not None, will always invoke get_interpolated_time and respond immediately
ACK the pending state change, and collect the PendingStateChange from our buffer
Bases: sts.control_flow.event_scheduler.EventSchedulerBase
Bases: sts.control_flow.event_scheduler.EventSchedulerBase
an EventWatchers schedules events. It controls their admission, and any post-event delay
Bases: sts.control_flow.base.ControlFlow
Injects input events at random intervals, periodically checking for invariant violations. (Not the proper use of the term Fuzzer)
Bases: sts.control_flow.base.ControlFlow
Presents an interactive prompt for injecting events and checking for invariants at the users’ discretion
Bases: object
An orchestrating control flow that invokes replayer several times to find the minimal causal sequence (MCS) of a failure.
Bases: sts.control_flow.mcs_finder.MCSFinder
Exactly the same functionality as MCSFinder, but assumes that indeterminate results cannot occur. Worst-case runtime of O(n) as opposed to O(n^2) replays. Taken from the predecessor paper:
Section 4
Bases: sts.control_flow.base.ControlFlow
Bases: object
Logs intermedate and final MCS results that are the outcome(s) of delta debugging
Bases: object
Logs intermediate and final replay traces chosen by delta debugging
Bases: object
Set new_events’ timestamps to approximately the same timestamp as old_events.
Precondition: old_events != []
Track # of instances where an expected event matches 2 or more inferred events. Mutates Peeker.ambiguous_counts and Peeker.ambiguous_events
Return previously observed internal events between the left_input and the right_input event
left_input may be None case we return events from the beginning of events_list
right_input may also be None, in which case we return all events following left_input
Bases: object
Dataplane permits are the default, unless they were explicitly dropped in the initial run. This class keeps track of whether pending dataplane events should be dropped or forwarded during replay
Consider the round i of a DataplaneDrop in the original event ordering. slop_buffer defines how tolerant we are to differences in the position of the correspdonding DataplaneDrop event in the pruned run. A slop_buffer of 4 says that we will tolerate the same DataplaneDrop in the pruned run occuring in the range [i-4,i+4]. If the corresponding DataplaneDrop occurs outside of this window, we won’t detect it, and will treat it as a default DataplanePermit
Bases: object
Tracks how many drops we actually performed vs. how many we expected to perform
Bases: sts.control_flow.base.ControlFlow
Replay events from a trace
To set the event scheduling parameters, pass them as keyword args to the constructor of this class, which will pass them on to the EventScheduler object it creates.
During divergence, the controller may ask for the current time more or less times than they did in the original run. We control the time, so we need to give them some answer. The answers we give them should be (i) monotonically increasing, and (ii) between the time of the last recorded (“landmark”) event and the next landmark event, and (iii) as close to the recorded times as possible
Our temporary solution is to always return the time right before the next landmark