D2906: wireproto: start to associate frame generation with a stream

2018-04-03 Thread indygreg (Gregory Szorc)
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG3ed344546d9e: wireproto: start to associate frame 
generation with a stream (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2906?vs=7434=7548

REVISION DETAIL
  https://phab.mercurial-scm.org/D2906

AFFECTED FILES
  mercurial/wireprotoframing.py
  mercurial/wireprotoserver.py
  tests/test-wireproto-serverreactor.py

CHANGE DETAILS

diff --git a/tests/test-wireproto-serverreactor.py 
b/tests/test-wireproto-serverreactor.py
--- a/tests/test-wireproto-serverreactor.py
+++ b/tests/test-wireproto-serverreactor.py
@@ -27,25 +27,31 @@
 header.flags,
 payload))
 
-def sendcommandframes(reactor, rid, cmd, args, datafh=None):
+def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
 """Generate frames to run a command and send them to a reactor."""
 return sendframes(reactor,
-  framing.createcommandframes(rid, cmd, args, datafh))
+  framing.createcommandframes(stream, rid, cmd, args,
+  datafh))
 
 class FrameTests(unittest.TestCase):
 def testdataexactframesize(self):
 data = util.bytesio(b'x' * framing.DEFAULT_MAX_FRAME_SIZE)
 
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command',
+  {}, data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % data.getvalue()),
 ffs(b'1 command-data eos ')
 ])
 
 def testdatamultipleframes(self):
 data = util.bytesio(b'x' * (framing.DEFAULT_MAX_FRAME_SIZE + 1))
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {},
+  data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % (
@@ -56,7 +62,8 @@
 def testargsanddata(self):
 data = util.bytesio(b'x' * 100)
 
-frames = list(framing.createcommandframes(1, b'command', {
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {
 b'key1': b'key1value',
 b'key2': b'key2value',
 b'key3': b'key3value',
@@ -75,59 +82,63 @@
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 formatting'):
 args = [b'x' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', args, [])]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', args, [])]))
 
 def testtextoutputexcessivelabels(self):
 """At most 255 labels are allowed."""
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 labels'):
 labels = [b'l' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', [], labels)]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', [], labels)]))
 
 def testtextoutputformattingstringtype(self):
 """Formatting string must be bytes."""
 with self.assertRaisesRegexp(ValueError, 'must use bytes formatting '):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo'.decode('ascii'), [], [])]))
 
 def testtextoutputargumentbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for 
argument'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [b'foo'.decode('ascii')], [])]))
 
 def testtextoutputlabelbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for labels'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [], [b'foo'.decode('ascii')])]))
 
 def testtextoutputtoolongformatstring(self):
 with self.assertRaisesRegexp(ValueError,
  'formatting string cannot be longer 
than'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'x' * 65536, [], [])]))
 
 def testtextoutputtoolongargumentstring(self):
   

D2906: wireproto: start to associate frame generation with a stream

2018-03-30 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 7434.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2906?vs=7324=7434

REVISION DETAIL
  https://phab.mercurial-scm.org/D2906

AFFECTED FILES
  mercurial/wireprotoframing.py
  mercurial/wireprotoserver.py
  tests/test-wireproto-serverreactor.py

CHANGE DETAILS

diff --git a/tests/test-wireproto-serverreactor.py 
b/tests/test-wireproto-serverreactor.py
--- a/tests/test-wireproto-serverreactor.py
+++ b/tests/test-wireproto-serverreactor.py
@@ -27,25 +27,31 @@
 header.flags,
 payload))
 
-def sendcommandframes(reactor, rid, cmd, args, datafh=None):
+def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
 """Generate frames to run a command and send them to a reactor."""
 return sendframes(reactor,
-  framing.createcommandframes(rid, cmd, args, datafh))
+  framing.createcommandframes(stream, rid, cmd, args,
+  datafh))
 
 class FrameTests(unittest.TestCase):
 def testdataexactframesize(self):
 data = util.bytesio(b'x' * framing.DEFAULT_MAX_FRAME_SIZE)
 
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command',
+  {}, data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % data.getvalue()),
 ffs(b'1 command-data eos ')
 ])
 
 def testdatamultipleframes(self):
 data = util.bytesio(b'x' * (framing.DEFAULT_MAX_FRAME_SIZE + 1))
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {},
+  data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % (
@@ -56,7 +62,8 @@
 def testargsanddata(self):
 data = util.bytesio(b'x' * 100)
 
-frames = list(framing.createcommandframes(1, b'command', {
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {
 b'key1': b'key1value',
 b'key2': b'key2value',
 b'key3': b'key3value',
@@ -75,59 +82,63 @@
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 formatting'):
 args = [b'x' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', args, [])]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', args, [])]))
 
 def testtextoutputexcessivelabels(self):
 """At most 255 labels are allowed."""
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 labels'):
 labels = [b'l' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', [], labels)]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', [], labels)]))
 
 def testtextoutputformattingstringtype(self):
 """Formatting string must be bytes."""
 with self.assertRaisesRegexp(ValueError, 'must use bytes formatting '):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo'.decode('ascii'), [], [])]))
 
 def testtextoutputargumentbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for 
argument'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [b'foo'.decode('ascii')], [])]))
 
 def testtextoutputlabelbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for labels'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [], [b'foo'.decode('ascii')])]))
 
 def testtextoutputtoolongformatstring(self):
 with self.assertRaisesRegexp(ValueError,
  'formatting string cannot be longer 
than'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'x' * 65536, [], [])]))
 
 def testtextoutputtoolongargumentstring(self):
 with self.assertRaisesRegexp(ValueError,
  'argument string cannot be longer than'):
-

D2906: wireproto: start to associate frame generation with a stream

2018-03-26 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 7324.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2906?vs=7307=7324

REVISION DETAIL
  https://phab.mercurial-scm.org/D2906

AFFECTED FILES
  mercurial/wireprotoframing.py
  mercurial/wireprotoserver.py
  tests/test-wireproto-serverreactor.py

CHANGE DETAILS

diff --git a/tests/test-wireproto-serverreactor.py 
b/tests/test-wireproto-serverreactor.py
--- a/tests/test-wireproto-serverreactor.py
+++ b/tests/test-wireproto-serverreactor.py
@@ -27,25 +27,31 @@
 header.flags,
 payload))
 
-def sendcommandframes(reactor, rid, cmd, args, datafh=None):
+def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
 """Generate frames to run a command and send them to a reactor."""
 return sendframes(reactor,
-  framing.createcommandframes(rid, cmd, args, datafh))
+  framing.createcommandframes(stream, rid, cmd, args,
+  datafh))
 
 class FrameTests(unittest.TestCase):
 def testdataexactframesize(self):
 data = util.bytesio(b'x' * framing.DEFAULT_MAX_FRAME_SIZE)
 
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command',
+  {}, data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % data.getvalue()),
 ffs(b'1 command-data eos ')
 ])
 
 def testdatamultipleframes(self):
 data = util.bytesio(b'x' * (framing.DEFAULT_MAX_FRAME_SIZE + 1))
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {},
+  data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % (
@@ -56,7 +62,8 @@
 def testargsanddata(self):
 data = util.bytesio(b'x' * 100)
 
-frames = list(framing.createcommandframes(1, b'command', {
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {
 b'key1': b'key1value',
 b'key2': b'key2value',
 b'key3': b'key3value',
@@ -75,59 +82,63 @@
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 formatting'):
 args = [b'x' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', args, [])]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', args, [])]))
 
 def testtextoutputexcessivelabels(self):
 """At most 255 labels are allowed."""
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 labels'):
 labels = [b'l' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', [], labels)]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', [], labels)]))
 
 def testtextoutputformattingstringtype(self):
 """Formatting string must be bytes."""
 with self.assertRaisesRegexp(ValueError, 'must use bytes formatting '):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo'.decode('ascii'), [], [])]))
 
 def testtextoutputargumentbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for 
argument'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [b'foo'.decode('ascii')], [])]))
 
 def testtextoutputlabelbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for labels'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [], [b'foo'.decode('ascii')])]))
 
 def testtextoutputtoolongformatstring(self):
 with self.assertRaisesRegexp(ValueError,
  'formatting string cannot be longer 
than'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'x' * 65536, [], [])]))
 
 def testtextoutputtoolongargumentstring(self):
 with self.assertRaisesRegexp(ValueError,
  'argument string cannot be longer than'):
-

D2906: wireproto: start to associate frame generation with a stream

2018-03-26 Thread indygreg (Gregory Szorc)
indygreg updated this revision to Diff 7307.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2906?vs=7166=7307

REVISION DETAIL
  https://phab.mercurial-scm.org/D2906

AFFECTED FILES
  mercurial/wireprotoframing.py
  mercurial/wireprotoserver.py
  tests/test-wireproto-serverreactor.py

CHANGE DETAILS

diff --git a/tests/test-wireproto-serverreactor.py 
b/tests/test-wireproto-serverreactor.py
--- a/tests/test-wireproto-serverreactor.py
+++ b/tests/test-wireproto-serverreactor.py
@@ -27,25 +27,31 @@
 header.flags,
 payload))
 
-def sendcommandframes(reactor, rid, cmd, args, datafh=None):
+def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
 """Generate frames to run a command and send them to a reactor."""
 return sendframes(reactor,
-  framing.createcommandframes(rid, cmd, args, datafh))
+  framing.createcommandframes(stream, rid, cmd, args,
+  datafh))
 
 class FrameTests(unittest.TestCase):
 def testdataexactframesize(self):
 data = util.bytesio(b'x' * framing.DEFAULT_MAX_FRAME_SIZE)
 
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command',
+  {}, data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % data.getvalue()),
 ffs(b'1 command-data eos ')
 ])
 
 def testdatamultipleframes(self):
 data = util.bytesio(b'x' * (framing.DEFAULT_MAX_FRAME_SIZE + 1))
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {},
+  data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % (
@@ -56,7 +62,8 @@
 def testargsanddata(self):
 data = util.bytesio(b'x' * 100)
 
-frames = list(framing.createcommandframes(1, b'command', {
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {
 b'key1': b'key1value',
 b'key2': b'key2value',
 b'key3': b'key3value',
@@ -75,59 +82,63 @@
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 formatting'):
 args = [b'x' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', args, [])]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', args, [])]))
 
 def testtextoutputexcessivelabels(self):
 """At most 255 labels are allowed."""
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 labels'):
 labels = [b'l' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', [], labels)]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', [], labels)]))
 
 def testtextoutputformattingstringtype(self):
 """Formatting string must be bytes."""
 with self.assertRaisesRegexp(ValueError, 'must use bytes formatting '):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo'.decode('ascii'), [], [])]))
 
 def testtextoutputargumentbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for 
argument'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [b'foo'.decode('ascii')], [])]))
 
 def testtextoutputlabelbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for labels'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [], [b'foo'.decode('ascii')])]))
 
 def testtextoutputtoolongformatstring(self):
 with self.assertRaisesRegexp(ValueError,
  'formatting string cannot be longer 
than'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'x' * 65536, [], [])]))
 
 def testtextoutputtoolongargumentstring(self):
 with self.assertRaisesRegexp(ValueError,
  'argument string cannot be longer than'):
-

D2906: wireproto: start to associate frame generation with a stream

2018-03-20 Thread indygreg (Gregory Szorc)
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  An upcoming commit will introduce "streams" into the frame-based wire
  protocol. In preparation for this invasive change, we introduce a basic
  "stream" class and have all operations that create frames also operate
  alongside a stream instance.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2906

AFFECTED FILES
  mercurial/wireprotoframing.py
  mercurial/wireprotoserver.py
  tests/test-wireproto-serverreactor.py

CHANGE DETAILS

diff --git a/tests/test-wireproto-serverreactor.py 
b/tests/test-wireproto-serverreactor.py
--- a/tests/test-wireproto-serverreactor.py
+++ b/tests/test-wireproto-serverreactor.py
@@ -27,25 +27,31 @@
 header.flags,
 payload))
 
-def sendcommandframes(reactor, rid, cmd, args, datafh=None):
+def sendcommandframes(reactor, stream, rid, cmd, args, datafh=None):
 """Generate frames to run a command and send them to a reactor."""
 return sendframes(reactor,
-  framing.createcommandframes(rid, cmd, args, datafh))
+  framing.createcommandframes(stream, rid, cmd, args,
+  datafh))
 
 class FrameTests(unittest.TestCase):
 def testdataexactframesize(self):
 data = util.bytesio(b'x' * framing.DEFAULT_MAX_FRAME_SIZE)
 
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command',
+  {}, data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % data.getvalue()),
 ffs(b'1 command-data eos ')
 ])
 
 def testdatamultipleframes(self):
 data = util.bytesio(b'x' * (framing.DEFAULT_MAX_FRAME_SIZE + 1))
-frames = list(framing.createcommandframes(1, b'command', {}, data))
+
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {},
+  data))
 self.assertEqual(frames, [
 ffs(b'1 command-name have-data command'),
 ffs(b'1 command-data continuation %s' % (
@@ -56,7 +62,8 @@
 def testargsanddata(self):
 data = util.bytesio(b'x' * 100)
 
-frames = list(framing.createcommandframes(1, b'command', {
+stream = framing.stream()
+frames = list(framing.createcommandframes(stream, 1, b'command', {
 b'key1': b'key1value',
 b'key2': b'key2value',
 b'key3': b'key3value',
@@ -75,59 +82,63 @@
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 formatting'):
 args = [b'x' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', args, [])]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', args, [])]))
 
 def testtextoutputexcessivelabels(self):
 """At most 255 labels are allowed."""
 with self.assertRaisesRegexp(ValueError,
  'cannot use more than 255 labels'):
 labels = [b'l' for i in range(256)]
-list(framing.createtextoutputframe(1, [(b'bleh', [], labels)]))
+list(framing.createtextoutputframe(None, 1,
+   [(b'bleh', [], labels)]))
 
 def testtextoutputformattingstringtype(self):
 """Formatting string must be bytes."""
 with self.assertRaisesRegexp(ValueError, 'must use bytes formatting '):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo'.decode('ascii'), [], [])]))
 
 def testtextoutputargumentbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for 
argument'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [b'foo'.decode('ascii')], [])]))
 
 def testtextoutputlabelbytes(self):
 with self.assertRaisesRegexp(ValueError, 'must use bytes for labels'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [
 (b'foo', [], [b'foo'.decode('ascii')])]))
 
 def testtextoutputtoolongformatstring(self):
 with self.assertRaisesRegexp(ValueError,
  'formatting string cannot be longer 
than'):
-list(framing.createtextoutputframe(1, [
+list(framing.createtextoutputframe(None, 1, [