Skip to content

Commit 074bb04

Browse files
committed
LogManager tests
1 parent 0d19d4e commit 074bb04

File tree

2 files changed

+90
-4
lines changed

2 files changed

+90
-4
lines changed

reportportal_client/helpers.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ from requests import Response
99

1010
logger: Logger
1111

12+
TYPICAL_FILE_PART_HEADER: Text
1213
TYPICAL_MULTIPART_FOOTER_LENGTH: int
1314

1415
def generate_uuid() -> Text: ...

tests/logs/test_log_manager.py

Lines changed: 89 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,24 @@
1111
# See the License for the specific language governing permissions and
1212
# limitations under the License
1313

14+
import os
1415

1516
from six.moves import mock
1617

1718
from reportportal_client import helpers
18-
from reportportal_client.core.log_manager import LogManager
19+
from reportportal_client.core.log_manager import LogManager, \
20+
MAX_LOG_BATCH_PAYLOAD_SIZE
1921

2022
RP_URL = 'http://docker.local:8080'
2123
API_VERSION = 'api/v2'
2224
TEST_LAUNCH_ID = 'test_launch_id'
2325
TEST_ITEM_ID = 'test_item_id'
2426
PROJECT_NAME = 'test_project'
25-
KILOBYTE = 2 ** 10
26-
MEGABYTE = KILOBYTE ** KILOBYTE
27-
ABOVE_LIMIT_SIZE = MEGABYTE * 65
2827
TEST_MASSAGE = 'test_message'
2928
TEST_LEVEL = 'DEBUG'
3029
TEST_BATCH_SIZE = 5
30+
TEST_ATTACHMENT_NAME = 'test_file.bin'
31+
TEST_ATTACHMENT_TYPE = 'application/zip'
3132

3233

3334
# noinspection PyUnresolvedReferences
@@ -89,3 +90,87 @@ def test_log_batch_send_by_stop():
8990
assert 'post' in session._mock_children
9091
assert len(log_manager._batch) == 0
9192
assert log_manager._payload_size == helpers.TYPICAL_MULTIPART_FOOTER_LENGTH
93+
94+
95+
# noinspection PyUnresolvedReferences
96+
def test_log_batch_not_send_by_size():
97+
session = mock.Mock()
98+
log_manager = LogManager(RP_URL, session, API_VERSION, TEST_LAUNCH_ID,
99+
PROJECT_NAME, max_entry_number=TEST_BATCH_SIZE,
100+
verify_ssl=False)
101+
log_manager._worker = mock.Mock()
102+
103+
headers_size = helpers.TYPICAL_MULTIPART_FOOTER_LENGTH - len(
104+
helpers.TYPICAL_FILE_PART_HEADER.format(TEST_ATTACHMENT_NAME,
105+
TEST_ATTACHMENT_TYPE))
106+
attachment_size = MAX_LOG_BATCH_PAYLOAD_SIZE - headers_size - 1024
107+
random_byte_array = bytearray(os.urandom(attachment_size))
108+
attachment = {'name': TEST_ATTACHMENT_NAME, 'content': random_byte_array,
109+
'content_type': TEST_ATTACHMENT_TYPE}
110+
111+
log_manager.log(helpers.timestamp(), TEST_MASSAGE, TEST_LEVEL,
112+
item_id=TEST_ITEM_ID, attachment=attachment)
113+
log_manager.log(helpers.timestamp(), TEST_MASSAGE, TEST_LEVEL,
114+
item_id=TEST_ITEM_ID)
115+
116+
assert log_manager._worker.send.call_count == 0
117+
assert 'post' not in session._mock_children
118+
assert len(log_manager._batch) == 2
119+
assert log_manager._payload_size > MAX_LOG_BATCH_PAYLOAD_SIZE - 1024
120+
assert log_manager._payload_size < MAX_LOG_BATCH_PAYLOAD_SIZE
121+
122+
123+
# noinspection PyUnresolvedReferences
124+
def test_log_batch_send_by_size():
125+
session = mock.Mock()
126+
log_manager = LogManager(RP_URL, session, API_VERSION, TEST_LAUNCH_ID,
127+
PROJECT_NAME, max_entry_number=TEST_BATCH_SIZE,
128+
verify_ssl=False)
129+
log_manager._worker = mock.Mock()
130+
131+
random_byte_array = bytearray(os.urandom(MAX_LOG_BATCH_PAYLOAD_SIZE))
132+
attachment = {'name': TEST_ATTACHMENT_NAME, 'content': random_byte_array,
133+
'content_type': TEST_ATTACHMENT_TYPE}
134+
135+
log_manager.log(helpers.timestamp(), TEST_MASSAGE, TEST_LEVEL,
136+
item_id=TEST_ITEM_ID, attachment=attachment)
137+
log_manager.log(helpers.timestamp(), TEST_MASSAGE, TEST_LEVEL,
138+
item_id=TEST_ITEM_ID)
139+
140+
assert log_manager._worker.send.call_count == 1
141+
batch = log_manager._worker.send.call_args[0][0]
142+
assert len(batch.log_reqs) == 1
143+
assert batch.http_request is not None
144+
assert 'post' in session._mock_children
145+
assert len(log_manager._batch) == 1
146+
assert log_manager._payload_size < \
147+
helpers.TYPICAL_MULTIPART_FOOTER_LENGTH + 1024
148+
149+
150+
# noinspection PyUnresolvedReferences
151+
def test_log_batch_triggers_previous_request_to_send():
152+
session = mock.Mock()
153+
log_manager = LogManager(RP_URL, session, API_VERSION, TEST_LAUNCH_ID,
154+
PROJECT_NAME, max_entry_number=TEST_BATCH_SIZE,
155+
verify_ssl=False)
156+
log_manager._worker = mock.Mock()
157+
158+
random_byte_array = bytearray(os.urandom(MAX_LOG_BATCH_PAYLOAD_SIZE))
159+
attachment = {'name': TEST_ATTACHMENT_NAME, 'content': random_byte_array,
160+
'content_type': TEST_ATTACHMENT_TYPE}
161+
162+
log_manager.log(helpers.timestamp(), TEST_MASSAGE, TEST_LEVEL,
163+
item_id=TEST_ITEM_ID)
164+
payload_size = log_manager._payload_size
165+
assert payload_size < helpers.TYPICAL_MULTIPART_FOOTER_LENGTH + 1024
166+
167+
log_manager.log(helpers.timestamp(), TEST_MASSAGE, TEST_LEVEL,
168+
item_id=TEST_ITEM_ID, attachment=attachment)
169+
170+
assert log_manager._worker.send.call_count == 1
171+
batch = log_manager._worker.send.call_args[0][0]
172+
assert len(batch.log_reqs) == 1
173+
assert batch.http_request is not None
174+
assert 'post' in session._mock_children
175+
assert len(log_manager._batch) == 1
176+
assert log_manager._payload_size > MAX_LOG_BATCH_PAYLOAD_SIZE

0 commit comments

Comments
 (0)