class PySAPNIStreamSocketTest(unittest.TestCase): test_port = 8005 test_address = "127.0.0.1" test_string = "TEST" * 10 def start_server(self, handler_cls): self.server = ThreadingTCPServer((self.test_address, self.test_port), handler_cls, bind_and_activate=False) self.server.allow_reuse_address = True self.server.server_bind() self.server.server_activate() self.server_thread = Thread(target=self.server.serve_forever) self.server_thread.start() def stop_server(self): self.server.shutdown() self.server.server_close() self.server_thread.join() def test_sapnistreamsocket(self): """Test SAPNIStreamSocket""" self.start_server(SAPNITestHandler) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock) packet = self.client.sr(self.test_string) packet.decode_payload_as(Raw) self.client.close() self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) self.stop_server() def test_sapnistreamsocket_base_cls(self): """Test SAPNIStreamSocket handling of custom base packet classes""" self.start_server(SAPNITestHandler) class SomeClass(Packet): fields_desc = [StrField("text", None)] sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, base_cls=SomeClass) packet = self.client.sr(self.test_string) self.client.close() self.assertIn(SAPNI, packet) self.assertIn(SomeClass, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet[SomeClass].text, self.test_string) self.stop_server() def test_sapnistreamsocket_getnisocket(self): """Test SAPNIStreamSocket get nisocket class method""" self.start_server(SAPNITestHandler) self.client = SAPNIStreamSocket.get_nisocket(self.test_address, self.test_port) packet = self.client.sr(self.test_string) packet.decode_payload_as(Raw) self.client.close() self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) self.stop_server() def test_sapnistreamsocket_without_keep_alive(self): """Test SAPNIStreamSocket without keep alive""" self.start_server(SAPNITestHandlerKeepAlive) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, keep_alive=False) packet = self.client.sr(self.test_string) packet.decode_payload_as(Raw) self.client.close() # We should receive a PING instead of our packet self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(SAPNI.SAPNI_PING)) self.assertEqual(packet.payload.load, SAPNI.SAPNI_PING) self.stop_server() def test_sapnistreamsocket_with_keep_alive(self): """Test SAPNIStreamSocket with keep alive""" self.start_server(SAPNITestHandlerKeepAlive) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, keep_alive=True) packet = self.client.sr(self.test_string) packet.decode_payload_as(Raw) self.client.close() # We should receive our packet, the PING should be handled by the # stream socket self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) self.stop_server() def test_sapnistreamsocket_close(self): """Test SAPNIStreamSocket with a server that closes the connection""" self.start_server(SAPNITestHandlerClose) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, keep_alive=False) with self.assertRaises(socket.error): self.client.sr(self.test_string) self.stop_server()
class PySAPNIStreamSocketTest(PySAPBaseServerTest): test_port = 8005 test_address = "127.0.0.1" test_string = "TEST" * 10 def test_sapnistreamsocket(self): """Test SAPNIStreamSocket""" self.start_server(self.test_address, self.test_port, SAPNITestHandler) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock) packet = self.client.sr(Raw(self.test_string)) packet.decode_payload_as(Raw) self.client.close() self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) self.stop_server() def test_sapnistreamsocket_base_cls(self): """Test SAPNIStreamSocket handling of custom base packet classes""" self.start_server(self.test_address, self.test_port, SAPNITestHandler) class SomeClass(Packet): fields_desc = [StrField("text", None)] sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, base_cls=SomeClass) packet = self.client.sr(Raw(self.test_string)) self.client.close() self.assertIn(SAPNI, packet) self.assertIn(SomeClass, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet[SomeClass].text, self.test_string) self.stop_server() def test_sapnistreamsocket_getnisocket(self): """Test SAPNIStreamSocket get nisocket class method""" self.start_server(self.test_address, self.test_port, SAPNITestHandler) self.client = SAPNIStreamSocket.get_nisocket(self.test_address, self.test_port) packet = self.client.sr(Raw(self.test_string)) packet.decode_payload_as(Raw) self.client.close() self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) self.stop_server() def test_sapnistreamsocket_without_keep_alive(self): """Test SAPNIStreamSocket without keep alive""" self.start_server(self.test_address, self.test_port, SAPNITestHandlerKeepAlive) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, keep_alive=False) packet = self.client.sr(Raw(self.test_string)) packet.decode_payload_as(Raw) # We should receive our packet first self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) # Then we should get a we should receive a PING packet = self.client.recv() self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(SAPNI.SAPNI_PING)) self.assertEqual(packet.payload.load, SAPNI.SAPNI_PING) self.client.close() self.stop_server() def test_sapnistreamsocket_with_keep_alive(self): """Test SAPNIStreamSocket with keep alive""" self.start_server(self.test_address, self.test_port, SAPNITestHandlerKeepAlive) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, keep_alive=True) self.client.send(Raw(self.test_string)) packet = self.client.recv() packet.decode_payload_as(Raw) # We should receive our packet first self.assertIn(SAPNI, packet) self.assertEqual(packet[SAPNI].length, len(self.test_string)) self.assertEqual(packet.payload.load, self.test_string) # Then we should get a connection reset if we try to receive from the server self.assertRaises(socket.error, self.client.recv) self.client.close() self.stop_server() def test_sapnistreamsocket_close(self): """Test SAPNIStreamSocket with a server that closes the connection""" self.start_server(self.test_address, self.test_port, SAPNITestHandlerClose) sock = socket.socket() sock.connect((self.test_address, self.test_port)) self.client = SAPNIStreamSocket(sock, keep_alive=False) with self.assertRaises(socket.error): self.client.sr(Raw(self.test_string)) self.stop_server()