Please find both attached and on the branch packet-table-bug-13771 @
FIXME a fix for bug #13771.
I would like to merge it into trunk shortly, but I understand if that's
not enough time for review. I will ping dachary on IRC, but I will
await at least his review before merging it to trunk.
Here's the commit log I'll use for the merge:
Merge packet-table-bug-13771 into trunk: PacketPokerTable.reason implementation
See packet-table-bug-13771 commit logs from r5960 to r5975 for detailed
implementation notes. Closes bug#13771. A summary of the work follows:
* PacketPokerTable.reason is now included. It defaults to an empty
string, but (when possible) the server sets this string to indicate
the reason the PacketPokerTable() is being sent. The documentation
in pokerpackets.py list the possible reasons.
* pokertable.py join and move methods need to carry along reason to
facilitate packet generation.
* pokeravatar.py now sends reason and argument in the proper places.
* pokerservice.py must do the same in two places: tourney creation and
moving a player during a tourney.
* Test coverage is corrected and complete throughout.
diff --git a/poker-network/ChangeLog b/poker-network/ChangeLog
index 4418770..9eb02a2 100644
--- a/poker-network/ChangeLog
+++ b/poker-network/ChangeLog
@@ -1,5 +1,74 @@
+2009-06-28 Bradley M. Kuhn <[email protected]>
+
+ * pokernetwork/pokerservice.py (PokerService.tourneyGameFilled):
+ Added reason argument to client.join() call.
+ (PokerService.tourneyMovePlayer): added reason argument to
+ movePlayer() call.
+
+ * tests/test-pokerservice.py.in (PokerServiceTestCase.ClientMockup)
+ (TourneyManagerTestCase.ClientMockup)
+ (TourneyFinishedTestCase.ClientMockup): Added reason argument to
+ mock-up.
+ (PokerServiceTestCase.test15_runTourney): Added expectedReason for
+ tourney start.
+ (TourneyMovePlayerTestCase.Table): Added reason support for
+ Table.moveTable() mock-up.
+
+ * pokernetwork/pokeravatar.py (PokerAvatar.createTable)
+ (PokerAvatar.handlePacketLogic)
+ (PokerAvatar.performPacketPokerTableJoin)
+ (PokerAvatar.performPacketPokerTablePicker)
+ (PokerAvatar.listTables, PokerAvatar.join): Added support for
+ PacketPokerTable() reason field throughout.
+
+ * tests/test-pokeravatar.py.in
+ (PokerAvatarTestCase.test04_createTable): Added packet checks,
+ including checking for reason.
+ (PokerAvatarTestCase.joinTableForceFail.forceFalse): Added reason
+ argument for mock-up.
+
+ * pokernetwork/pokerpackets.py (PacketPokerTable.__init__)
+ (PacketPokerTable.pack, PacketPokerTable.unpack)
+ (PacketPokerTable.calcsize, PacketPokerTable.__str__): Added
+ reason field.
+
+ * pokernetwork/pokeravatar.py (PokerAvatar.join): Added support
+ for reasons on joins.
+
+ * pokernetwork/pokertable.py (PokerTable.handReplay)
+ (PokerTable.movePlayer, PokerTable.joinPlayer): Added support for
+ reasons on joins.
+
+ * tests/test-pokertable.py.in
+ (PokerTableTestCaseBase.createPlayer)
+ (PokerTableTestCase.test18_handReplay)
+ (PokerTableTestCaseTransient.createPlayer)
+ (PokerTableMoveTestCase.test15_moveTo, MockClient.join)
+ (MockClient.__init__): Added support for reasons on joins.
+ (MockClientWithTableDict.__init__): Added test object argument.
+
+ * pokernetwork/pokerpackets.py (PacketPokerTable): Added
+ REASON_HAND_REPLAY.
+
+ * tests/test-pokeravatar.py.in
+ (PokerAvatarTestCaseBaseClass.joinTable): Added reason argument
+ and asserts for packet information.
+ (PokerAvatarTestCase.listTables): Added test for packet.reason.
+ (PokerAvatarTestCase.joinTableForceFail.forceFalse): Added test
+ for packet.reason.
+ (PokerAvatarTablePickerTestCase.tablePickerFails): Added test for
+ packet.reason.
+ (PokerAvatarTablePickerTestCase.tablePickerSucceeds): Added test
+ for packet.reason.
+
+ * pokernetwork/pokerpackets.py (PacketPokerTable): Created
+ constants for reasons.
+
2009-06-27 Bradley M. Kuhn <[email protected]>
+ * pokernetwork/pokerpackets.py (PacketPokerTable): Added reason
+ field and documented it.
+
* pokernetwork/pokeravatar.py
(PokerAvatar.performPacketPokerTablePicker): added support for
auto_blind_ante setting in packet.
diff --git a/poker-network/pokernetwork/pokeravatar.py b/poker-network/pokernetwork/pokeravatar.py
index ff0fd7f..a09686c 100644
--- a/poker-network/pokernetwork/pokeravatar.py
+++ b/poker-network/pokernetwork/pokeravatar.py
@@ -572,6 +572,7 @@ class PokerAvatar:
elif packet.type == PACKET_POKER_TABLE_JOIN:
self.performPacketPokerTableJoin(packet)
+
return
elif packet.type == PACKET_POKER_TABLE_PICKER:
@@ -747,14 +748,17 @@ class PokerAvatar:
table.update()
elif not table and packet.type == PACKET_POKER_HAND_REPLAY:
- table = self.createTable(PacketPokerTable())
+ table = self.createTable(PacketPokerTable(
+ reason = PacketPokerTable.REASON_HAND_REPLAY))
if table:
table.handReplay(self, packet.serial)
elif packet.type == PACKET_POKER_TABLE:
+ packet.reason = PacketPokerTable.REASON_TABLE_CREATE
table = self.createTable(packet)
if table:
- table.joinPlayer(self, self.getSerial())
+ table.joinPlayer(self, self.getSerial(),
+ reason = PacketPokerTable.REASON_TABLE_CREATE)
elif packet.type == PACKET_QUIT:
for table in self.tables.values():
@@ -782,15 +786,17 @@ class PokerAvatar:
# -------------------------------------------------------------------------
def performPacketPokerTableJoin(self, packet, table = None,
deprecatedEmptyTableBehavior = True,
- requestorPacketType = PACKET_POKER_TABLE_JOIN):
+ requestorPacketType = PACKET_POKER_TABLE_JOIN,
+ reason = PacketPokerTable.REASON_TABLE_JOIN):
"""Perform the operations that must occur when a
PACKET_POKER_TABLE_JOIN is received."""
if not table:
table = self.service.getTable(packet.game_id)
if table:
- if not table.joinPlayer(self, self.getSerial()):
+ if not table.joinPlayer(self, self.getSerial(),
+ reason = reason):
if deprecatedEmptyTableBehavior:
- self.sendPacketVerbose(PacketPokerTable())
+ self.sendPacketVerbose(PacketPokerTable(reason = reason))
self.sendPacketVerbose(
PacketPokerError(code = PacketPokerTableJoin.GENERAL_FAILURE,
message = "Unable to join table for unknown reason",
@@ -896,7 +902,8 @@ class PokerAvatar:
if self.performPacketPokerTableJoin(
PacketPokerTableJoin(serial = mySerial,
game_id = table.game.id), table,
- deprecatedEmptyTableBehavior = False):
+ deprecatedEmptyTableBehavior = False,
+ reason = PacketPokerTable.REASON_TABLE_PICKER):
# Giving no seat argument at all for the packet should cause
# us to get any available seat.
@@ -991,6 +998,7 @@ class PokerAvatar:
waiting = int(table['waiting']),
skin = table['skin'],
currency_serial = int(table['currency_serial']),
+ reason = PacketPokerTable.REASON_TABLE_LIST,
)
packet.tourney_serial = int(table['tourney_serial'])
packets.append(packet)
@@ -1040,17 +1048,20 @@ class PokerAvatar:
"player_timeout": packet.player_timeout,
"muck_timeout": packet.muck_timeout,
"currency_serial": packet.currency_serial,
- "skin": packet.skin })
+ "skin": packet.skin,
+ "reason" : packet.reason})
if not table:
- self.sendPacket(PacketPokerTable())
+ self.sendPacket(PacketPokerTable(reason = packet.reason))
return table
- def join(self, table):
+ def join(self, table, reason = ""):
game = table.game
self.tables[game.id] = table
- self.sendPacketVerbose(table.toPacket())
+ packet = table.toPacket()
+ packet.reason = reason
+ self.sendPacketVerbose(packet)
self.sendPacketVerbose(PacketPokerBuyInLimits(game_id = game.id,
min = game.buyIn(),
max = game.maxBuyIn(),
diff --git a/poker-network/pokernetwork/pokerpackets.py b/poker-network/pokernetwork/pokerpackets.py
index ed51255..052996b 100644
--- a/poker-network/pokernetwork/pokerpackets.py
+++ b/poker-network/pokernetwork/pokerpackets.py
@@ -1278,8 +1278,20 @@ player_timeout: the number of seconds after which a player in position is forced
muck_timeout: the number of seconds after which a player is forced to muck.
currency_serial: int currency id
skin: name of the level model to use
+reason: string representing the reason that this packet is being sent to
+ the client. Possible values are ("", "TableList", "TablePicker",
+ "TourneyMove", "TourneyStart", "TableJoin", "TableCreate", "HandReplay")
"""
+ REASON_TABLE_LIST = "TableList"
+ REASON_TABLE_PICKER = "TablePicker"
+ REASON_TOURNEY_MOVE = "TourneyMove"
+ REASON_TOURNEY_START = "TourneyStart"
+ REASON_TABLE_JOIN = "TableJoin"
+ REASON_TABLE_CREATE = "TableCreate"
+ REASON_HAND_REPLAY = "HandReplay"
+ REASON_NONE = ""
+
type = PACKET_POKER_TABLE
info = Packet.info + ( ('id', 0, 'I'),
@@ -1297,6 +1309,7 @@ skin: name of the level model to use
('variant', 'holdem', 's'),
('betting_structure', '2-4-limit', 's'),
('skin', 'default', 's'),
+ ('reason', '', 's'),
('tourney_serial', 0, 'no net')
)
@@ -1318,6 +1331,7 @@ skin: name of the level model to use
self.player_timeout = kwargs.get("player_timeout", 0)
self.muck_timeout = kwargs.get("muck_timeout", 0)
self.skin = kwargs.get("skin", "default")
+ self.reason = kwargs.get("reason", "")
self.currency_serial = kwargs.get("currency_serial", 0)
self.tourney_serial = kwargs.get("tourney_serial", 0)
@@ -1328,6 +1342,7 @@ skin: name of the level model to use
block += self.packstring(self.variant)
block += self.packstring(self.betting_structure)
block += self.packstring(self.skin)
+ block += self.packstring(self.reason)
return block
def unpack(self, block):
@@ -1338,13 +1353,14 @@ skin: name of the level model to use
(block, self.variant) = self.unpackstring(block)
(block, self.betting_structure) = self.unpackstring(block)
(block, self.skin) = self.unpackstring(block)
+ (block, self.reason) = self.unpackstring(block)
return block
def calcsize(self):
- return Packet.calcsize(self) + PacketPokerTable.format_size + self.calcsizestring(self.name) + self.calcsizestring(self.variant) + self.calcsizestring(self.betting_structure) + self.calcsizestring(self.skin)
+ return Packet.calcsize(self) + PacketPokerTable.format_size + self.calcsizestring(self.name) + self.calcsizestring(self.variant) + self.calcsizestring(self.betting_structure) + self.calcsizestring(self.skin) + self.calcsizestring(self.reason)
def __str__(self):
- return Packet.__str__(self) + "\n\tid = %d, name = %s, variant = %s, betting_structure = %s, seats = %d, average_pot = %d, hands_per_hour = %d, percent_flop = %d, players = %d, observers = %d, waiting = %d, player_timeout = %d, muck_timeout = %d, currency_serial = %d, skin = %s, tourney_serial = %i" % ( self.id, self.name, self.variant, self.betting_structure, self.seats, self.average_pot, self.hands_per_hour, self.percent_flop, self.players, self.observers, self.waiting, self.player_timeout, self.muck_timeout, self.currency_serial, self.skin, self.tourney_serial )
+ return Packet.__str__(self) + "\n\tid = %d, name = %s, variant = %s, betting_structure = %s, seats = %d, average_pot = %d, hands_per_hour = %d, percent_flop = %d, players = %d, observers = %d, waiting = %d, player_timeout = %d, muck_timeout = %d, currency_serial = %d, skin = %s, tourney_serial = %i, reason = %s" % ( self.id, self.name, self.variant, self.betting_structure, self.seats, self.average_pot, self.hands_per_hour, self.percent_flop, self.players, self.observers, self.waiting, self.player_timeout, self.muck_timeout, self.currency_serial, self.skin, self.tourney_serial, self.reason )
PacketFactory[PACKET_POKER_TABLE] = PacketPokerTable
diff --git a/poker-network/pokernetwork/pokerservice.py b/poker-network/pokernetwork/pokerservice.py
index d95b783..09853a6 100644
--- a/poker-network/pokernetwork/pokerservice.py
+++ b/poker-network/pokernetwork/pokerservice.py
@@ -926,7 +926,7 @@ class PokerService(service.Service):
# now be at the table, but table.joinPlayer() was never
# called (which is where the increase usually happens).
self.joinedCountIncrease()
- client.join(table)
+ client.join(table, reason = PacketPokerTable.REASON_TOURNEY_START)
sql = "update user2tourney set table_serial = %d where user_serial = %d and tourney_serial = %d" % ( game.id, serial, tourney.serial )
if self.verbose > 4:
self.message("tourneyGameFilled: " + sql)
@@ -963,7 +963,8 @@ class PokerService(service.Service):
def tourneyMovePlayer(self, tourney, from_game_id, to_game_id, serial):
from_table = self.getTable(from_game_id)
- from_table.movePlayer(from_table.serial2client.get(serial, None), serial, to_game_id)
+ from_table.movePlayer(from_table.serial2client.get(serial, None), serial,
+ to_game_id, reason = PacketPokerTable.REASON_TOURNEY_MOVE)
cursor = self.db.cursor()
sql = "UPDATE user2tourney SET table_serial = %d WHERE user_serial = %d AND tourney_serial = %d" % ( to_game_id, serial, tourney.serial )
if self.verbose > 4:
diff --git a/poker-network/pokernetwork/pokertable.py b/poker-network/pokernetwork/pokertable.py
index ec2cba7..92763c8 100644
--- a/poker-network/pokernetwork/pokertable.py
+++ b/poker-network/pokernetwork/pokertable.py
@@ -885,9 +885,10 @@ class PokerTable:
game.getPlayer(serial).money = serial2chips[serial]
game.sit(serial)
if self.isJoined(client):
- client.join(self)
+ client.join(self, reason = PacketPokerTable.REASON_HAND_REPLAY)
else:
- self.joinPlayer(client, client.getSerial())
+ self.joinPlayer(client, client.getSerial(),
+ reason = PacketPokerTable.REASON_HAND_REPLAY)
serial = client.getSerial()
cache = self.createCache()
for packet in self.history2packets(history, game.id, cache):
@@ -1033,7 +1034,7 @@ class PokerTable:
return True
- def movePlayer(self, client, serial, to_game_id):
+ def movePlayer(self, client, serial, to_game_id, reason = ""):
game = self.game
#
# We are safe because called from within the server under
@@ -1055,7 +1056,7 @@ class PokerTable:
self.error("movePlayer: player %d money %d in database, %d in memory" % ( serial, money_check, money ))
if client:
- client.join(other_table)
+ client.join(other_table, reason = reason)
other_table.movePlayerTo(serial, money, sit_out)
other_table.sendNewPlayerInformation(serial)
if not other_table.update_recursion:
@@ -1130,14 +1131,14 @@ class PokerTable:
game.comeBack(serial)
return True
- def joinPlayer(self, client, serial):
+ def joinPlayer(self, client, serial, reason = ""):
game = self.game
#
# Nothing to be done except sending all packets
# Useful in disconnected mode to resume a session.
#
if self.isJoined(client):
- client.join(self);
+ client.join(self, reason = reason);
return True
# Next, test to see if we have reached the server-wide maximum for
@@ -1163,7 +1164,7 @@ class PokerTable:
# Player is now an observer, unless he is seated
# at the table.
#
- client.join(self)
+ client.join(self, reason = reason)
self.factory.joinedCountIncrease()
if not self.game.isSeated(client.getSerial()):
self.observers.append(client)
diff --git a/poker-network/tests/test-pokeravatar.py.in b/poker-network/tests/test-pokeravatar.py.in
index f2f12ab..73e7746 100644
--- a/poker-network/tests/test-pokeravatar.py.in
+++ b/poker-network/tests/test-pokeravatar.py.in
@@ -246,7 +246,7 @@ class PokerAvatarTestCaseBaseClass(unittest.TestCase):
return client.packetDeferred(True, PACKET_POKER_PLAYER_INFO)
# -------------------------------------------------------------------------
def joinTable(self, (client, packet), id, gameId, name, struct, statsExpected = [],
- variant = 'holdem', max_players = 10):
+ variant = 'holdem', max_players = 10, reason = PacketPokerTable.REASON_TABLE_JOIN):
avatar = self.service.avatars[id]
table = self.service.getTable(gameId)
avatar.queuePackets()
@@ -257,6 +257,9 @@ class PokerAvatarTestCaseBaseClass(unittest.TestCase):
for packet in avatar.resetPacketsQueue():
if packet.type == PACKET_POKER_TABLE:
found += 1
+ self.assertEquals(packet.betting_structure, struct)
+ self.assertEquals(packet.variant, variant)
+ self.assertEquals(packet.reason, reason)
for (kk, vv) in avatar.tables.items():
self.assertEquals(vv.game.id, table.game.id)
self.assertEquals(vv.game.name, name)
@@ -446,18 +449,26 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
d.addCallback(self.login, 0)
def handleTable((client, packet)):
avatar = self.service.avatars[0]
- avatar.handlePacket(PacketPokerTable(id = 1, seats = 5,
- name = "A Testing Cash Table", variant = "holdem",
- betting_structure = '2-4-limit', player_timeout = 6,
- currency_serial = 0))
+ packets = avatar.handlePacket(PacketPokerTable(id = 1, seats = 5,
+ name = "A Testing Cash Table", variant = "holdem",
+ betting_structure = '2-4-limit', player_timeout = 6,
+ currency_serial = 0))
self.assertEquals(len(avatar.tables), 1)
for (kk, vv) in avatar.tables.items():
self.assertEquals(vv.game.name, "A Testing Cash Table")
self.assertEquals(vv.game.max_players, 5)
self.assertEquals(vv.game.variant, 'holdem')
self.assertEquals(vv.game.betting_structure, '2-4-limit')
+ found = False
+ for packet in packets:
+ if packet.type == PACKET_POKER_TABLE:
+ found = True
+ self.assertEquals(packet.betting_structure, '2-4-limit')
+ self.assertEquals(packet.variant, 'holdem')
+ self.assertEquals(packet.name, "A Testing Cash Table")
+ self.assertEquals(packet.reason, PacketPokerTable.REASON_TABLE_CREATE)
+ self.failUnless(found, "PACKET_POKER_TABLE not present")
return (client, packet)
-
d.addCallback(handleTable)
return d
# -------------------------------------------------------------------------
@@ -1620,6 +1631,7 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
count = 0
for p in packet.packets:
count += 1
+ self.assertEquals(p.reason, PacketPokerTable.REASON_TABLE_LIST)
self.assertEquals(p.average_pot, 0)
self.assertEquals(p.hands_per_hour, 0)
self.assertEquals(p.percent_flop, 0)
@@ -2710,7 +2722,7 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
avatar = self.service.avatars[id]
table = self.service.getTable(gameId)
- def forceFalse(self, amount):
+ def forceFalse(self, amount, reason = ""):
return False
originalJoin = table.joinPlayer
table.joinPlayer = forceFalse
@@ -2730,6 +2742,7 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
found += 1
self.assertEquals(packet.id, 0)
self.assertEquals(packet.name, "noname")
+ self.assertEquals(packet.reason, PacketPokerTable.REASON_TABLE_JOIN)
elif packet.type == PACKET_POKER_ERROR:
found += 1
self.assertEquals(packet.serial, client.getSerial())
@@ -2739,6 +2752,7 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
self.failUnless(len(packet.message) > 0,
"some message should be included")
self.assertEquals(found, 2)
+
return (client, packet)
# ------------------------------------------------------------------------
def test55_tableJoinWhenFails(self):
@@ -2862,6 +2876,7 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
self.assertEquals(packet.id, 0)
self.assertEquals(packet.seats, 10)
self.assertEquals(packet.name, 'noname')
+ self.assertEquals(packet.reason, PacketPokerTable.REASON_TABLE_CREATE)
self.assertEquals(found, True)
self.service.createTable = originalCreate
return (client, packet)
@@ -2920,6 +2935,9 @@ class PokerAvatarTestCase(PokerAvatarTestCaseBaseClass):
for packet in avatar.resetPacketsQueue():
if packet.type == PACKET_POKER_TABLE:
found += 1
+ self.assertEquals(packet.variant, 'holdem')
+ self.assertEquals(packet.betting_structure, struct)
+ self.assertEquals(packet.reason, PacketPokerTable.REASON_TABLE_JOIN)
for (kk, vv) in avatar.tables.items():
self.assertEquals(vv.game.id, table.game.id)
self.assertEquals(vv.game.name, name)
@@ -4110,19 +4128,22 @@ class PokerAvatarTablePickerTestCase(PokerAvatarTestCaseBaseClass):
for packet in avatar.resetPacketsQueue():
if packet.type == PACKET_POKER_TABLE:
found += 1
+ self.assertEquals(packet.reason, PacketPokerTable.REASON_TABLE_PICKER)
for (kk, vv) in avatar.tables.items():
self.assertEquals(vv.game.id, table.game.id)
self.assertEquals(vv.game.name, gameName)
- if variant != '':
- self.assertEquals(vv.game.variant, variant)
- else:
- self.failUnless(vv.game.variant in [ 'holdem', '7stud' ])
- if structure != '':
- self.assertEquals(vv.game.betting_structure, structure)
- else:
- self.failUnless(vv.game.betting_structure in [ '100-200-no-limit',
+ for ourVariant in [ vv.game.variant, packet.variant ]:
+ if variant != '':
+ self.assertEquals(ourVariant, variant)
+ else:
+ self.failUnless(ourVariant in [ 'holdem', '7stud' ])
+ for ourStruct in [ packet.betting_structure, vv.game.betting_structure ]:
+ if structure != '':
+ self.assertEquals(ourStruct, structure)
+ else:
+ self.failUnless(ourStruct in [ '100-200-no-limit',
'2-4-limit' ],
- "strange struct: \"" + vv.game.betting_structure + "\"")
+ "strange struct: \"" + ourStruct + "\"")
self.failUnless(vv.game.max_players in [ 8, 10, 6 ])
elif packet.type == PACKET_POKER_SEATS:
self.assertEquals(packet.game_id, table.game.id)
diff --git a/poker-network/tests/test-pokerservice.py.in b/poker-network/tests/test-pokerservice.py.in
index bbc17cc..06f93ae 100644
--- a/poker-network/tests/test-pokerservice.py.in
+++ b/poker-network/tests/test-pokerservice.py.in
@@ -1406,13 +1406,15 @@ class PokerServiceTestCase(PokerServiceTestCaseBase):
# ----------------------------------------------------------------
class ClientMockup:
- def __init__(self, serial):
+ def __init__(self, serial, testObject):
self.via_satellite = 0
self.serial = serial
self.packet_end_tournament = None
self.packets = []
self.tables = {}
self.joinedTables = []
+ self.testObject = testObject
+ self.expectedReason = ""
def sendPacketVerbose(self, packet):
# packet_end_tournament was an expected field by some tests
@@ -1421,9 +1423,10 @@ class PokerServiceTestCase(PokerServiceTestCaseBase):
self.packet_end_tournament = packet
self.packets.append(packet)
- def join(self, table):
+ def join(self, table, reason = ""):
self.joinedTables.append(table)
self.tables[table.game.id] = table
+ self.testObject.assertEquals(self.expectedReason, reason)
def getSerial(self):
return self.serial
@@ -1464,7 +1467,7 @@ class PokerServiceTestCase(PokerServiceTestCaseBase):
return table
tourney = self.TourneyMockup()
- self.service.client = self.ClientMockup(self.user1_serial)
+ self.service.client = self.ClientMockup(self.user1_serial, self)
self.service.getTable = getTableMockup
self.service.tourneyRemovePlayer(tourney, 0, self.user1_serial)
self.assertEquals(self.service.client.packet_end_tournament == None, True)
@@ -1480,7 +1483,7 @@ class PokerServiceTestCase(PokerServiceTestCaseBase):
tourney = self.TourneyMockup()
tourney.players = [2, self.user1_serial, 10]
- client = self.ClientMockup(self.user1_serial)
+ client = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client
self.service.getTable = getTableMockup
self.service.tourneyRemovePlayer(tourney, 0, self.user1_serial)
@@ -1501,7 +1504,7 @@ class PokerServiceTestCase(PokerServiceTestCaseBase):
tourney = self.TourneyMockup()
tourney.rank = 2
- client = self.ClientMockup(self.user1_serial)
+ client = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client
self.service.getTable = getTableMockup
self.service.tourneyRemovePlayer(tourney, 0, self.user1_serial)
@@ -1605,9 +1608,9 @@ class PokerServiceTestCase(PokerServiceTestCaseBase):
self.service.startService()
self.createUsers()
- client1 = self.ClientMockup(self.user1_serial)
+ client1 = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client1
-
+ client1.expectedReason = PacketPokerTable.REASON_TOURNEY_START
(heads_up,) = filter(lambda tourney: tourney.name == 'sitngo2', self.service.tourneys.values())
clear_all_messages()
self.service.tourneyRegister(PacketPokerTourneyRegister(serial = self.user1_serial,
@@ -2050,13 +2053,16 @@ class TourneyCancelTestCase(PokerServiceTestCaseBase):
# ----------------------------------------------------------------
class TourneyManagerTestCase(PokerServiceTestCaseBase):
class ClientMockup:
- def __init__(self, serial):
+ def __init__(self, serial, testObject):
self.serial = serial
self.tableJoined = None
self.packets = []
+ self.testObject = testObject
+ self.expectedReason = ""
- def join(self, table):
+ def join(self, table, reason = ""):
self.tableJoined = table
+ self.testObject.assertEquals(self.expectedReason, reason)
def sendPacketVerbose(self, packet):
self.packets.append(packet)
@@ -2070,7 +2076,7 @@ class TourneyManagerTestCase(PokerServiceTestCaseBase):
table_money = 140
tourney_serial, schedule = self.service.tourneys_schedule.items()[0]
# One client (user1) has a Client logged in
- client1 = TourneyManagerTestCase.ClientMockup(self.user1_serial)
+ client1 = TourneyManagerTestCase.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client1
self.service.spawnTourney(schedule)
clear_all_messages()
@@ -2301,15 +2307,16 @@ class TourneyMovePlayerTestCase(PokerServiceTestCaseBase):
self.serial = TourneyMovePlayerTestCase.tourney_serial
class Table:
- def __init__(self):
+ def __init__(self, testObject):
self.serial2client = {}
+ self.testObj = testObject
- def movePlayer(self, client, serial, to_game_id):
- pass
+ def movePlayer(self, client, serial, to_game_id, reason = ""):
+ self.testObj.assertEquals(reason, PacketPokerTable.REASON_TOURNEY_MOVE)
def test_ok(self):
self.service.startService()
- self.service.getTable = lambda from_game_id: TourneyMovePlayerTestCase.Table()
+ self.service.getTable = lambda from_game_id: TourneyMovePlayerTestCase.Table(self)
user_serial = 1
table_serial = 100
cursor = self.db.cursor()
@@ -2319,7 +2326,7 @@ class TourneyMovePlayerTestCase(PokerServiceTestCaseBase):
def test_missing_db_record(self):
self.service.startService()
- self.service.getTable = lambda from_game_id: TourneyMovePlayerTestCase.Table()
+ self.service.getTable = lambda from_game_id: TourneyMovePlayerTestCase.Table(self)
user_serial = 1
table_serial = 100
cursor = self.db.cursor()
@@ -2659,13 +2666,16 @@ class TourneySatelliteTestCase(PokerServiceTestCaseBase):
class TourneyFinishedTestCase(PokerServiceTestCaseBase):
class ClientMockup:
- def __init__(self, serial):
+ def __init__(self, serial, testObject):
self.serial = serial
# self.tableJoined = None
self.packets = []
+ self.testObject = testObject
+ self.expectedReason = ""
- def join(self, table):
+ def join(self, table, reason = ""):
self.tableJoined = table
+ self.assertEquals(self.execptedReason, reason)
def sendPacketVerbose(self, packet):
self.packets.append(packet)
@@ -2684,7 +2694,7 @@ class TourneyFinishedTestCase(PokerServiceTestCaseBase):
return [self.prize_min]
self.service.startService()
self.createUsers()
- client1 = self.ClientMockup(self.user1_serial)
+ client1 = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client1
tournament = Tournament()
winner_serial = self.user1_serial
@@ -2754,7 +2764,7 @@ class TourneyFinishedTestCase(PokerServiceTestCaseBase):
return [self.prize_min]
self.service.startService()
self.createUsers()
- client1 = self.ClientMockup(self.user1_serial)
+ client1 = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client1
tournament = Tournament()
winner_serial = self.user1_serial
@@ -2781,9 +2791,9 @@ class TourneyFinishedTestCase(PokerServiceTestCaseBase):
return [self.prize_min]
self.service.startService()
self.createUsers()
- client1 = self.ClientMockup(self.user1_serial)
+ client1 = self.ClientMockup(self.user1_serial, self)
client1.tourneys = []
- client2 = self.ClientMockup(self.user2_serial)
+ client2 = self.ClientMockup(self.user2_serial, self)
client2.tourneys = [1, 2]
self.service.serial2client[self.user1_serial] = client1
self.service.serial2client[self.user2_serial] = client2
@@ -2829,7 +2839,7 @@ class TourneyFinishedTestCase(PokerServiceTestCaseBase):
return [self.prize_min]
self.service.startService()
self.createUsers()
- client1 = self.ClientMockup(self.user1_serial)
+ client1 = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client1
tournament = Tournament()
winner_serial = self.user1_serial
@@ -2868,9 +2878,9 @@ class TourneyFinishedTestCase(PokerServiceTestCaseBase):
return [self.prize_min]
self.service.startService()
self.createUsers()
- client1 = self.ClientMockup(self.user1_serial)
+ client1 = self.ClientMockup(self.user1_serial, self)
self.service.serial2client[self.user1_serial] = client1
- client2 = self.ClientMockup(self.user2_serial)
+ client2 = self.ClientMockup(self.user2_serial, self)
self.service.serial2client[self.user2_serial] = client2
tournament = Tournament()
winner_serial = self.user1_serial
diff --git a/poker-network/tests/test-pokertable.py.in b/poker-network/tests/test-pokertable.py.in
index 32bd765..98bb1f5 100644
--- a/poker-network/tests/test-pokertable.py.in
+++ b/poker-network/tests/test-pokertable.py.in
@@ -315,7 +315,7 @@ class MockClient:
def isLogged(self):
return True
- def __init__(self, serial):
+ def __init__(self, serial, testObject, expectedReason = ""):
self.serial = serial
self.deferred = None
self.raise_if_packet = None
@@ -323,6 +323,8 @@ class MockClient:
self.tables = {}
self.packets = []
self.user = MockClient.User()
+ self.testObject = testObject
+ self.reasonExpected = expectedReason
def __str__(self):
return "MockClient of Player%d" % self.serial
@@ -347,8 +349,8 @@ class MockClient:
def error(self, message):
self.message("error " + message)
- def join(self, table):
- pass
+ def join(self, table, reason = ""):
+ self.testObject.assertEquals(reason, self.reasonExpected)
# Loic indicates that it's the job of the Client to pass along a few
# things, including "player removes", and various clients settings, to
@@ -417,14 +419,13 @@ class MockClientBot(MockClient):
return "BOT%d" % self.serial
# --------------------------------------------------------------------------------
class MockClientWithTableDict(MockClient):
- def __init__(self, serial):
+ def __init__(self, serial, testObject):
self.tables = {}
- MockClient.__init__(self, serial)
+ MockClient.__init__(self, serial, testObject)
def addPlayer(self, table, seat):
MockClient.addPlayer(self, table, seat)
self.tables[table.game.id] = seat
-
# --------------------------------------------------------------------------------
class MockClientWithRemoveTable(MockClient):
def removeTable(self, gameId):
@@ -485,10 +486,13 @@ class PokerTableTestCaseBase(unittest.TestCase):
def createPlayer(self, serial, getReadyToPlay=True, clientClass=MockClient, table=None):
if table == None:
table = self.table
- client = clientClass(serial)
+ client = clientClass(serial, self)
self.clients[serial] = client
if getReadyToPlay:
- self.assertEqual(True, table.joinPlayer(client, serial))
+ client.reasonExpected = "MockCreatePlayerJoin"
+ self.assertEqual(True, table.joinPlayer(client, serial,
+ reason = "MockCreatePlayerJoin"))
+ client.reasonExpected = ""
self.assertEqual(True, table.seatPlayer(client, serial, -1))
self.assertEqual(True, table.buyInPlayer(client, self.table.game.maxBuyIn()))
self.table.sitPlayer(client, serial)
@@ -839,6 +843,8 @@ class PokerTableTestCase(PokerTableTestCaseBase):
# To get coverage of a player who isn't joined to the table requesting.
player2 = self.createPlayer(2, False)
+ player1.reasonExpected = "HandReplay"
+ player2.reasonExpected = "HandReplay"
for player in (player1, player2):
self.table.handReplay(player, myHandId)
checkHandSerial(player.lookForPacket(PACKET_POKER_START))
@@ -1519,7 +1525,7 @@ class PokerTableTestCaseWithPredefinedDecksAndNoAutoDeal(PokerTableTestCase):
"""Player join a second time : packets sent twice"""
player = self.createPlayer(1)
self.assertEqual(True, self.table.isJoined(player))
- def join(table):
+ def join(table, reason = ""):
player.joined = True
player.join = join
self.assertEqual(True, self.table.joinPlayer(player, player.serial))
@@ -1579,9 +1585,11 @@ class PokerTableTestCaseTransient(PokerTableTestCase):
def createPlayer(self, serial, getReadyToPlay=True, clientClass=MockClient, table=None):
if table == None:
table = self.table
- client = clientClass(serial)
+ client = clientClass(serial, self)
self.clients[serial] = client
- table.joinPlayer(client, serial)
+ client.reasonExpected = "MockTransientCreatePlayer"
+ table.joinPlayer(client, serial, reason = "MockTransientCreatePlayer")
+ client.reasonExpected = ""
if getReadyToPlay:
self.assertEqual(True, table.seatPlayer(client, serial, -1))
table.sitPlayer(client, serial)
@@ -1837,6 +1845,8 @@ class PokerTableMoveTestCase(PokerTableTestCaseBase):
def test15_moveTo(self):
"""Make sure a player can move from one place to another"""
player = self.createPlayer(1)
+ player.reasonExpected = "MockMoveTest"
+
otherTablePlayer = self.createPlayer(2, table=self.table2)
expectPlayerDeferred = otherTablePlayer.waitFor(PACKET_POKER_PLAYER_ARRIVE)
@@ -1852,7 +1862,8 @@ class PokerTableMoveTestCase(PokerTableTestCaseBase):
# called as a side effect of moving the player to the table2
#
self.table2.timer_info['dealTimeout'] = reactor.callLater(200000, lambda: True)
- self.table.movePlayer(player, 1, self.table2.game.id)
+ self.table.movePlayer(player, 1, self.table2.game.id,
+ reason = "MockMoveTest")
return expectPlayerDeferred
# --------------------------------------------------------------------------------
--
-- bkuhn
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users