2 Test suite for storage. Uses unittest module.
4 2011, Razvan Deaconescu, razvan.deaconescu@cs.pub.ro.
15 def create_non_numeric_subfolders(path):
16 os.mkdir(os.path.join(path, "ana"))
17 os.mkdir(os.path.join(path, "are"))
18 os.mkdir(os.path.join(path, "mere"))
19 os.mkdir(os.path.join(path, "si"))
20 os.mkdir(os.path.join(path, "pere"))
22 def create_numeric_subfolders_sequential(path):
23 os.mkdir(os.path.join(path, "1"))
24 os.mkdir(os.path.join(path, "2"))
25 os.mkdir(os.path.join(path, "3"))
26 os.mkdir(os.path.join(path, "4"))
27 os.mkdir(os.path.join(path, "5"))
29 def create_numeric_subfolders_non_sequential(path):
30 os.mkdir(os.path.join(path, "32"))
31 os.mkdir(os.path.join(path, "5"))
32 os.mkdir(os.path.join(path, "423"))
33 os.mkdir(os.path.join(path, "1401"))
34 os.mkdir(os.path.join(path, "92"))
36 def create_numeric_files(path):
37 f = open(os.path.join(path, "33"), 'w')
39 f = open(os.path.join(path, "6"), 'w')
41 f = open(os.path.join(path, "424"), 'w')
43 f = open(os.path.join(path, "1402"), 'w')
45 f = open(os.path.join(path, "93"), 'w')
48 class StorageTest(unittest.TestCase):
50 Test suite for stand alone functions in storage.py.
53 # Class specific variables. Initialized in setUp, used throughout tests.
54 path = "/tmp/ttfa-test"
61 """Remove base folder."""
62 shutil.rmtree(self.path)
64 def test_find_last_numeric_subfolder_no_subfolders(self):
65 """Test return of None when no subfolders are present."""
66 id = storage.find_last_numeric_subfolder(self.path)
67 self.assertEqual(id, None)
69 def test_find_last_numeric_subfolder_no_numeric_subfolders(self):
70 """Test return of None when no numeric subfolders are present."""
71 create_non_numeric_subfolders(self.path)
73 id = storage.find_last_numeric_subfolder(self.path)
74 self.assertEqual(id, None)
76 def test_find_last_numeric_subfolder_only_numeric_subfolders_sequential(self):
78 Test return of correct id when sequential numeric named
79 subfolders only are present (1, 2, 3, ...).
81 create_numeric_subfolders_sequential(self.path)
83 id = storage.find_last_numeric_subfolder(self.path)
84 self.assertEqual(id, 5)
86 def test_find_last_numeric_subfolder_only_numeric_subfolders_nonsequential(self):
88 Test return of correct id when nonsequential numeric named
89 subfolders only are present (32, 5, 423, ...).
91 create_numeric_subfolders_non_sequential(self.path)
93 id = storage.find_last_numeric_subfolder(self.path)
94 self.assertEqual(id, 1401)
96 def test_find_last_numeric_subfolder_mixed_subfolders_sequential(self):
98 Test return of None when mixed named subfolders (numeric and
99 others) are present. Numeric folders are sequential.
101 create_non_numeric_subfolders(self.path)
102 create_numeric_subfolders_sequential(self.path)
104 id = storage.find_last_numeric_subfolder(self.path)
105 self.assertEqual(id, 5)
107 def test_find_last_numeric_subfolder_mixed_subfolders_nonsequential(self):
109 Test return of None when mixed named subfolders (numeric and
110 others) are present. Numeric folders are non-sequential.
112 create_non_numeric_subfolders(self.path)
113 create_numeric_subfolders_non_sequential(self.path)
115 id = storage.find_last_numeric_subfolder(self.path)
116 self.assertEqual(id, 1401)
118 def test_find_last_numeric_subfolder_mixed_subfolders_files(self):
120 Test return of None when mixed named subfolders (numeric and
121 others) together with files are present. Numeric folders are
124 create_non_numeric_subfolders(self.path)
125 create_numeric_subfolders_non_sequential(self.path)
126 create_numeric_files(self.path)
128 id = storage.find_last_numeric_subfolder(self.path)
129 self.assertEqual(id, 1401)
132 class TreeTextFileAccessTest(unittest.TestCase):
134 Test suite for TreeTextFileAccess class in storage.py.
137 # Class specific variables. Initialized in setUp, used throughout tests.
138 path = "/tmp/ttfa-test"
141 """Create folder. Initialize object. """
145 """Remove base folder."""
146 shutil.rmtree(self.path)
148 def test_add_swarm_folder_and_file_are_created(self):
149 # Create instance of class and add swarm.
150 a = storage.TreeTextFileAccess(self.path)
151 s = storage.Swarm(torrent_filename="fedora.torrent",
155 expected_swarm_subfolder = 1
156 expected_swarm_path = os.path.join(self.path,
157 str(expected_swarm_subfolder))
158 expected_swarm_config = os.path.join(expected_swarm_path, "swarm.conf")
160 self.assertEqual(os.path.isdir(expected_swarm_path), True)
161 self.assertEqual(os.path.isfile(expected_swarm_config), True)
163 def test_add_client_session_folder_and_file_are_created(self):
164 a = storage.TreeTextFileAccess(self.path)
167 s = storage.Swarm(torrent_filename="fedora.torrent",
171 # Add client session.
172 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
173 system_os="Linux", system_os_version="2.6.26",
174 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
175 public_port="50500", ds_limit=300, us_limit=200)
176 a.add_client_session(cs)
178 expected_swarm_subfolder = 1
179 expected_session_subfolder = 1
180 expected_swarm_path = os.path.join(self.path,
181 str(expected_swarm_subfolder))
182 expected_session_path = os.path.join(expected_swarm_path,
183 str(expected_session_subfolder))
184 expected_session_config = os.path.join(expected_session_path,
185 "client_session.conf")
187 self.assertEqual(os.path.isdir(expected_session_path), True)
188 self.assertEqual(os.path.isfile(expected_session_config), True)
190 def test_add_peer_status_message_file_is_created(self):
191 a = storage.TreeTextFileAccess(self.path)
194 s = storage.Swarm(torrent_filename="fedora.torrent",
198 # Add client session.
199 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
200 system_os="Linux", system_os_version="2.6.26",
201 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
202 public_port="50500", ds_limit=300, us_limit=200)
203 a.add_client_session(cs)
205 # Add peer status message.
206 msg = storage.PeerStatusMessage(swarm_id=1, client_session_id=1,
207 peer_ip="141.85.224.202", peer_port="12345",
208 download_speed=13, upload_speed=98)
209 a.add_peer_status_message(msg)
211 expected_swarm_subfolder = 1
212 expected_session_subfolder = 1
213 expected_swarm_path = os.path.join(self.path,
214 str(expected_swarm_subfolder))
215 expected_session_path = os.path.join(expected_swarm_path,
216 str(expected_session_subfolder))
217 expected_message_file = os.path.join(expected_session_path,
220 self.assertEqual(os.path.isfile(expected_message_file), True)
222 def test_add_peer_status_message_number_of_lines(self):
223 self.assertEqual(True, True)
225 def test_add_status_message_file_is_created(self):
226 a = storage.TreeTextFileAccess(self.path)
229 s = storage.Swarm(torrent_filename="fedora.torrent",
233 # Add client session.
234 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
235 system_os="Linux", system_os_version="2.6.26",
236 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
237 public_port="50500", ds_limit=300, us_limit=200)
238 a.add_client_session(cs)
240 # Add peer status message.
241 msg = storage.StatusMessage(swarm_id=1, client_session_id=1,
242 num_peers=10, num_dht_peers=3, download_speed=102,
243 upload_speed=99, download_size=10213, upload_size=3301)
244 a.add_status_message(msg)
246 expected_swarm_subfolder = 1
247 expected_session_subfolder = 1
248 expected_swarm_path = os.path.join(self.path,
249 str(expected_swarm_subfolder))
250 expected_session_path = os.path.join(expected_swarm_path,
251 str(expected_session_subfolder))
252 expected_message_file = os.path.join(expected_session_path,
255 self.assertEqual(os.path.isfile(expected_message_file), True)
257 def test_add_status_message_number_of_lines(self):
258 self.assertEqual(True, True)
260 def test_add_verbose_message_file_is_created(self):
261 a = storage.TreeTextFileAccess(self.path)
264 s = storage.Swarm(torrent_filename="fedora.torrent",
268 # Add client session.
269 cs = storage.ClientSession(swarm_id=1, btclient="Tribler",
270 system_os="Linux", system_os_version="2.6.26",
271 system_ram=2048, system_cpu=3000, public_ip="141.85.224.201",
272 public_port="50500", ds_limit=300, us_limit=200)
273 a.add_client_session(cs)
275 # Add peer status message.
276 msg = storage.VerboseMessage(swarm_id=1, client_session_id=1,
277 transfer_direction="send", peer_ip="141.85.224.202",
278 peer_port="12345", message_type="CHOKE")
279 a.add_verbose_message(msg)
281 expected_swarm_subfolder = 1
282 expected_session_subfolder = 1
283 expected_swarm_path = os.path.join(self.path,
284 str(expected_swarm_subfolder))
285 expected_session_path = os.path.join(expected_swarm_path,
286 str(expected_session_subfolder))
287 expected_message_file = os.path.join(expected_session_path,
290 self.assertEqual(os.path.isfile(expected_message_file), True)
292 def test_add_verbose_message_number_of_lines(self):
293 self.assertEqual(True, True)
295 class SQLiteDatabaseAccessTest(unittest.TestCase):
297 Test suite for SQLiteDatabaseAccess class in storage.py.
300 # Class specific variables. Initialized in setUp, used throughout tests.
305 expected_swarms_count = 0
306 expected_btclients_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 conn = sqlite3.connect(self.database)
314 cursor = conn.cursor()
316 #cursor.executescript(sql_create_script)
317 #cursor.executescript(sql_init_script)
318 # Initialize to number of table entries inserted in the init script.
319 self.expected_swarms_count = 2
320 self.expected_btclients_count = 6
321 self.expected_sessions_count = 2
322 self.expected_statmsg_count = 2
323 self.expected_verbmsg_count = 2
328 self.dba = storage.SQLiteDatabaseAccess()
329 self.dba.connect(self.database)
332 """ Close connection and remove database file. """
333 self.dba.disconnect()
334 os.remove(self.database)
336 def test_add_swarm_new_entry_in_table(self):
337 self.assertEqual(True, False)
339 def test_add_client_session_new_entry_in_table(self):
340 self.assertEqual(True, False)
342 def test_add_peer_status_message_new_entry_in_table(self):
343 self.assertEqual(True, False)
345 def test_add_peer_status_message_new_entry_in_table(self):
346 self.assertEqual(True, False)
348 def test_add_status_message_new_entry_in_table(self):
349 self.assertEqual(True, False)
351 def test_add_verbose_message_new_entry_in_databas(self):
352 self.assertEqual(True, False)
354 if __name__ == "__main__":