From 347a1a0963a3afe940d33abf3ed74f691de29c5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gr=C3=A9gory=20Wisniewski?= <gregory@nexedi.com>
Date: Thu, 14 Jan 2010 16:57:06 +0000
Subject: [PATCH] Fix some master's storage handler tests

- Use the client's service handler because of handler split
- Fix use of identifyToMasterNode()
- Set IDs on packets
- Use new-style packet decoding

git-svn-id: https://svn.erp5.org/repos/neo/trunk@1437 71dcc9de-d417-0410-9af5-da40c76e7ee4
---
 neo/tests/master/testStorageHandler.py | 50 ++++++++++++--------------
 1 file changed, 23 insertions(+), 27 deletions(-)

diff --git a/neo/tests/master/testStorageHandler.py b/neo/tests/master/testStorageHandler.py
index 2b126c49..13ae1925 100644
--- a/neo/tests/master/testStorageHandler.py
+++ b/neo/tests/master/testStorageHandler.py
@@ -24,6 +24,7 @@ from neo import protocol
 from neo.protocol import Packet, Packets
 from neo.protocol import NodeTypes, NodeStates, CellStates
 from neo.master.handlers.storage import StorageServiceHandler
+from neo.master.handlers.client import ClientServiceHandler
 from neo.master.app import Application
 from neo.exception import OperationFailure
 
@@ -40,6 +41,7 @@ class MasterStorageHandlerTests(NeoTestBase):
         for address in self.app.master_node_list:
             self.app.nm.createMaster(address=address)
         self.service = StorageServiceHandler(self.app)
+        self.client_handler = ClientServiceHandler(self.app)
         # define some variable to simulate client and storage node
         self.client_port = 11022
         self.storage_port = 10021
@@ -139,27 +141,21 @@ class MasterStorageHandlerTests(NeoTestBase):
 
     def test_10_notifyInformationLocked(self):
         service = self.service
-        uuid = self.identifyToMasterNode(port=10020)
+        node, conn = self.identifyToMasterNode(port=10020)
         packet = Packets.NotifyInformationLocked()
+        packet.setId(0)
         # give an older tid than the PMN known, must abort
-        conn = self.getFakeConnection(uuid, self.storage_address)
         oid_list = []
-        upper, lower = unpack('!LL', self.app.ltid)
-        new_tid = pack('!LL', upper, lower + 10)
+        self.app.ltid = pack('!LL', 0, 1)
+        new_tid = pack('!LL', 0, 10)
         self.checkUnexpectedPacketRaised(service.notifyInformationLocked, conn, packet, new_tid)
-        old_node = self.app.nm.getByUUID(uuid)
         # job done through dispatch -> peerBroken
-        self.app.nm.remove(old_node)
-        self.app.pt.dropNode(old_node)
+        self.app.nm.remove(node)
+        self.app.pt.dropNode(node)
 
         # do the right job
-        client_uuid = self.identifyToMasterNode(node_type=NodeTypes.CLIENT, port=self.client_port)
-        storage_uuid_1 = self.identifyToMasterNode()
-        storage_uuid_2 = self.identifyToMasterNode(port=10022)
-        storage_conn_1 = self.getFakeConnection(storage_uuid_1, ("127.0.0.1", self.storage_port))
-        storage_conn_2 = self.getFakeConnection(storage_uuid_2, ("127.0.0.1", 10022))
-        conn = self.getFakeConnection(client_uuid, self.client_address)
-        service.askBeginTransaction(conn, packet)
+        node, conn = self.identifyToMasterNode(node_type=NodeTypes.CLIENT, port=self.client_port)
+        self.client_handler.askBeginTransaction(conn, packet, None)
         # clean mock object
         conn.mockCalledMethods = {}
         conn.mockAllCalledMethods = []
@@ -200,42 +196,42 @@ class MasterStorageHandlerTests(NeoTestBase):
 
     def test_13_askUnfinishedTransactions(self):
         service = self.service
-        uuid = self.identifyToMasterNode()
+        node, conn = self.identifyToMasterNode()
         packet = Packets.AskUnfinishedTransactions()
         packet.setId(0)
         # give a uuid
-        conn = self.getFakeConnection(uuid, self.storage_address)
         service.askUnfinishedTransactions(conn, packet)
         packet = self.checkAnswerUnfinishedTransactions(conn, answered_packet=packet)
-        tid_list = packet.decode()
-        self.assertEqual(len(tid_list), 0)
+        packet.setId(0)
+        tid_list, = packet.decode()
+        self.assertEqual(tid_list, [])
         # create some transaction
         client_uuid = self.identifyToMasterNode(node_type=NodeTypes.CLIENT,
                                                 port=self.client_port)
         conn = self.getFakeConnection(client_uuid, self.client_address)
-        service.askBeginTransaction(conn, packet)
-        service.askBeginTransaction(conn, packet)
-        service.askBeginTransaction(conn, packet)
-        conn = self.getFakeConnection(uuid, self.storage_address)
+        self.client_handler.askBeginTransaction(conn, packet, None)
+        self.client_handler.askBeginTransaction(conn, packet, None)
+        self.client_handler.askBeginTransaction(conn, packet, None)
+        conn = self.getFakeConnection(node.getUUID(), self.storage_address)
         service.askUnfinishedTransactions(conn, packet)
         packet = self.checkAnswerUnfinishedTransactions(conn, answered_packet=packet)
-        tid_list = protocol._decodeAnswerUnfinishedTransactions(packet._body)[0]
+        (tid_list, ) = packet.decode()
         self.assertEqual(len(tid_list), 3)
 
 
     def test_14_notifyPartitionChanges(self):
         service = self.service
-        uuid = self.identifyToMasterNode()
+        node, conn = self.identifyToMasterNode()
+        uuid = node.getUUID()
         packet = Packets.NotifyPartitionChanges()
         # do not answer if not a storage node
-        client_uuid = self.identifyToMasterNode(node_type=NodeTypes.CLIENT,
+        client, client_conn = self.identifyToMasterNode(node_type=NodeTypes.CLIENT,
                                                 port=self.client_port)
-        conn = self.getFakeConnection(client_uuid, self.client_address)
+        client_uuid = client.getUUID()
         self.checkUnexpectedPacketRaised(service.notifyPartitionChanges,
                 conn, packet, None, None)
 
         # send a bad state, must not be take into account
-        conn = self.getFakeConnection(uuid, self.storage_address)
         storage_uuid = self.identifyToMasterNode(port=self.storage_port+1)
         offset = 1
         cell_list = [(offset, uuid, CellStates.FEEDING),]
-- 
2.30.9