summaryrefslogtreecommitdiff
path: root/crates
Commit message (Collapse)AuthorAgeFilesLines
...
* Change how TestingStateMgr handles locking.Nick Mathewson2021-11-031-43/+80
| | | | | | Previously it was either all-locked or all-not-locked. Now you can simulate having the same shared storage opened by multiple managers, only one of which has the lock.
* tor-proto: Use a dedicated sender for channel cells, make full-duplexeta2021-11-032-47/+105
| | | | | | | | | | | | | | | | @nickm pointed out that refactoring tor_proto::channel's Reactor to do sending as well meant that it could only send or receive, but not both, simultaneously, which was bad! To fix this, rewrite Reactor::run_once to use a handcrafted future (with futures::future::poll_fn) that can handle the logic required to push items onto the sink asynchronously (i.e. checking that it can be written to before trying to do that, and then flushing it). This also means we don't use select_biased! any more, and just handroll that logic ourselves; as a small bonus, we can now process all 3 kinds of message in one run_once() call, instead of having to do only one of them.
* Get rid of tor-proto's ChannelImpl, and use the reactor more insteadeta2021-11-0310-347/+268
| | | | | | | | | | | | | | | | | | | Instead of awkwardly sharing the internals of a `tor-proto` `Channel` between the reactor task and any other tasks, move most of the internals into the reactor and have other tasks communicate with the reactor via message-passing to allocate circuits and send cells. This makes a lot of things simple, and has convenient properties like not needing to wrap the `Channel` in an `Arc` (though some places in the code still do this for now). A lot of test code required tweaking in order to deal with the refactor; in fact, fixing the tests probably took longer than writing the mainline code (!). Importantly, we now use `tokio`'s `tokio::test` annotation instead of `async_test`, so that we can run things in the background (which is required to have reactors running for the circuit tests). This is an instance of #205, and also kind of #217.
* Disable a check in exitpathNick Mathewson2021-11-021-1/+2
| | | | | This check relies on families being enforced correctly, which is not the case when specifying a fixed exit and using guards. (See #183)
* Allow clone-on-copy in tor-circmgr tests to fix a nightly-only clippy warning.Nick Mathewson2021-11-022-0/+2
|
* Merge branch 'bug219'Nick Mathewson2021-11-023-63/+28
|\
| * Refactor tor-guardmgr's inter-task communication.Nick Mathewson2021-11-023-63/+28
| | | | | | | | | | | | | | | | | | This is based on @eta's patches for !118 and !119: Since we already have an unbounded channel, we don't need to use an elaborate mess of one-shot senders. We can just use the unbounded_send() method, which also lets us enqueue a message without having to await. Closes #219.
* | tor-circmgr: test ExitPathBuilder with guards.Nick Mathewson2021-11-024-0/+115
| |
* | tor-circmgr: test DirPathBuilder with GuardMgr.Nick Mathewson2021-11-023-1/+43
| |
* | tor-circmgr: testing for NoUsage and TimeoutTesting usageNick Mathewson2021-11-021-0/+24
| | | | | | | | This doesn't add much to coverage, but it's important.
* | Merge branch 'timestamp'Nick Mathewson2021-11-0211-47/+272
|\ \
| * | Add a comment to explain the computation of net_has_been_down.Nick Mathewson2021-11-021-0/+5
| | |
| * | tor-guardmgr: Add tests for a few functions.Nick Mathewson2021-11-022-0/+57
| | |
| * | Mark primary guards as retriable when we come back online.Nick Mathewson2021-11-024-47/+64
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We define "coming back online" as happening when a guard attempt succeeds, if that attempt that was launched when we seemed to be offline. We define "seeming to be offline" as having all of our primary guards marked unreachable, and having received no incoming network traffic in a while. Closes #216.
| * | Use coarsetime to build an incoming traffic timestamp.Nick Mathewson2021-11-026-0/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We need this for the circuit timeout estimator (#57). It needs to know "how recently have we got some incoming traffic", so that it can tell whether a circuit has truly timed out, or whether the entire network is down. I'm implementing this with coarsetime, since we need to update these in response to every single incoming cell, and we need the timestamp operation to be _fast_. (This reinstates an earlier commit, f30b2280, which I reverted because we didn't need it at the time.) Closes #179.
* | | Merge remote-tracking branch 'origin/mr/119'Nick Mathewson2021-11-022-85/+31
|\ \ \ | |_|/ |/| |
| * | Refactor tor_proto::circuit::Reactor to use an UnboundedSendereta2021-11-022-85/+31
| | | | | | | | | | | | | | | | | | | | | | | | Basically the same thing as 371437d3384ed73520e7141e66874be3d85f1df0 ("Refactor tor_proto::channel::Reactor to use an UnboundedSender"), but for tor_proto::circuit's Reactor instead. (part of arti#217)
* | | tor-circmgr: tests for netwoks with no exitsNick Mathewson2021-11-022-25/+76
|/ /
* | Merge remote-tracking branch 'origin/mr/118'Nick Mathewson2021-11-022-78/+32
|\ \
| * | Refactor tor_proto::channel::Reactor to use an UnboundedSendereta2021-11-022-78/+32
| |/ | | | | | | | | | | | | | | | | | | | | There wasn't any good reason for tor-proto's channel reactor to use a shedload of oneshot channels instead of just an mpsc UnboundedSender, and the whole `CtrlResult` thing made even less sense. Straighten this code out by replacing all of that machinery with a simple UnboundedSender, instead. (part of arti#218)
* | Remove some dbg!() calls in real code.Nick Mathewson2021-11-023-4/+1
| |
* | tor-circmgr::usage: Add a few more tests.Nick Mathewson2021-11-021-2/+66
|/
* tor-persist: serde usage now requires derive feature.Nick Mathewson2021-10-291-2/+1
|
* Bump all crate versions to 0.0.1Nick Mathewson2021-10-2926-123/+123
|
* Update README.md filesNick Mathewson2021-10-291-6/+10
|
* Merge remote-tracking branch 'origin/mr/112'Nick Mathewson2021-10-294-31/+130
|\
| * Improve docs of more (potentially re-exported) arti-client typeseta2021-10-294-31/+130
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Most of the structs in `arti-client` have example code now, to give a clearer idea of how they're used. Annoyingly, a lot of the types exposed in `arti-client` are actually re-exports, which makes documentation a bit harder: example code that references other parts of `arti-client` can't actually be run as a doctest, since the crate it's in is a dependency of `arti-client`. We might be able to fix this in future by doing the documentation in `arti-client` itself, but rustdoc seems to have some weird behaviours there that need to be investigated first (for example, it seems to merge the re-export and original documentation, and also put the re-export documentation on the `impl` block for some reason). For now, though, this commit just writes the docs from the point of view of an `arti-client` consumer, removing notes specific to the crate in which they're defined. It's not ideal, but at least the end user experience is decent.
* | Improve some documentation linksNick Mathewson2021-10-296-13/+15
|/ | | | | | | | | Instead of putting a fully qualified name in the text, in most cases we should just use the short name of the type or function we're referring to. In other words, instead of saying [`crate::module::Foo`], we should typically say [`Foo`](crate::module::Foo).
* Try writing a bit more documentation for configuration types.Nick Mathewson2021-10-283-11/+62
|
* Use correct link for AsyncWriteExt::flushNick Mathewson2021-10-281-1/+1
|
* Typo fix in an expect() message.Nick Mathewson2021-10-281-1/+1
|
* Encourage the use of TorClient::clone().Nick Mathewson2021-10-281-1/+2
|
* DataStream: document the importance of flush().Nick Mathewson2021-10-281-3/+12
|
* arti-client example: Try to make the comments a little more clear.Nick Mathewson2021-10-281-6/+10
| | | | | I'm not 100% sure this is better, but it might help the user understand how Arti works a bit better.
* Update README.md filesNick Mathewson2021-10-282-19/+95
|
* Merge remote-tracking branch 'origin/mr/111'Nick Mathewson2021-10-283-16/+146
|\
| * Improve top-level arti-client documentation, add example codeeta2021-10-283-16/+146
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This overhauls the top-level `arti-client` documentation significantly: - the "Using arti-client" section walks the user through all of the necessary steps to initiate a Torified TCP connection, and then provides a code example - this example is also available as `examples/readme.rs`; it's not run as a doctest, since it involves connecting to Tor - a "More advanced usage" subheading provides information about stream isolation (and can potentially be used for other interesting features once we get them). - a new "Multiple runtime support" section was added to explain the purpose and usage of the `tor-rtcompat` crate - the section on design and privacy considerations was removed; this is probably okay to keep in a README, but users of the crate aren't going to be interested in this (at least I don't think) (also, the doc comment for `arti_client::Error` was fixed to make actual sense)
* | Oops: add missing data filesNick Mathewson2021-10-282-0/+109
| |
* | tor-dirmgr: tests for GetMicrodescsStateNick Mathewson2021-10-281-0/+100
| |
* | tor-dirmgr: tests for download schedules.Nick Mathewson2021-10-281-0/+23
| |
* | tor-chanmgr: remove PendingChanError as unnecessary.Nick Mathewson2021-10-282-37/+6
| |
* | Merge branch 'test_dirmgr'Nick Mathewson2021-10-285-3/+515
|\ \
| * | tor-dirmgr: Test for GetCertsStateNick Mathewson2021-10-284-5/+253
| | |
| * | tor-dirmgr: Tests for GetConsensusState.Nick Mathewson2021-10-282-0/+242
| | | | | | | | | | | | | | | | | | This test uses a consensus that I've copied from tor-netdoc/testdata. I would include it directly, but I think that will cause trouble when it comes time to run "cargo package".
| * | tor-dirmgr::state: Mock the view of current time.Nick Mathewson2021-10-281-3/+25
| |/ | | | | | | | | This will let us test the state processing code without having to give it up-to-date directory objects.
* | Fix clippy warnings in tests.Nick Mathewson2021-10-281-5/+5
| |
* | Merge remote-tracking branch 'origin/mr/110'Nick Mathewson2021-10-281-136/+233
|\ \
| * | tor_circmgr: Refactor and re-enable build_timeout() testNick Mathewson2021-10-271-136/+233
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The previous version of this test used the old, racy version of wait_for (see #149). The new version is refactored so that simulated time is only allowed to advance after each step is done, so that we can actually be sure that each step in the process will happen as it should. In order to get the time-advances to proceed properly, and avoid polluting state between tests, I've had to introduce some machinery to encode the proper amount for time to advance. It isn't something I'd want to use for a whole bunch of tests, but for just one set, it's fine. These tests now pass reliably for me. I wonder if a discrete-event-simulation approach (hello, Shadow) would let us write tests like these to our hearts' content?
* / Mark request_retried test as ignoredNick Mathewson2021-10-281-0/+1
|/
* Upgrade to fslock version 0.2Nick Mathewson2021-10-274-4/+4
| | | | | This version makes all locks per-handle rather than per-process, by moving from lockf() to flock() on unix.