def testAverage(self): """Test making an average statsobj""" s1 = statistics.StatsObj() s1.StartTime = 5 s1.EndTime = 10 s1.ElapsedTime = 5 s1.ChangedFiles = 2 s1.SourceFiles = 100 s1.NewFileSize = 4 s2 = statistics.StatsObj() s2.StartTime = 25 s2.EndTime = 35 s2.ElapsedTime = 10 s2.ChangedFiles = 1 s2.SourceFiles = 50 s2.DeletedFiles = 0 s3 = statistics.StatsObj().set_to_average([s1, s2]) self.assertIsNone(s3.StartTime) self.assertIsNone(s3.EndTime) self.assertEqual(s3.ElapsedTime, 7.5) self.assertIsNone(s3.DeletedFiles) self.assertIsNone(s3.NewFileSize) self.assertEqual(s3.ChangedFiles, 1.5) self.assertEqual(s3.SourceFiles, 75)
def testAverage(self): """Test making an average statsobj""" s1 = statistics.StatsObj() s1.StartTime = 5 s1.EndTime = 10 s1.ElapsedTime = 5 s1.ChangedFiles = 2 s1.SourceFiles = 100 s1.NewFileSize = 4 s2 = statistics.StatsObj() s2.StartTime = 25 s2.EndTime = 35 s2.ElapsedTime = 10 s2.ChangedFiles = 1 s2.SourceFiles = 50 s2.DeletedFiles = 0 s3 = statistics.StatsObj().set_to_average([s1, s2]) assert s3.StartTime is s3.EndTime is None assert s3.ElapsedTime == 7.5 assert s3.DeletedFiles is s3.NewFileSize is None, (s3.DeletedFiles, s3.NewFileSize) assert s3.ChangedFiles == 1.5 assert s3.SourceFiles == 75
def test_write_rp(self): """Test reading and writing of statistics object""" rp = rpath.RPath(Globals.local_connection, "testfiles/statstest") if rp.lstat(): rp.delete() s = statistics.StatsObj() self.set_obj(s) s.write_stats_to_rp(rp) s2 = statistics.StatsObj() assert not s2.stats_equal(s) s2.read_stats_from_rp(rp) assert s2.stats_equal(s)
def testStatistics(self): """Test the writing of statistics The file sizes are approximate because the size of directories could change with different file systems... """ def sorti(inclist): templist = [(inc.getinctime(), inc) for inc in inclist] templist.sort() return [inc for (t, inc) in templist] Globals.compression = 1 Myrm(abs_output_dir) InternalBackup(1, 1, os.path.join(old_test_dir, b"stattest1"), abs_output_dir) InternalBackup(1, 1, os.path.join(old_test_dir, b"stattest2"), abs_output_dir, time.time() + 1) rbdir = rpath.RPath(Globals.local_connection, os.path.join(abs_output_dir, b"rdiff-backup-data")) incs = sorti(restore.get_inclist(rbdir.append("session_statistics"))) self.assertEqual(len(incs), 2) s2 = statistics.StatsObj().read_stats_from_rp(incs[0]) self.assertEqual(s2.SourceFiles, 7) self.assertLessEqual(700000, s2.SourceFileSize) self.assertLess(s2.SourceFileSize, 750000) self.stats_check_initial(s2) root_stats = statistics.StatsObj().read_stats_from_rp(incs[1]) self.assertEqual(root_stats.SourceFiles, 7) self.assertLessEqual(550000, root_stats.SourceFileSize) self.assertLess(root_stats.SourceFileSize, 570000) self.assertEqual(root_stats.MirrorFiles, 7) self.assertLessEqual(700000, root_stats.MirrorFileSize) self.assertLess(root_stats.MirrorFileSize, 750000) self.assertEqual(root_stats.NewFiles, 1) self.assertEqual(root_stats.NewFileSize, 0) self.assertEqual(root_stats.DeletedFiles, 1) self.assertEqual(root_stats.DeletedFileSize, 200000) self.assertLessEqual(3, root_stats.ChangedFiles) self.assertLessEqual(root_stats.ChangedFiles, 4) self.assertLessEqual(450000, root_stats.ChangedSourceSize) self.assertLess(root_stats.ChangedSourceSize, 470000) self.assertLessEqual(400000, root_stats.ChangedMirrorSize) self.assertLess(root_stats.ChangedMirrorSize, 420000) self.assertLess(10, root_stats.IncrementFileSize) self.assertLess(root_stats.IncrementFileSize, 30000)
def test_write_rp(self): """Test reading and writing of statistics object""" rp = rpath.RPath(Globals.local_connection, os.path.join(abs_test_dir, b"statstest")) if rp.lstat(): rp.delete() s = statistics.StatsObj() self.set_obj(s) s.write_stats_to_rp(rp) s2 = statistics.StatsObj() self.assertFalse(s2._stats_equal(s)) s2.read_stats_from_rp(rp) self.assertTrue(s2._stats_equal(s))
def run(self): """ Print out the calculation of the given statistics files, according to calculation method. """ statobjs = [ statistics.StatsObj().read_stats_from_rp(loc) for loc in self.connected_locations ] if self.values.method == "average": calc_stats = statistics.StatsObj().set_to_average(statobjs) print( calc_stats.get_stats_logstring("Average of %d stat files" % len(self.connected_locations))) return Globals.RET_CODE_OK
def test_init_stats(self): """Test setting stat object from string""" s = statistics.StatsObj() s.set_stats_from_string("NewFiles 3 hello there") for attr in s.stat_attrs: if attr == 'NewFiles': assert s.get_stat(attr) == 3 else: assert s.get_stat(attr) is None, (attr, s.__dict__[attr]) s1 = statistics.StatsObj() self.set_obj(s1) assert not s1.stats_equal(s) s2 = statistics.StatsObj() s2.set_stats_from_string(s1.get_stats_string()) assert s1.stats_equal(s2)
def test_get_stats_string(self): """Test conversion of stat object into string""" s = statistics.StatsObj() stats_string = s._get_stats_string() self.assertEqual(stats_string, "") self.set_obj(s) stats_string = s._get_stats_string() ss_list = stats_string.split("\n") tail = "\n".join(ss_list[2:]) # Time varies by time zone, don't check # """StartTime 11.00 (Wed Dec 31 16:00:11 1969) # EndTime 12.00 (Wed Dec 31 16:00:12 1969)" self.assertEqual(tail, """ElapsedTime 1.00 (1 second) SourceFiles 1 SourceFileSize 2 (2 bytes) MirrorFiles 13 MirrorFileSize 14 (14 bytes) NewFiles 3 NewFileSize 4 (4 bytes) DeletedFiles 5 DeletedFileSize 6 (6 bytes) ChangedFiles 7 ChangedSourceSize 8 (8 bytes) ChangedMirrorSize 9 (9 bytes) IncrementFiles 15 IncrementFileSize 10 (10 bytes) TotalDestinationSizeChange 7 (7 bytes) """)
def _list_increments_sizes(self): """ Print out a summary of the increments with their size and cumulative size """ triples = self.repo.get_increments_sizes() if self.values.parsable_output: print( yaml.safe_dump(triples, explicit_start=True, explicit_end=True)) else: stat_obj = statistics.StatsObj() # used for byte summary string print("{: ^24} {: ^17} {: ^17}".format("Time", "Size", "Cumulative size")) print("{:-^24} {:-^17} {:-^17}".format("", "", "")) # print the normal increments then the mirror for triple in triples[:-1]: print("{: <24} {: >17} {: >17}".format( Time.timetopretty(triple["time"]), stat_obj.get_byte_summary_string(triple["size"]), stat_obj.get_byte_summary_string(triple["total_size"]))) print("{: <24} {: >17} {: >17} (current mirror)".format( Time.timetopretty(triples[-1]["time"]), stat_obj.get_byte_summary_string(triples[-1]["size"]), stat_obj.get_byte_summary_string(triples[-1]["total_size"])))
def test_init_stats(self): """Test setting stat object from string""" s = statistics.StatsObj() s._set_stats_from_string("NewFiles 3 hello there") for attr in s._stat_attrs: if attr == 'NewFiles': self.assertEqual(s.get_stat(attr), 3) else: self.assertIsNone(s.get_stat(attr)) s1 = statistics.StatsObj() self.set_obj(s1) self.assertFalse(s1._stats_equal(s)) s2 = statistics.StatsObj() s2._set_stats_from_string(s1._get_stats_string()) self.assertTrue(s1._stats_equal(s2))
def test_get_stats(self): """Test reading and writing stat objects""" s = statistics.StatsObj() self.assertIsNone(s.get_stat('SourceFiles')) self.set_obj(s) self.assertEqual(s.get_stat('SourceFiles'), 1) s1 = statistics.StatFileObj() self.assertEqual(s1.get_stat('SourceFiles'), 0)
def test_get_stats(self): """Test reading and writing stat objects""" s = statistics.StatsObj() assert s.get_stat('SourceFiles') is None self.set_obj(s) assert s.get_stat('SourceFiles') == 1 s1 = statistics.StatFileObj() assert s1.get_stat('SourceFiles') == 0
def testStatistics(self): """Test the writing of statistics The file sizes are approximate because the size of directories could change with different file systems... """ def sorti(inclist): l = [(inc.getinctime(), inc) for inc in inclist] l.sort() return [inc for (t, inc) in l] Globals.compression = 1 Myrm(abs_output_dir) InternalBackup(1, 1, os.path.join(old_test_dir, "stattest1"), abs_output_dir) InternalBackup(1, 1, os.path.join(old_test_dir, "stattest2"), abs_output_dir, time.time() + 1) rbdir = rpath.RPath(Globals.local_connection, os.path.join(abs_output_dir, "rdiff-backup-data")) incs = sorti(restore.get_inclist(rbdir.append("session_statistics"))) assert len(incs) == 2 s2 = statistics.StatsObj().read_stats_from_rp(incs[0]) assert s2.SourceFiles == 7 assert 700000 <= s2.SourceFileSize < 750000, s2.SourceFileSize self.stats_check_initial(s2) root_stats = statistics.StatsObj().read_stats_from_rp(incs[1]) assert root_stats.SourceFiles == 7, root_stats.SourceFiles assert 550000 <= root_stats.SourceFileSize < 570000 assert root_stats.MirrorFiles == 7 assert 700000 <= root_stats.MirrorFileSize < 750000 assert root_stats.NewFiles == 1 assert root_stats.NewFileSize == 0 assert root_stats.DeletedFiles == 1, root_stats.DeletedFiles assert root_stats.DeletedFileSize == 200000 assert 3 <= root_stats.ChangedFiles <= 4, root_stats.ChangedFiles assert 450000 <= root_stats.ChangedSourceSize < 470000 assert 400000 <= root_stats.ChangedMirrorSize < 420000, \ root_stats.ChangedMirrorSize assert 10 < root_stats.IncrementFileSize < 30000
def test_byte_summary(self): """Test conversion of bytes to strings like 7.23MB""" s = statistics.StatsObj() f = s.get_byte_summary_string self.assertEqual(f(1), "1 byte") self.assertEqual(f(234.34), "234 bytes") self.assertEqual(f(2048), "2.00 KB") self.assertEqual(f(3502243), "3.34 MB") self.assertEqual(f(314992230), "300 MB") self.assertEqual(f(36874871216), "34.3 GB") self.assertEqual(f(3775986812573450), "3434 TB")
def test_byte_summary(self): """Test conversion of bytes to strings like 7.23MB""" s = statistics.StatsObj() f = s.get_byte_summary_string assert f(1) == "1 byte" assert f(234.34) == "234 bytes" assert f(2048) == "2.00 KB" assert f(3502243) == "3.34 MB" assert f(314992230) == "300 MB" assert f(36874871216) == "34.3 GB", f(36874871216) assert f(3775986812573450) == "3434 TB"
def test_line_string(self): """Test conversion to a single line""" s = statistics.StatsObj() self.set_obj(s) statline = s.get_stats_line(("sample", "index", "w", "new\nline")) assert statline == "sample/index/w/new\\nline 1 2 13 14 " \ "3 4 5 6 7 8 9 15 10", repr(statline) statline = s.get_stats_line(()) assert statline == ". 1 2 13 14 3 4 5 6 7 8 9 15 10" statline = s.get_stats_line(("file name with spaces", )) assert statline == "file\\x20name\\x20with\\x20spaces 1 2 13 14 " \ "3 4 5 6 7 8 9 15 10", repr(statline)