buttonmen-dev / buttonmen

Buttonmen - an online dice game
Other
16 stars 24 forks source link

hope vs wtrollkin internal error found in replay testing #2254

Open cgolubi1 opened 7 years ago

cgolubi1 commented 7 years ago

In replay testing for #2085 i hit this:

Starting game 74
could not parse return:
Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/engine/BMAttack.php on line 564

Traceback (most recent call last):
  File "./test_log_games", line 71, in <module>
    c.log_test_game(i, button1, button2)
  File "lib/random_ai.py", line 1533, in log_test_game
    self.next_game_action()
  File "lib/random_ai.py", line 1517, in next_game_action
    if state == 'START_TURN': self._game_action_start_turn()
  File "lib/random_ai.py", line 1417, in _game_action_start_turn
    self.loaded_data['playerDataArray'][1])
  File "lib/random_ai.py", line 1330, in _game_action_start_turn_player
    retval and retval.message or "NULL"))
  File "lib/random_ai.py", line 1432, in bug
    raise ValueError, message
ValueError: API submit_turn(74, 0, 1, {'playerIdx_0_dieIdx_8': 'false', 'playerIdx_0_dieIdx_9': 'false', 'playerIdx_0_dieIdx_6': 'false', 'playerIdx_0_dieIdx_7': 'false', 'playerIdx_0_dieIdx_4': 'false', 'playerIdx_0_dieIdx_5': 'false', 'playerIdx_0_dieIdx_2': 'false', 'playerIdx_0_dieIdx_3': 'false', 'playerIdx_0_dieIdx_0': 'true', 'playerIdx_0_dieIdx_1': 'false', 'playerIdx_0_dieIdx_14': 'false', 'playerIdx_0_dieIdx_10': 'false', 'playerIdx_0_dieIdx_11': 'false', 'playerIdx_0_dieIdx_12': 'false', 'playerIdx_0_dieIdx_13': 'false', 'playerIdx_1_dieIdx_1': 'true', 'playerIdx_1_dieIdx_0': 'false'}, Trip, 1, 1504270598, {}) unexpectedly failed: NULL

I don't see how this can be a regression caused by that PR, so i think it's a different bug. The game was hope vs wtrollkin. That code segment in BMAttack.php is:

    protected function collect_firing_maxima(array $attackers) {
        $firingMaxima = array();

        if (empty($attackers)) {
            return $firingMaxima;
        }

        foreach ($attackers as $attacker) {
            $firingMaxima[] = $attacker->firingMax;  # line 564
        }

        return $firingMaxima;
    }
cgolubi1 commented 7 years ago

I have the file for the game state, and i'll pick it apart, see if this is reproducible, and make a responder test if so. For now this issue is just a placeholder.