Skip to content

Commit a1ed6bb

Browse files
committed
improved logformats_test and added test_file_like_explicit_stop
1 parent 1bc7484 commit a1ed6bb

1 file changed

Lines changed: 58 additions & 20 deletions

File tree

test/logformats_test.py

Lines changed: 58 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import unittest
1919
import tempfile
20+
import os
2021
import sqlite3
2122
import os
2223
from abc import abstractmethod, ABCMeta
@@ -97,58 +98,101 @@ def _setup_instance_helper(self,
9798
self.test_append_enabled = test_append
9899
self.round_timestamps = round_timestamps
99100

101+
def setUp(self):
102+
with tempfile.NamedTemporaryFile('w+', delete=False) as test_file:
103+
self.test_file_name = test_file.name
104+
105+
def tearDown(self):
106+
os.remove(self.test_file_name)
107+
del self.test_file_name
108+
100109
def test_path_like_explicit_stop(self):
101110
"""testing with path-like and explicit stop() call"""
102-
filename = self._get_temp_filename()
103111

104112
# create writer
105113
print("writing all messages/comments")
106-
writer = self.writer_constructor(filename)
114+
writer = self.writer_constructor(self.test_file_name)
107115
self._write_all(writer)
108116
if hasattr(writer.file, 'fileno'):
109117
os.fsync(writer.file.fileno())
110118
writer.stop()
119+
if hasattr(writer.file, 'closed'):
120+
self.assertTrue(writer.file.closed)
111121

112122
print("reading all messages")
113-
reader = self.reader_constructor(filename)
123+
reader = self.reader_constructor(self.test_file_name)
114124
read_messages = list(reader)
115125
# redundant, but this checks if stop() can be called multiple times
116126
reader.stop()
127+
if hasattr(writer.file, 'closed'):
128+
self.assertTrue(writer.file.closed)
117129

118130
# check if at least the number of messages matches
119131
# could use assertCountEqual in later versions of Python and in the other methods
120132
self.assertEqual(len(read_messages), len(self.original_messages),
121133
"the number of written messages does not match the number of read messages")
122134

123135
self.assertMessagesEqual(read_messages)
124-
self.assertIncludesComments(filename)
136+
self.assertIncludesComments(self.test_file_name)
125137

126138
def test_path_like_context_manager(self):
127139
"""testing with path-like object and context manager"""
128-
filename = self._get_temp_filename()
129140

130141
# create writer
131142
print("writing all messages/comments")
132-
with self.writer_constructor(filename) as writer:
143+
with self.writer_constructor(self.test_file_name) as writer:
133144
self._write_all(writer)
134145
if hasattr(writer.file, 'fileno'):
135146
os.fsync(writer.file.fileno())
147+
w = writer
148+
if hasattr(w.file, 'closed'):
149+
self.assertTrue(w.file.closed)
136150

137151
# read all written messages
138152
print("reading all messages")
139-
with self.reader_constructor(filename) as reader:
153+
with self.reader_constructor(self.test_file_name) as reader:
140154
read_messages = list(reader)
155+
r = reader
156+
if hasattr(r.file, 'closed'):
157+
self.assertTrue(r.file.closed)
141158

142159
# check if at least the number of messages matches;
143160
self.assertEqual(len(read_messages), len(self.original_messages),
144161
"the number of written messages does not match the number of read messages")
145162

146163
self.assertMessagesEqual(read_messages)
147-
self.assertIncludesComments(filename)
164+
self.assertIncludesComments(self.test_file_name)
148165

149166
def test_file_like_explicit_stop(self):
150167
"""testing with file-like object and explicit stop() call"""
151-
raise unittest.SkipTest("not yet implemented")
168+
169+
# create writer
170+
print("writing all messages/comments")
171+
my_file = open(self.test_file_name, 'w')
172+
writer = self.writer_constructor(my_file)
173+
self._write_all(writer)
174+
if hasattr(writer.file, 'fileno'):
175+
os.fsync(writer.file.fileno())
176+
writer.stop()
177+
if hasattr(my_file, 'closed'):
178+
self.assertTrue(my_file.closed)
179+
180+
print("reading all messages")
181+
my_file = open(self.test_file_name, 'r')
182+
reader = self.reader_constructor(my_file)
183+
read_messages = list(reader)
184+
# redundant, but this checks if stop() can be called multiple times
185+
reader.stop()
186+
if hasattr(my_file, 'closed'):
187+
self.assertTrue(my_file.closed)
188+
189+
# check if at least the number of messages matches
190+
# could use assertCountEqual in later versions of Python and in the other methods
191+
self.assertEqual(len(read_messages), len(self.original_messages),
192+
"the number of written messages does not match the number of read messages")
193+
194+
self.assertMessagesEqual(read_messages)
195+
self.assertIncludesComments(self.test_file_name)
152196

153197
def test_file_like_context_manager(self):
154198
"""testing with file-like object and context manager"""
@@ -161,25 +205,24 @@ def test_append_mode(self):
161205
if not self.test_append_enabled:
162206
raise unittest.SkipTest("do not test append mode")
163207

164-
filename = self._get_temp_filename()
165208
count = len(self.original_messages)
166209
first_part = self.original_messages[:count // 2]
167210
second_part = self.original_messages[count // 2:]
168211

169212
# write first half
170-
with self.writer_constructor(filename) as writer:
213+
with self.writer_constructor(self.test_file_name) as writer:
171214
for message in first_part:
172215
writer(message)
173216
if hasattr(writer.file, 'fileno'):
174217
os.fsync(writer.file.fileno())
175218

176219
# use append mode for second half
177220
try:
178-
writer = self.writer_constructor(filename, append=True)
221+
writer = self.writer_constructor(self.test_file_name, append=True)
179222
except TypeError as e:
180223
# maybe "append" is not a formal parameter
181224
try:
182-
writer = self.writer_constructor(filename)
225+
writer = self.writer_constructor(self.test_file_name)
183226
except TypeError:
184227
# is the is still a problem, raise the initial error
185228
raise e
@@ -188,16 +231,11 @@ def test_append_mode(self):
188231
writer(message)
189232
if hasattr(writer.file, 'fileno'):
190233
os.fsync(writer.file.fileno())
191-
with self.reader_constructor(filename) as reader:
234+
with self.reader_constructor(self.test_file_name) as reader:
192235
read_messages = list(reader)
193236

194237
self.assertMessagesEqual(read_messages)
195238

196-
@staticmethod
197-
def _get_temp_filename():
198-
with tempfile.NamedTemporaryFile('w+', delete=False) as temp:
199-
return temp.name
200-
201239
def _write_all(self, writer):
202240
"""Writes messages and insert comments here and there."""
203241
# Note: we make no assumptions about the length of original_messages and original_comments
@@ -237,7 +275,7 @@ def assertIncludesComments(self, filename):
237275
"""
238276
if self.original_comments:
239277
# read the entire outout file
240-
with open(filename, 'rt') as file:
278+
with open(filename, 'r') as file:
241279
output_contents = file.read()
242280
# check each, if they can be found in there literally
243281
for comment in self.original_comments:

0 commit comments

Comments
 (0)