-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_server.py
More file actions
46 lines (35 loc) · 1.88 KB
/
test_server.py
File metadata and controls
46 lines (35 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import unittest
from unittest.mock import MagicMock, patch
from server import Server
class TestGuessingGameServer(unittest.TestCase):
@patch("guessing_game_server.socket")
def test_game_flow_correct_guess(self, mock_socket_module):
#mock socket and connection
mock_server_socket = MagicMock()
mock_conn = MagicMock()
#simulate correct guess directly
mock_conn.recv.side_effect = [b'50', b''] #one guess=disconnect
mock_socket_module.socket.return_value = mock_server_socket
mock_server_socket.accept.return_value = (mock_conn, ("127.0.0.1", 12345))
#use fixed secret number for predictability
server = Server(secret_number=50, socket_module=mock_socket_module)
#run once only (simulate a single connection), then break loop
with patch.object(server, 'server_socket', mock_server_socket):
with patch("builtins.print"): # suppress output
server.start()
#assert expected behavior
mock_conn.sendall.assert_called_with(b'Correct! You win!: 1 guesses = very good')
@patch("guessing_game_server.socket")
def test_invalid_input(self, mock_socket_module):
mock_server_socket = MagicMock()
mock_conn = MagicMock()
mock_conn.recv.side_effect = [b'hello', b''] #invalid input= disconnect
mock_socket_module.socket.return_value = mock_server_socket
mock_server_socket.accept.return_value = (mock_conn, ("127.0.0.1", 12345))
server = Server(secret_number=42, socket_module=mock_socket_module)
with patch.object(server, 'server_socket', mock_server_socket):
with patch("builtins.print"):
server.start()
mock_conn.sendall.assert_called_with(b'Invalid input! Please enter a number.')
if __name__ == "__main__":
unittest.main()