Rev 4010: Interface level test for using delta_closure=True over the network. in http://people.ubuntu.com/~robertc/baz2.0/versioned_files.network

Robert Collins robertc at robertcollins.net
Mon Feb 16 00:05:50 GMT 2009


At http://people.ubuntu.com/~robertc/baz2.0/versioned_files.network

------------------------------------------------------------
revno: 4010
revision-id: robertc at robertcollins.net-20090216000547-jzy3qm5ssb5nw5wg
parent: robertc at robertcollins.net-20090215231829-3vy12hex48pfi8ca
committer: Robert Collins <robertc at robertcollins.net>
branch nick: VersionedFiles.NetworkRecordStream
timestamp: Mon 2009-02-16 11:05:47 +1100
message:
  Interface level test for using delta_closure=True over the network.
=== modified file 'bzrlib/tests/test_versionedfile.py'
--- a/bzrlib/tests/test_versionedfile.py	2009-02-15 23:18:29 +0000
+++ b/bzrlib/tests/test_versionedfile.py	2009-02-16 00:05:47 +0000
@@ -1739,6 +1739,40 @@
                     record.get_bytes_as(record.storage_kind))
             self.assertEqual(1, len(records))
 
+    def assertStreamMetaEqual(self, records, expected, stream):
+        """Assert that streams expected and stream have the same records.
+        
+        :param records: A list to collect the seen records.
+        :return: A generator of the records in stream.
+        """
+        # We make assertions during copying to catch things early for
+        # easier debugging.
+        for record, ref_record in izip(stream, expected):
+            records.append(record)
+            self.assertEqual(ref_record.key, record.key)
+            self.assertEqual(ref_record.storage_kind, record.storage_kind)
+            self.assertEqual(ref_record.parents, record.parents)
+            yield record
+
+    def stream_to_bytes_or_skip_counter(self, skipped_records, full_texts,
+        stream):
+        """Convert a stream to a bytes iterator.
+
+        :param skipped_records: A list with one element to increment when a
+            record is skipped.
+        :param full_texts: A dict from key->fulltext representation, for 
+            checking chunked or fulltext stored records.
+        :param stream: A record_stream.
+        :return: An iterator over the bytes of each record.
+        """
+        for record in stream:
+            if record.storage_kind in ('chunked', 'fulltext'):
+                skipped_records[0] += 1
+                # check the content is correct for direct use.
+                self.assertRecordHasContent(record, full_texts[record.key])
+            else:
+                yield record.get_bytes_as(record.storage_kind)
+
     def test_get_record_stream_native_formats_are_wire_ready_ft_delta(self):
         files = self.get_versionedfiles()
         target_files = self.get_versionedfiles('target')
@@ -1753,36 +1787,19 @@
         local = files.get_record_stream([key, key_delta], 'unordered', False)
         ref = files.get_record_stream([key, key_delta], 'unordered', False)
         skipped_records = [0]
-        def to_bytes(stream):
-            for record in stream:
-                if record.storage_kind in ('chunked', 'fulltext'):
-                    skipped_records[0] += 1
-                    # check the content is correct for direct use.
-                    if record.key == key:
-                        self.assertRecordHasContent(record, "my text\ncontent")
-                    else:
-                        self.assertRecordHasContent(record,
-                            "different\ncontent\n")
-                else:
-                    yield record.get_bytes_as(record.storage_kind)
-        byte_stream = to_bytes(local)
+        full_texts = {
+            key: "my text\ncontent",
+            key_delta: "different\ncontent\n",
+            }
+        byte_stream = self.stream_to_bytes_or_skip_counter(
+            skipped_records, full_texts, local)
         network_stream = versionedfile.NetworkRecordStream(byte_stream).read()
         records = []
-        # We assume that the order of local and ref will be identical given the
-        # same parameters to the same source objects.
-        def check_stream(network_stream, reference_stream):
-            # We make assertions during copying to catch things early for
-            # easier debugging.
-            for record, ref_record in izip(network_stream, reference_stream):
-                records.append(record)
-                self.assertEqual(ref_record.key, record.key)
-                self.assertEqual(ref_record.storage_kind, record.storage_kind)
-                self.assertEqual(ref_record.parents, record.parents)
-                yield record
         # insert the stream from the network into a versioned files object so we can
         # check the content was carried across correctly without doing delta
         # inspection.
-        target_files.insert_record_stream(check_stream(network_stream, ref))
+        target_files.insert_record_stream(
+            self.assertStreamMetaEqual(records, ref, network_stream))
         # No duplicates on the wire thank you!
         self.assertEqual(2, len(records) + skipped_records[0])
         if len(records):
@@ -1801,43 +1818,61 @@
         else:
             delta_parents = ()
         files.add_lines(key_delta, delta_parents, ['different\n', 'content\n'])
+        # Copy the basis text across so we can reconstruct the delta during
+        # insertion into target.
         target_files.insert_record_stream(files.get_record_stream([key],
             'unordered', False))
         local = files.get_record_stream([key_delta], 'unordered', False)
         ref = files.get_record_stream([key_delta], 'unordered', False)
         skipped_records = [0]
-        def to_bytes(stream):
-            for record in stream:
-                if record.storage_kind in ('chunked', 'fulltext'):
-                    skipped_records[0] += 1
-                    # check the content is correct for direct use.
-                    self.assertRecordHasContent(record, "different\ncontent\n")
-                else:
-                    yield record.get_bytes_as(record.storage_kind)
-        byte_stream = to_bytes(local)
+        full_texts = {
+            key_delta: "different\ncontent\n",
+            }
+        byte_stream = self.stream_to_bytes_or_skip_counter(
+            skipped_records, full_texts, local)
         network_stream = versionedfile.NetworkRecordStream(byte_stream).read()
         records = []
-        # We assume that the order of local and ref will be identical given the
-        # same parameters to the same source objects.
-        def check_stream(network_stream, reference_stream):
-            # We make assertions during copying to catch things early for
-            # easier debugging.
-            for record, ref_record in izip(network_stream, reference_stream):
-                records.append(record)
-                self.assertEqual(ref_record.key, record.key)
-                self.assertEqual(ref_record.storage_kind, record.storage_kind)
-                self.assertEqual(ref_record.parents, record.parents)
-                yield record
         # insert the stream from the network into a versioned files object so we can
         # check the content was carried across correctly without doing delta
         # inspection during check_stream.
-        target_files.insert_record_stream(check_stream(network_stream, ref))
+        target_files.insert_record_stream(
+            self.assertStreamMetaEqual(records, ref, network_stream))
         # No duplicates on the wire thank you!
         self.assertEqual(1, len(records) + skipped_records[0])
         if len(records):
             # if any content was copied it all must have all been
             self.assertIdenticalVersionedFile(files, target_files)
 
+    def test_get_record_stream_wire_ready_delta_closure_included(self):
+        # copy a delta over the wire with the ability to get its full text.
+        files = self.get_versionedfiles()
+        key = self.get_simple_key('ft')
+        key_delta = self.get_simple_key('delta')
+        files.add_lines(key, (), ['my text\n', 'content'])
+        if self.graph:
+            delta_parents = (key,)
+        else:
+            delta_parents = ()
+        files.add_lines(key_delta, delta_parents, ['different\n', 'content\n'])
+        local = files.get_record_stream([key_delta], 'unordered', True)
+        ref = files.get_record_stream([key_delta], 'unordered', True)
+        skipped_records = [0]
+        full_texts = {
+            key_delta: "different\ncontent\n",
+            }
+        byte_stream = self.stream_to_bytes_or_skip_counter(
+            skipped_records, full_texts, local)
+        network_stream = versionedfile.NetworkRecordStream(byte_stream).read()
+        records = []
+        # insert the stream from the network into a versioned files object so we can
+        # check the content was carried across correctly without doing delta
+        # inspection during check_stream.
+        for record in self.assertStreamMetaEqual(records, ref, network_stream):
+            # we have to be able to get the full text out:
+            self.assertRecordHasContent(record, full_texts[record.key])
+        # No duplicates on the wire thank you!
+        self.assertEqual(1, len(records) + skipped_records[0])
+
     def assertAbsentRecord(self, files, keys, parents, entries):
         """Helper for test_get_record_stream_missing_records_are_absent."""
         seen = set()




More information about the bazaar-commits mailing list