868
868
eq(sorted(wa.iter_names()), ['v1', 'v2', 'v3', 'x1',])
869
869
eq(wa.get_text('x1'), 'line from x1\n')
872
class Corruption(TestCase):
874
def test_detection(self):
875
# Test weaves detect corruption.
877
# Weaves contain a checksum of their texts.
878
# When a text is extracted, this checksum should be
882
w.add('v1', [], ['hello\n'])
883
w.add('v2', ['v1'], ['hello\n', 'there\n'])
885
# We are going to invasively corrupt the text
886
# Make sure the internals of weave are the same
887
self.assertEqual([('{', 0)
895
self.assertEqual(['f572d396fae9206628714fb2ce00f72e94f2258f'
896
, '90f265c6e75f1c8f9ab76dcf85528352c5f215ef'
901
w._weave[4] = 'There\n'
903
self.assertEqual('hello\n', w.get_text('v1'))
904
self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2')
905
self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2')
906
self.assertRaises(errors.WeaveInvalidChecksum, list, w.get_iter('v2'))
907
self.assertRaises(errors.WeaveInvalidChecksum, w.check)
910
w._weave[4] = 'there\n'
911
self.assertEqual('hello\nthere\n', w.get_text('v2'))
913
#Invalid checksum, first digit changed
914
w._sha1s[1] = 'f0f265c6e75f1c8f9ab76dcf85528352c5f215ef'
916
self.assertEqual('hello\n', w.get_text('v1'))
917
self.assertRaises(errors.WeaveInvalidChecksum, w.get_text, 'v2')
918
self.assertRaises(errors.WeaveInvalidChecksum, w.get_lines, 'v2')
919
self.assertRaises(errors.WeaveInvalidChecksum, list, w.get_iter('v2'))
920
self.assertRaises(errors.WeaveInvalidChecksum, w.check)
922
871
def test_written_detection(self):
923
872
# Test detection of weave file corruption.