class MockGDBServerResponder:
"""
- A base class for handing client packets and issuing server responses for
+ A base class for handling client packets and issuing server responses for
GDB tests.
This handles many typical situations, while still allowing subclasses to
data = self._client.recv(4096)
if data is None or len(data) == 0:
break
+ # In Python 2, sockets return byte strings. In Python 3, sockets return bytes.
+ # If we got bytes (and not a byte string), decode them to a string for later handling.
+ if isinstance(data, bytes) and not isinstance(data, str):
+ data = data.decode()
+ self._receive(data)
except Exception as e:
self._client.close()
break
- self._receive(data)
def _receive(self, data):
"""
i += 1
else:
raise self.InvalidPacketException(
- "Unexexpected leading byte: %s" % data[0])
+ "Unexpected leading byte: %s" % data[0])
# If we're looking beyond the start of the received data, then we're
# looking for the end of the packet content, denoted by a #.
return
response = ""
# We'll handle the ack stuff here since it's not something any of the
- # tests will be concerned about, and it'll get turned off quicly anyway.
+ # tests will be concerned about, and it'll get turned off quickly anyway.
if self._shouldSendAck:
- self._client.sendall('+')
+ self._client.sendall('+'.encode())
if packet == "QStartNoAckMode":
self._shouldSendAck = False
response = "OK"
# Handle packet framing since we don't want to bother tests with it.
if response is not None:
framed = frame_packet(response)
+ # In Python 2, sockets send byte strings. In Python 3, sockets send bytes.
+ # If we got a string (and not a byte string), encode it before sending.
+ if isinstance(framed, str) and not isinstance(framed, bytes):
+ framed = framed.encode()
self._client.sendall(framed)
PACKET_ACK = object()
i = 0
j = 0
log = self.server.responder.packetLog
+
while i < len(packets) and j < len(log):
if log[j] == packets[i]:
i += 1
EXPECT_EQ(1, sscanf(Msg.str().c_str(), "%d Hello World", &seq_no));
}
- EXPECT_TRUE(EnableChannel(getStream(), LLDB_LOG_OPTION_PREPEND_FILE_FUNCTION,
- "chan", {}, Err));
- EXPECT_EQ(
- "LogTest.cpp:logAndTakeOutput Hello "
- "World\n",
- logAndTakeOutput("Hello World"));
+ {
+ EXPECT_TRUE(EnableChannel(getStream(), LLDB_LOG_OPTION_PREPEND_FILE_FUNCTION,
+ "chan", {}, Err));
+ llvm::StringRef Msg = logAndTakeOutput("Hello World");
+ char File[12];
+ char Function[17];
+
+ sscanf(Msg.str().c_str(), "%[^:]:%s Hello World", File, Function);
+ EXPECT_STRCASEEQ("LogTest.cpp", File);
+ EXPECT_STREQ("logAndTakeOutput", Function);
+ }
EXPECT_TRUE(EnableChannel(
getStream(), LLDB_LOG_OPTION_PREPEND_PROC_AND_THREAD, "chan", {}, Err));