Commit Graph

279 Commits

Author SHA1 Message Date
Eliza Weisman
2e3dcf602c StreamRef sends RST_STREAM on drop (#109)
This PR modifies the `Drop` implementation for `StreamRef` to reset the underlying stream if it is the last reference to that stream. Since both `Stream` and `Body` are internally just a `StreamRef`, this means they will both reset the stream on drop; thus, this closes #100.

The assertion that the store no longer contains the dropped stream ID at the end of the `Drop` method  had to be removed, as the stream has to be reset from inside of a `transition` block (which now manages releasing that ID for us), and the `transition` closure moves the value of `stream`, making the assertion no longer possible.

Modifications to some of the tests in `flow_control.rs` were also necessary, in order to prevent `StreamRef`s from being dropped too early.
2017-10-05 18:05:18 -05:00
Sean McArthur
ecd2764f4b when receiving a GOAWAY, allow earlier streams to still process (#133)
Once all active streams have finished, send a GOAWAY back and close the
connection.
2017-10-05 15:32:13 -07:00
Sean McArthur
c4ca8f7def Client::poll_ready and send_request may return Connection Errors (#132)
Closes #131
2017-10-04 15:22:10 -07:00
Sean McArthur
9e1a0c63cf add send_reset to client::Stream (#127)
Closes #99
2017-09-29 11:37:23 -07:00
Sean McArthur
f8efb053b9 split Client into (Client, Connection) (#107)
The Connection type is a `Future` that drives all of the IO of the
client connection.

The Client type is separate, and is used to send requests into the
connection.
2017-09-28 16:55:12 -07:00
Sean McArthur
510800ef28 remove rustfmt from CI while its unstable (#126) 2017-09-28 16:27:24 -07:00
Eliza Weisman
307ad46ead Set codecov pass threshold to 5% (#124) 2017-09-28 10:55:29 -07:00
Eliza Weisman
c1fbabf686 Make CI build flatter (and therefore faster) (#123)
Now with a fancier script for running h2spec
will ensure that the server executable is killed when h2spec finishes,
de-interleaves h2spec & example server stdout
2017-09-27 14:20:08 -07:00
Eliza Weisman
a54b89a84f Run h2spec on CI (#121) 2017-09-26 12:41:59 -07:00
Oliver Gould
0b289fd55d Fix stream-id double-accounting bug (#112)
Both Recv::open and Rev::recv_headers check new stream ids against the
previously stream id. The second such check fails.

Now, only Recv::open performs stream id checks.

Fixes #110
2017-09-26 10:42:12 -07:00
Carl Lerche
8911ee2a4b Remove h2-test-support crate (#119)
The h2-test-support caused the unstable flag to always be enabled.
2017-09-25 22:28:39 -07:00
Oliver Gould
549d96a36b Only run tests once in CI (#117)
* Only run tests once in CI

We run codecov after successful test runs. This ~doubles the length of
CI jobs, sicne the codecov run reproduces nearly all tests.

To avoid this, we just run the codecov tests as part of our normal test
script.

* s/before_script/install

* only publish coverage after test completes

* run all tests for coverage

* remove hpack from coverage

* fix tyop

* cargo clean
2017-09-25 16:39:55 -07:00
Oliver Gould
4f4fa3ea52 Update so dependents can compile (#111)
Add missing `unstable` flag to fns.
2017-09-25 14:07:31 -07:00
Oliver Gould
b99c513334 Apply rustfmt to test/support crate (#116) 2017-09-25 08:29:54 -07:00
Oliver Gould
dad113e17b Disallow nightly failures (#115)
Always install rustfmt since nightly may change underneath it, causing
linking to break.

Apply rustfmt
2017-09-24 19:25:50 -07:00
Eliza Weisman
a72a6bc8f0 Rewrite flow control tests to use newer mock API (#108)
I've rewritten the tests `flow_control::stream_close_by_data_frame_releases_capacity()` and `flow_control::stream_close_by_trailers_frame_releases_capacity()` to use the new mock API. This will make modifying these tests a bit easier in order to expect the correct behavior in my reset-on-drop branch.
2017-09-21 12:58:50 -05:00
Sean McArthur
6ec7f38cd7 add test for client sending over max concurrent limit (#105) 2017-09-19 15:31:35 -07:00
Sean McArthur
db8c109817 Client::poll_ready() returns an Error if next stream ID would overflow (#103)
Closes #102
2017-09-19 14:16:32 -07:00
Sean McArthur
0c8bd75224 check for StreamId overflow (#68) 2017-09-19 13:10:48 -07:00
Carl Lerche
e049dcb62b Rename Client::request -> send_request (#98)
All other fns have a send prefix.
2017-09-18 21:22:15 -07:00
Eliza Weisman
9812894709 Add fixtures, examples, util, and src/hpack/test to Codecov ignore list (#96)
We don't care about covering code in these directories, so exclude them from test coverage.
2017-09-18 15:02:18 -05:00
Sean McArthur
71b246a0fb Merge pull request #91 from seanmonstar/config-push-promise
add Client config to disable server push
2017-09-18 11:16:49 -07:00
Sean McArthur
21f7e54ce8 load headers when receiving PushPromise frames 2017-09-18 10:49:35 -07:00
Sean McArthur
a8a4cd2be1 add Client config to disable server push
- Adds `Client::builder().enable_push(false)` to disable push
- Client sends a GO_AWAY if receiving a push when it's disabled
2017-09-18 10:49:35 -07:00
Sean McArthur
ed4e67c1a4 Merge pull request #93 from seanmonstar/codec-unstable
remove unstable for Codec methods used internally
2017-09-18 10:03:58 -07:00
Sean McArthur
92030f634f remove unstable for Codec methods used internally 2017-09-17 14:28:45 -07:00
Oliver Gould
1022e04276 Merge pull request #94 from carllerche/ver/clone-builders
Derive Clone for Builder types
2017-09-17 14:15:24 -07:00
Oliver Gould
303b896095 Derive Clone for Builder types 2017-09-17 20:38:55 +00:00
Sean McArthur
a8e117d09f Merge pull request #88 from seanmonstar/config-max-frame-size
Configure max frame size
2017-09-14 17:29:49 -07:00
Sean McArthur
c32015d48e add support for configuring max frame size
- Adds `max_frame_size` to client and server builders
- Pushes max_frame_size into Codec
- Detects when the Codec triggers an error from a frame too big
- Sends a GOAWAY when FRAME_SIZE_ERROR is encountered reading a frame
2017-09-14 17:03:43 -07:00
Sean McArthur
8984a46a92 Merge pull request #87 from seanmonstar/server-config
add Server Builder
2017-09-14 16:59:37 -07:00
Sean McArthur
7531e5276b add Server Builder 2017-09-14 16:36:51 -07:00
Eliza Weisman
e4b8dde1d3 Split Travis build into stages (#62)
Adds code coverage checking.
2017-09-14 16:33:34 -07:00
Carl Lerche
f84a1bdd1f Notify connection on connection window expansion (#86)
When capacity is released back to the connection and a connection level
window update needs to be sent out, the connection task needs to be
notified in order for the send to actually happen.
2017-09-14 13:50:52 -07:00
Sean McArthur
eaf4192838 Merge pull request #89 from mehcode/patch-1
Drive by spelling fix ( ugprade -> upgrade )
2017-09-13 21:32:38 -07:00
Ryan Leckey
76a2792d7d ugprade -> upgrade 2017-09-13 21:17:01 -07:00
Sean McArthur
dd6cac62e8 Merge pull request #79 from seanmonstar/client-config
Intial Client Configuration
2017-09-13 14:55:36 -07:00
Sean McArthur
3ec0e85e56 add test when stream window overflows before conn window 2017-09-13 14:32:27 -07:00
Sean McArthur
e2cda1860b fix Body to return errors when there is recv error 2017-09-13 14:32:27 -07:00
Sean McArthur
ed472f109c add client::Builder to configure Clients 2017-09-13 14:32:27 -07:00
Sean McArthur
d0afe30ab3 fix recv connection flow should always use default initial window size 2017-09-13 14:32:27 -07:00
Carl Lerche
b01e3dff12 Annotate unstable API fns with cfg 2017-09-13 14:14:41 -07:00
Sean McArthur
f7d14861e5 rustfmt: add trailing commas in match arms, set fn call to block stle (#85) 2017-09-12 19:29:06 -07:00
Oliver Gould
de1edf4873 Merge pull request #71 from carllerche/ver/rustfmt
Use rustfmt to enforce consistent formatting
2017-09-12 16:00:06 -07:00
Oliver Gould
897bf84163 Use rustfmt to enforce consistent formatting
This change adds a .rustfmt.toml that includes ALL supported settings,
12 of which we have overridden to attempt to cater to our own
proclivities.

rustfmt is checked in the rust-nightly CI job.
2017-09-12 22:29:35 +00:00
Carl Lerche
93925e6d1f Limit send flow control bug to window_size (#78)
Senders could set the available capacity greater than the current
`window_size`.  This caused a panic when the sender attempted
to send more than the receiver could accept.
2017-09-12 10:48:11 -07:00
Eliza Weisman
9448a19408 Factor out reset on RecvError::Stream (#76) 2017-09-11 13:07:37 -07:00
Eliza Weisman
11de86b34e Make Codec max frame length configurable (#57) 2017-09-11 12:56:40 -07:00
Sean McArthur
460afa41c8 Add connection window overflow test (#72) 2017-09-11 10:17:43 -07:00
Carl Lerche
5c0efcf8c4 Ref count stream state and release when final (#73)
Previously, stream state was never released so that long-lived connections
leaked memory.

Now, stream states are reference-counted and freed from the stream slab
when complete.  Locally reset streams are retained so that received frames
may be ignored.
2017-09-10 16:01:19 -07:00