Skip to content
This repository was archived by the owner on Sep 7, 2023. It is now read-only.

Commit 6544e13

Browse files
committed
Generate valid json if multiple log entries are generated on same line
1 parent f679181 commit 6544e13

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

tests/test_json_generator.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,24 @@ def single_log_file():
5555
return file
5656

5757

58+
@pytest.fixture
59+
def log_on_same_line():
60+
"""Create a log file with multiple entries on same line."""
61+
file = tempfile.NamedTemporaryFile(mode="w")
62+
file.write('{"message": 1}{"message": 2}{"message": 3}')
63+
file.seek(0)
64+
return file
65+
66+
67+
@pytest.fixture
68+
def log_comma_separation_same_line():
69+
"""Create a log file with multiple entries on same line, comma separated."""
70+
file = tempfile.NamedTemporaryFile(mode="w")
71+
file.write('{"message": 1},{"message": 2},{"message": 3}')
72+
file.seek(0)
73+
return file
74+
75+
5876
@pytest.fixture
5977
def empty_log_file():
6078
"""Create a log file without any entries."""
@@ -110,3 +128,41 @@ def test_single_logfile(single_log_file):
110128
else:
111129
assert len(json_log["logs"]) == 1
112130
assert json_log["logs"][0]["from"] == "test0@localhost.org"
131+
132+
133+
def test_logfile_log_entries_on_same_line(log_on_same_line):
134+
"""Test with single log."""
135+
output = ""
136+
with open(log_on_same_line.name) as file:
137+
for line in wrap_json_output(file):
138+
output += line
139+
140+
try:
141+
json_log = json.loads(output)
142+
except ValueError:
143+
assert False, "Invalid json generated."
144+
else:
145+
assert len(json_log["logs"]) == 3
146+
assert json_log["logs"][0]["message"] == 1
147+
assert json_log["logs"][1]["message"] == 2
148+
assert json_log["logs"][2]["message"] == 3
149+
150+
151+
def test_logfile_log_entries_on_same_line_with_comma_separation(
152+
log_comma_separation_same_line
153+
):
154+
"""Test with single log."""
155+
output = ""
156+
with open(log_comma_separation_same_line.name) as file:
157+
for line in wrap_json_output(file):
158+
output += line
159+
160+
try:
161+
json_log = json.loads(output)
162+
except ValueError:
163+
assert False, "Invalid json generated."
164+
else:
165+
assert len(json_log["logs"]) == 3
166+
assert json_log["logs"][0]["message"] == 1
167+
assert json_log["logs"][1]["message"] == 2
168+
assert json_log["logs"][2]["message"] == 3

zippy/utils/json_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ def wrap_json_output(input_file):
77
json_ending = "]}"
88

99
yield json_starting
10-
yield ",".join(input_file.readlines())
10+
yield ",".join(input_file.readlines()).replace("}{", "},{")
1111
yield json_ending

0 commit comments

Comments
 (0)