-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_new_client_code.py
More file actions
135 lines (106 loc) · 4.33 KB
/
test_new_client_code.py
File metadata and controls
135 lines (106 loc) · 4.33 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import pytest
import socket
import ssl
import json
from unittest.mock import patch, MagicMock
from client import (
create_socket,
connect_to_server,
send_request,
close_connection,
USE_SSL,
SERVER_IP,
SERVER_PORT
)
from lib.socket_exception import SocketCommunicationError
# Mock environment variables for SSL certificates
SSL_CERTFILE = "path/to/certfile"
SSL_KEYFILE = "path/to/keyfile"
@patch("client.ssl.create_default_context")
@patch("client.socket.socket")
def test_create_socket_non_ssl(mock_socket, mock_ssl_context):
# Test non-SSL socket creation
with patch("client.USE_SSL", False):
sock = create_socket()
assert mock_socket.called
assert not mock_ssl_context.called
@patch("client.ssl.create_default_context")
@patch("client.socket.socket")
def test_create_socket_ssl(mock_socket, mock_ssl_context):
# Test SSL socket creation
with patch("client.USE_SSL", True):
mock_ssl_context_instance = mock_ssl_context.return_value
mock_ssl_context_instance.wrap_socket.return_value = (
mock_socket.return_value
)
sock = create_socket()
assert mock_socket.called
assert mock_ssl_context.called
assert mock_ssl_context_instance.wrap_socket.called
@patch("client.create_socket")
@patch("client.time.sleep", return_value=None) # Prevent delay during test
def test_connect_to_server_success(mock_sleep, mock_create_socket):
# Mock a successful connection
mock_socket_instance = MagicMock()
mock_create_socket.return_value = mock_socket_instance
sock = connect_to_server()
assert mock_create_socket.called
assert mock_socket_instance.connect.called
assert sock == mock_socket_instance
@patch("client.create_socket")
@patch("client.time.sleep", return_value=None) # Prevent delay during test
def test_connect_to_server_failure(mock_sleep, mock_create_socket):
# Mock a connection failure (ConnectionRefusedError)
mock_socket_instance = MagicMock()
mock_socket_instance.connect.side_effect = ConnectionRefusedError
mock_create_socket.return_value = mock_socket_instance
sock = connect_to_server()
assert mock_create_socket.called
assert sock is None
@patch("client.socket.socket")
@patch("client.ssl.create_default_context")
def test_send_request_success(mock_ssl_context, mock_socket):
# Mock the SSL context wrapping (if needed)
mock_ssl_context_instance = mock_ssl_context.return_value
mock_ssl_context_instance.wrap_socket.return_value = (
mock_socket.return_value
)
# Mock the socket instance and its methods
mock_socket_instance = MagicMock()
mock_socket.return_value.__enter__.return_value = mock_socket_instance
mock_socket_instance.recv.return_value = "success".encode('utf-8')
# Prepare the request data as a dictionary
data = json.dumps({"query_string": "23;0;1;26;0;8;3;0;", "algorithm": ""})
# Call the send_request function with SSL disabled
with patch("client.USE_SSL", False):
response = send_request(data)
# Assertions
assert mock_socket.called
assert mock_socket_instance.connect.called
assert mock_socket_instance.sendall.called
assert response == "success"
@patch("client.socket.socket")
@patch("client.ssl.create_default_context")
def test_send_request_failure(mock_ssl_context, mock_socket):
# Mock a request failure (ConnectionRefusedError)
mock_socket_instance = mock_socket.return_value
mock_socket_instance.connect.side_effect = ConnectionRefusedError
data = {"query_string": "23;0;1;26;0;8;3;0;", "algorithm": ""}
with patch("client.USE_SSL", False):
with pytest.raises(SocketCommunicationError):
send_request(data)
@patch("client.socket.socket")
def test_close_connection_success(mock_socket):
# Mock successful socket closing
mock_socket_instance = mock_socket.return_value
close_connection(mock_socket_instance)
mock_socket_instance.close.assert_called_once()
@patch("client.socket.socket")
def test_close_connection_failure(mock_socket):
# Mock a failure when closing the socket
mock_socket_instance = mock_socket.return_value
mock_socket_instance.close.side_effect = Exception("Close error")
close_connection(mock_socket_instance)
mock_socket_instance.close.assert_called_once()
if __name__ == "__main__":
pytest.main()