2 Test suite for storage. Uses unittest module.
4 2011, Razvan Deaconescu, razvan.deaconescu@cs.pub.ro.
17 def create_non_numeric_subfolders(path):
18 os.mkdir(os.path.join(path, "ana"))
19 os.mkdir(os.path.join(path, "are"))
20 os.mkdir(os.path.join(path, "mere"))
21 os.mkdir(os.path.join(path, "si"))
22 os.mkdir(os.path.join(path, "pere"))
24 def create_numeric_subfolders_sequential(path):
25 os.mkdir(os.path.join(path, "1"))
26 os.mkdir(os.path.join(path, "2"))
27 os.mkdir(os.path.join(path, "3"))
28 os.mkdir(os.path.join(path, "4"))
29 os.mkdir(os.path.join(path, "5"))
31 def create_numeric_subfolders_non_sequential(path):
32 os.mkdir(os.path.join(path, "32"))
33 os.mkdir(os.path.join(path, "5"))
34 os.mkdir(os.path.join(path, "423"))
35 os.mkdir(os.path.join(path, "1401"))
36 os.mkdir(os.path.join(path, "92"))
38 def create_numeric_files(path):
39 f = open(os.path.join(path, "33"), 'w')
41 f = open(os.path.join(path, "6"), 'w')
43 f = open(os.path.join(path, "424"), 'w')
45 f = open(os.path.join(path, "1402"), 'w')
47 f = open(os.path.join(path, "93"), 'w')
50 class StorageTest(unittest.TestCase):
52 Test suite for stand alone functions in storage.py.
55 # Class specific variables. Initialized in setUp, used throughout tests.
56 path = "/tmp/ttfa-test"
63 """Remove base folder."""
64 shutil.rmtree(self.path)
66 def test_find_last_numeric_subfolder_no_subfolders(self):
67 """Test return of None when no subfolders are present."""
68 id = storage.find_last_numeric_subfolder(self.path)
69 self.assertEqual(id, None)
71 def test_find_last_numeric_subfolder_no_numeric_subfolders(self):
72 """Test return of None when no numeric subfolders are present."""
73 create_non_numeric_subfolders(self.path)
75 id = storage.find_last_numeric_subfolder(self.path)
76 self.assertEqual(id, None)
78 def test_find_last_numeric_subfolder_only_numeric_subfolders_sequential(self):
80 Test return of correct id when sequential numeric named
81 subfolders only are present (1, 2, 3, ...).
83 create_numeric_subfolders_sequential(self.path)
85 id = storage.find_last_numeric_subfolder(self.path)
86 self.assertEqual(id, 5)
88 def test_find_last_numeric_subfolder_only_numeric_subfolders_nonsequential(self):
90 Test return of correct id when nonsequential numeric named
91 subfolders only are present (32, 5, 423, ...).
93 create_numeric_subfolders_non_sequential(self.path)
95 id = storage.find_last_numeric_subfolder(self.path)
96 self.assertEqual(id, 1401)
98 def test_find_last_numeric_subfolder_mixed_subfolders_sequential(self):
100 Test return of None when mixed named subfolders (numeric and
101 others) are present. Numeric folders are sequential.
103 create_non_numeric_subfolders(self.path)
104 create_numeric_subfolders_sequential(self.path)
106 id = storage.find_last_numeric_subfolder(self.path)
107 self.assertEqual(id, 5)
109 def test_find_last_numeric_subfolder_mixed_subfolders_nonsequential(self):
111 Test return of None when mixed named subfolders (numeric and
112 others) are present. Numeric folders are non-sequential.
114 create_non_numeric_subfolders(self.path)
115 create_numeric_subfolders_non_sequential(self.path)
117 id = storage.find_last_numeric_subfolder(self.path)
118 self.assertEqual(id, 1401)
120 def test_find_last_numeric_subfolder_mixed_subfolders_files(self):
122 Test return of None when mixed named subfolders (numeric and
123 others) together with files are present. Numeric folders are
126 create_non_numeric_subfolders(self.path)
127 create_numeric_subfolders_non_sequential(self.path)
128 create_numeric_files(self.path)
130 id = storage.find_last_numeric_subfolder(self.path)
131 self.assertEqual(id, 1401)
134 class TreeTextFileAccessTest(unittest.TestCase):
136 Test suite for TreeTextFileAccess class in storage.py.
139 # Class specific variables. Initialized in setUp, used throughout tests.
140 path = "/tmp/ttfa-test"
143 """Create folder. Initialize object. """
147 """Remove base folder."""
148 shutil.rmtree(self.path)
150 def test_add_swarm_folder_and_file_are_created(self):
151 # Create instance of class and add swarm.
152 a = storage.TreeTextFileAccess(self.path)
153 s = storage.Swarm(torrent_filename="fedora.torrent",
157 expected_swarm_subfolder = 1
158 expected_swarm_path = os.path.join(self.path,
159 str(expected_swarm_subfolder))
160 expected_swarm_config = os.path.join(expected_swarm_path, "swarm.conf")
162 self.assertEqual(os.path.isdir(expected_swarm_path), True)
163 self.assertEqual(os.path.isfile(expected_swarm_config), True)
165 def test_add_client_session_folder_and_file_are_created(self):
166 a = storage.TreeTextFileAccess(self.path)
169 s = storage.Swarm(torrent_filename="fedora.torrent",
173 # Add client session.
174 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
175 system_os="Linux", system_os_version="2.6.26",
176 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
177 public_port="50500", ds_limit=300, us_limit=200)
178 a.add_client_session(cs)
180 expected_swarm_subfolder = 1
181 expected_session_subfolder = 1
182 expected_swarm_path = os.path.join(self.path,
183 str(expected_swarm_subfolder))
184 expected_session_path = os.path.join(expected_swarm_path,
185 str(expected_session_subfolder))
186 expected_session_config = os.path.join(expected_session_path,
187 "client_session.conf")
189 self.assertEqual(os.path.isdir(expected_session_path), True)
190 self.assertEqual(os.path.isfile(expected_session_config), True)
192 def test_add_peer_status_message_file_is_created(self):
193 a = storage.TreeTextFileAccess(self.path)
196 s = storage.Swarm(torrent_filename="fedora.torrent",
200 # Add client session.
201 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
202 system_os="Linux", system_os_version="2.6.26",
203 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
204 public_port="50500", ds_limit=300, us_limit=200)
205 a.add_client_session(cs)
207 # Add peer status message.
208 msg = storage.PeerStatusMessage(swarm_id=1, client_session_id=1,
209 peer_ip="141.85.224.202", peer_port="12345",
210 download_speed=13, upload_speed=98)
211 a.add_peer_status_message(msg)
213 expected_swarm_subfolder = 1
214 expected_session_subfolder = 1
215 expected_swarm_path = os.path.join(self.path,
216 str(expected_swarm_subfolder))
217 expected_session_path = os.path.join(expected_swarm_path,
218 str(expected_session_subfolder))
219 expected_message_file = os.path.join(expected_session_path,
222 self.assertEqual(os.path.isfile(expected_message_file), True)
224 def test_add_peer_status_message_number_of_lines(self):
225 self.assertEqual(True, True)
227 def test_add_status_message_file_is_created(self):
228 a = storage.TreeTextFileAccess(self.path)
231 s = storage.Swarm(torrent_filename="fedora.torrent",
235 # Add client session.
236 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
237 system_os="Linux", system_os_version="2.6.26",
238 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
239 public_port="50500", ds_limit=300, us_limit=200)
240 a.add_client_session(cs)
242 # Add peer status message.
243 msg = storage.StatusMessage(swarm_id=1, client_session_id=1,
244 num_peers=10, num_dht_peers=3, download_speed=102,
245 upload_speed=99, download_size=10213, upload_size=3301)
246 a.add_status_message(msg)
248 expected_swarm_subfolder = 1
249 expected_session_subfolder = 1
250 expected_swarm_path = os.path.join(self.path,
251 str(expected_swarm_subfolder))
252 expected_session_path = os.path.join(expected_swarm_path,
253 str(expected_session_subfolder))
254 expected_message_file = os.path.join(expected_session_path,
257 self.assertEqual(os.path.isfile(expected_message_file), True)
259 def test_add_status_message_number_of_lines(self):
260 self.assertEqual(True, True)
262 def test_add_verbose_message_file_is_created(self):
263 a = storage.TreeTextFileAccess(self.path)
266 s = storage.Swarm(torrent_filename="fedora.torrent",
270 # Add client session.
271 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
272 system_os="Linux", system_os_version="2.6.26",
273 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
274 public_port="50500", ds_limit=300, us_limit=200)
275 a.add_client_session(cs)
277 # Add peer status message.
278 msg = storage.VerboseMessage(swarm_id=1, client_session_id=1,
279 transfer_direction="send", peer_ip="141.85.224.202",
280 peer_port="12345", message_type="CHOKE")
281 a.add_verbose_message(msg)
283 expected_swarm_subfolder = 1
284 expected_session_subfolder = 1
285 expected_swarm_path = os.path.join(self.path,
286 str(expected_swarm_subfolder))
287 expected_session_path = os.path.join(expected_swarm_path,
288 str(expected_session_subfolder))
289 expected_message_file = os.path.join(expected_session_path,
292 self.assertEqual(os.path.isfile(expected_message_file), True)
294 def test_add_verbose_message_number_of_lines(self):
295 self.assertEqual(True, True)
297 class SQLiteDatabaseAccessTest(unittest.TestCase):
299 Test suite for SQLiteDatabaseAccess class in storage.py.
302 # Class specific variables. Initialized in setUp, used throughout tests.
304 sql_create_script = "p2p-log-sqlite.sql"
305 sql_init_script = "p2p-init-test.sql"
306 expected_swarms_count = 0
307 expected_sessions_count = 0
308 expected_statmsg_count = 0
309 expected_verbmsg_count = 0
312 """ Create database file and instantiate objects. """
313 # Create database file. Create tables and indices.
314 # TODO: Check exceptions.
315 sql_create_script_path = os.path.join(os.path.dirname(__file__),
316 self.sql_create_script)
317 f = open(sql_create_script_path, 'r')
318 p = subprocess.Popen(["sqlite3", self.database], stdin=f)
319 ret = os.waitpid(p.pid, 0)[1]
323 # TODO: Check exceptions.
324 sql_init_script_path = os.path.join(os.path.dirname(__file__),
325 self.sql_init_script)
326 f = open(sql_init_script_path, 'r')
327 p = subprocess.Popen(["sqlite3", self.database], stdin=f)
328 ret = os.waitpid(p.pid, 0)[1]
331 # Initialize to number of table entries inserted in the init script.
332 self.expected_swarms_count = 2
333 self.expected_sessions_count = 2
334 self.expected_statmsg_count = 2
335 self.expected_verbmsg_count = 2
338 """ Close connection and remove database file. """
339 os.remove(self.database)
341 def test_add_swarm_new_entry_in_table(self):
342 self.assertEqual(True, False)
344 def test_add_client_session_new_entry_in_table(self):
345 self.assertEqual(True, False)
347 def test_add_peer_status_message_new_entry_in_table(self):
348 self.assertEqual(True, False)
350 def test_add_peer_status_message_new_entry_in_table(self):
351 self.assertEqual(True, False)
353 def test_add_status_message_new_entry_in_table(self):
354 self.assertEqual(True, False)
356 def test_add_verbose_message_new_entry_in_databas(self):
357 self.assertEqual(True, False)
359 if __name__ == "__main__":