honeynet/droidbot

Is this check necessary during add transition?

Closed this issue · 1 comments

Hello, Thanks for your amazing project!

In utg.py https://github.com/honeynet/droidbot/blob/master/droidbot/utg.py#L54,

def add_transition(self, event, old_state, new_state):

    self.add_node(old_state)
    self.add_node(new_state)

    # make sure the states are not None
    if not old_state or not new_state:
        return

    event_str = event.get_event_str(old_state)
    self.input_event_count += 1

    if old_state.state_str == new_state.state_str:
        self.ineffective_event_strs.add(event_str)
        # delete the transitions including the event from utg
        for new_state_str in self.G[old_state.state_str]:
            if event_str in self.G[old_state.state_str][new_state_str]["events"]:
                self.G[old_state.state_str][new_state_str]["events"].pop(event_str)
        if event_str in self.effective_event_strs:
            self.effective_event_strs.remove(event_str)
        return

    self.effective_event_strs.add(event_str)
    self.effective_event_count += 1

    if (old_state.state_str, new_state.state_str) not in self.G.edges():
        self.G.add_edge(old_state.state_str, new_state.state_str, events={})

    self.G[old_state.state_str][new_state.state_str]["events"][event_str] = {
        "event": event,
        "id": self.effective_event_count
    }
    self.last_state_str = new_state.state_str
    self.last_transition = (old_state.state_str, new_state.state_str)
    self.__output_utg()

Is this loop "for new_state_str in self.G[old_state.state_str]" to "pop" the ineffective event in other transitions between old_state and other state necessary?

If there are other transitions between the old_state and other states indeed, then the events in these transitons are capable of leading the old_state to new states, so the event, which gets to the scenario where old_state.state_str equals to new_state.state_str, is not supposed to be in these events, otherwise a new transition of the old_state can not be generated.

It would be really appreciated to get your reply.

Hi, the event's effect may change during testing. For example, in a book app, clicking a "next page" button may lead to a new state at first, while when there is no more page, the button will have no effect. In the code, I wanted to keep the effect of actions up to date.