Esempio n. 1
0
    def test_Table(self):
        try:
            table = datalayer.getOrCreateSavedTable('notATableId')
            print(table)

            tableII = datalayer.getOrCreateSavedTable(table.tableId)
            print(tableII)

            self.assertEqual(table.tableId, tableII.tableId)

            tableII.addPlayers(buildPlayers(5))
            tableII.setDealerAtRandom()
            tableII.setBlinds()
            tableII.prepareForNextHand()
            tableII.currentBet = 500

            datalayer.updateTable(tableII)
            tableIII = datalayer.getOrCreateSavedTable(tableII.tableId)

            self.assertEqual(tableII.tableId, tableIII.tableId)
            self.assertEqual(tableII.blind, tableIII.blind)
            self.assertEqual(tableII.currentBet, tableIII.currentBet)
            self.assertEqual(tableII.players[0].name, tableIII.players[0].name)
            self.assertEqual(tableII.players[1].name, tableIII.players[1].name)
            self.assertEqual(tableII.players[2].name, tableIII.players[2].name)
            self.assertEqual(tableII.players[3].name, tableIII.players[3].name)
            self.assertEqual(tableII.players[4].name, tableIII.players[4].name)
            self.assertEqual(tableII.statusId, tableIII.statusId)
        finally:
            datalayer.deleteTable(table)
            datalayer.deleteTable(tableII)
            datalayer.deleteTable(tableIII)
Esempio n. 2
0
    def test_player_evicted_after_timout(self):
        try:
            table = datalayer.getOrCreateSavedTable("x")
            player1 = datalayer.getOrCreateSavedPlayer("x", "player one")
            table = datalayer.findATableForPlayer(player1)
            player2 = datalayer.getOrCreateSavedPlayer("x", "player two")
            table = datalayer.findATableForPlayer(player2)
            player3 = datalayer.getOrCreateSavedPlayer("x", "player three")
            table = datalayer.findATableForPlayer(player3)
            player4 = datalayer.getOrCreateSavedPlayer("x", "player four")
            table = datalayer.findATableForPlayer(player4)

            currentStatusId = table.statusId

            self.assertEqual(4, len(table.players))
            for player in table.players:
                playProcessor.checkForUpdates(table, player, currentStatusId)

            logging.log(
                logging.INFO,
                "Waiting 5 seconds to see if player is automatically evicted")
            table.PLAYER_TURN_LIMIT = 5  # 5 seconds
            time.sleep(6)

            playProcessor.checkForUpdates(table, player, currentStatusId)
            self.assertEqual(3, len(table.players))

        except Exception as error:
            print("Unable to test." + str(error))
            print('-' * 60)
            traceback.print_exc(file=sys.stdout)
            print('-' * 60)

        finally:
            datalayer.deleteTable(table)
Esempio n. 3
0
def makePlay(event, context):
    logger.info("makePlay called " + str(event))
    try:
        playerId = event['playerId']
        playerAction = event['playerAction']
        tableId = event['tableId']
        tableStatusId = event['tableStatusId']
        actionAmount = event['actionAmount']
        table =  datalayer.getOrCreateSavedTable(tableId)
        logger.info("retrieved table: " + table.tableId)
        player = table.findPlayerById(playerId)
        logger.info("retrieved player from table: " + player.playerId)
#         if table.statusId != int(tableStatusId):
#             status = 500
#             body = {"message": "Play is out of turn."}
#             raise  ValueError ("Play is out of turn.")
#         else:
        table = playProcessor.makePlay(player, table, playerAction, actionAmount, tableStatusId)
        status = 200
        body = buildTableResult(table)

    except Exception as error:
        logger.exception("Unable to make play." + str(error))
        status = 500
        body = str(error)

    return createResponse(status, body)
Esempio n. 4
0
    def test_play_a_Round_via_processor(self):
        '''
        Attempt to simulate several browsers asking for data and processing
        '''
        try:
            table = datalayer.getOrCreateSavedTable("x")
            player1 = datalayer.getOrCreateSavedPlayer("x", "player one")
            table = datalayer.findATableForPlayer(player1)
            player2 = datalayer.getOrCreateSavedPlayer("x", "player two")
            table = datalayer.findATableForPlayer(player2)
            player3 = datalayer.getOrCreateSavedPlayer("x", "player three")
            table = datalayer.findATableForPlayer(player3)
            player4 = datalayer.getOrCreateSavedPlayer("x", "player four")
            table = datalayer.findATableForPlayer(player4)

            currentStatusId = table.statusId

            for player in table.players:
                playProcessor.checkForUpdates(table, player, currentStatusId)

            if table.statusId != currentStatusId:
                tableCards = 0
                while not tableCards == 5:  #isHandComplete (processes on own)
                    playedCount = 0
                    while playedCount < len(
                            table.players):  ## is round complete
                        for player in table.players:
                            if player.turn:
                                myBet = table.currentBet - player.currentBet
                                playProcessor.makePlay(player, table, 'bet',
                                                       myBet, table.statusId)
                                playedCount = playedCount + 1
                                # the processor will automatically reset this above, so we need to fake this out to test
                                if len(table.cards) > 0:
                                    tableCards = len(table.cards)
                                break

            self.assertEquals(len(table.cards), 5)
            if (len(table.winners) == 1):
                assert (table.winners[0].chips, 104)
            for player in table.winners:
                print(str(player) + " wins ")
            self.assertTrue(len(table.winners) > 0)

            table.prepareForNextHand()
            playerTurnCount = 0
            for player in table.players:
                if player.turn:
                    playerTurnCount = playerTurnCount + 1
            self.assertEqual(playerTurnCount, 1)

        except Exception as error:
            print("Unable to test." + str(error))
            print('-' * 60)
            traceback.print_exc(file=sys.stdout)
            print('-' * 60)

        finally:
            datalayer.deleteTable(table)
Esempio n. 5
0
    def testResetTables(self):
        try:
            players = buildPlayers(1)
            table = datalayer.findATableForPlayer(players[0])
            firstTableId = table.tableId
            table.blind = 5
            table.currentBet = 1000
            datalayer.updateTable(table)

            table2 = datalayer.getOrCreateSavedTable(firstTableId)
            self.assertEquals(table2.tableId, firstTableId)
            self.assertEqual(len(table2.players), len(table.players))
            datalayer.resetUnusedTables(4)

            logging.log(
                logging.INFO,
                "Waiting 5 seconds to see if player is automatically evicted")
            time.sleep(5)
            table3 = datalayer.getOrCreateSavedTable(firstTableId)
            self.assertEqual(1, len(table3.players))
            self.assertEquals(table3.tableId, firstTableId)
        finally:
            datalayer.updateTable(table)
            datalayer.deleteTable(table2)
Esempio n. 6
0
def removePlayer(event, context):
    logger.info("removePlayer called " + str(event))
    try:
        tableId = event['tableId']
        playerId = event['playerId']
        logger.info("tableID: {0}, playerId{1}".format(tableId, playerId))
        table =  datalayer.getOrCreateSavedTable(tableId)
        logger.info("retrieved table: " + table.tableId)
        player = table.findPlayerById(playerId)
        logger.info("retrieved player from table: " + player.playerId)
        table.removePlayer(player)
        datalayer.deletePlayer(player)
        datalayer.updateTable(table)
        status = 200
        body = buildTableResult(table)
    except Exception as error:
        logger.exception("Unable to remove player." + str(error))
        status = 500
        body = str(error)

    return createResponse(status, body)
Esempio n. 7
0
def checkForUpdates(event, context):
    logger.info("checkForUpdates called " + str(event))
    try:
        tableId = event['tableId']
        tableStatusId = event['tableStatusId']
        playerId = event['playerId']
        logger.info("tableID: {0}, tableStatusId: {1}, playerId{2}".format(tableId, tableStatusId, playerId))
        table =  datalayer.getOrCreateSavedTable(tableId)
        logger.info("retrieved table: " + table.tableId)
        player = table.findPlayerById(playerId)
        if player is None:
            logger.info("Player not on table raising error... " )
            raise Exception("Player not found at table.")
        else:
            logger.info("retrieved player from table: " + player.playerId)
        table = playProcessor.checkForUpdates(table, player, tableStatusId)
        status = 200
        body = buildTableResult(table)
    except Exception as error:
        logger.exception("Unable to check for updates." + str(error))
        status = 500
        body = str(error)

    return createResponse(status, body)