Commit Graph

2355 Commits

Author SHA1 Message Date
Nick Mathewson 24b6a2455d Document that the "experimental-api" feature is not semver-covered. 2021-11-11 10:44:24 -05:00
Nick Mathewson a940679672 Document that the "testing" feature is not semver-covered. 2021-11-11 10:38:23 -05:00
Nick Mathewson b7b9aa854e Add a file to track per-crate semver status. 2021-11-11 10:35:38 -05:00
Nick Mathewson 4717bb270f Tests for tor-dirmgr::bootstrap 2021-11-11 08:58:48 -05:00
Nick Mathewson 3609aff10e Minor tests for DirMgr::query_into_requests 2021-11-11 07:31:23 -05:00
Nick Mathewson 5287ac1858 Merge IpVersionPreferences and the optimistic flag into one type.
It seems like a good time to do this, before we add a zillion other
arguments to begin_stream.
2021-11-10 11:04:55 -05:00
Nick Mathewson 428b19c121 Refactor wait_for_connection a bit.
* Make it crate-visible only.
* Make it idempotent
* Have it be an internal error if it's called at the wrong time.
* Simplify the return logic.
2021-11-10 10:33:31 -05:00
Nick Mathewson 94950468dd Merge remote-tracking branch 'origin/mr/116' 2021-11-10 10:23:29 -05:00
Nick Mathewson 82120aff6b Require consensus-diff line 2 to start with "hash "
Previously we didn't check for the space.

Closes #225.
2021-11-10 09:34:38 -05:00
Nick Mathewson 585c6c4f9e tor-dirmgr: tests for making and expanding consensus requests. 2021-11-10 09:04:21 -05:00
Nick Mathewson 248aca98f1 tor-dirmgr: Tests for high-level loading functions. 2021-11-10 08:18:30 -05:00
Yuan Lyu 7f799c956b Implement optimistic stream 2021-11-09 21:36:12 -05:00
Nick Mathewson e97804b3d4 Merge branch 'binary_size_script' 2021-11-09 12:15:49 -05:00
Nick Mathewson 3715e0db3c Add a shell script to find binary size and download size.
It formats them in a nice little json object, which it writes to
stdout.

Part of arti#172
2021-11-09 12:11:20 -05:00
eta 6b2530d81b Merge branch 'S0AndS0/arti-cargo-husky' into HEAD 2021-11-09 12:59:32 +00:00
eta 022371585d Merge branch 'binary_size' into 'main'
Tune the 'profile.release' options for a smaller compile size.

See merge request tpo/core/arti!124
2021-11-09 12:54:34 +00:00
Nick Mathewson c7c3af60cd Remove doubly incorrect entry from WANT_FROM_OTHER_CRATES 2021-11-08 16:11:27 -05:00
Nick Mathewson ee030260fb Add a couple of pieces of missing documentation. 2021-11-08 16:06:08 -05:00
Nick Mathewson 487524c022 Tune the 'profile.release' options for a smaller compile size.
By enabling link-time optimization, setting 'opt-level=s', and
setting compilation-units=1, we can get a much smaller download
size, which is one of our objectives.

Making these changes reduces the binary size for me (on x86_64) by about
42%.  If you also run "strip --strip-debug" on the resulting binary,
the resulting size is 55% smaller than the original binary size.

These effects persist if you compress the binary.  Supposing that we
use xz compression, these options make save 32% of compressed binary
size. If we also "strip --strip-debug" before compressing, the compressed
binary saves 43% from the original binary size.

With all of these options applied, on x86_64 linux with xz
compression, we're at a nice 1.5 MiB download.  If we statically link
to openssl and sqlite, we're still only at a 2.8 MiB download.

There is a build time cost to these changes: for me, it comes to
a 10%-25% build time increase.

This is part of arti#172.
2021-11-08 14:33:10 -05:00
Nick Mathewson 6899b2599b More tests on tor-dirmgr::state
These test our download schedules, resetting to the original state,
and storing downloaded objects.
2021-11-08 08:21:44 -05:00
eta 19693899d8 Merge branch 'ci-no-printf' into 'main'
In rust-nightly CI, forbid debugging prints.

Closes #218

See merge request tpo/core/arti!123
2021-11-05 11:26:46 +00:00
Nick Mathewson f8ac5d0742 Merge branch 'osx_sdk_10.12' 2021-11-04 11:26:59 -04:00
Nick Mathewson 3ff1561c25 Update reproducible_build.sh to use OSX SDK 10.12
We need this for clock_gettime_nsec_np().

The source is not canonical, but neither was the one we were using
before. To mitigate this, I've added a digest check on the SDK after
downloading it.

A 100% real canonical reproducible build process will probably
require Apple hardware anyway.

Closes #221
2021-11-04 11:23:59 -04:00
Nick Mathewson 753cbc9626 In rust-nightly CI, forbid debugging prints.
This patch makes the rust-nightly CI task fail if it detects any
dbg!(), println!(), or eprintln!() calls in production code.

Because of clippy limitations, it may also gripe about calls to
these macros in our tests.  The preferred workarounds are to either
instead.  Both are acceptable.

We're doing this check in CI rather than unconditionally with clippy
directives, since we often want to have these calls in our code
temporarily while we're developing.  Some day we might want this
test to go into a pre-push hook.

This patch also adds #![allow()] directives for println!() and
eprintln!() in the arti crate.  Since that one isn't a library, it's
okay for it to speak to stdout/stderr.

Closes #218.
2021-11-04 11:13:29 -04:00
Nick Mathewson 8833f7a3a2 Remove one more test println!(). 2021-11-04 11:11:26 -04:00
Nick Mathewson 83d9f2299e Replace all println/eprintln calls outside of arti CLI with trace. 2021-11-04 11:04:59 -04:00
Nick Mathewson dae8cdb463 Remove all remaining dbg! instances. 2021-11-04 10:54:47 -04:00
Nick Mathewson e3f8a9f94f tor-dirmgr: tests for docid module. 2021-11-04 09:47:13 -04:00
Nick Mathewson cb63449aeb Basic tests for readonly estimators, and estimator migration.
Also add a comment about a possible problem behavior in read-only
estimators.
2021-11-03 13:58:51 -04:00
Nick Mathewson 619ae65064 Change how TestingStateMgr handles locking.
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.
2021-11-03 13:27:01 -04:00
eta db6b91164e tor-proto: Use a dedicated sender for channel cells, make full-duplex
@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.
2021-11-03 16:48:54 +00:00
eta e8e9699c3c Get rid of tor-proto's ChannelImpl, and use the reactor more instead
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.
2021-11-03 13:19:45 +00:00
Nick Mathewson 03cf83b2cc Disable a check in exitpath
This check relies on families being enforced correctly, which is not
the case when specifying a fixed exit and using guards.  (See #183)
2021-11-02 16:43:58 -04:00
Nick Mathewson b9849788cd Allow clone-on-copy in tor-circmgr tests to fix a nightly-only clippy warning. 2021-11-02 16:17:51 -04:00
Nick Mathewson b0265c490e Merge branch 'bug219' 2021-11-02 15:32:44 -04:00
Nick Mathewson 78fbb141be tor-circmgr: test ExitPathBuilder with guards. 2021-11-02 14:17:18 -04:00
Nick Mathewson 3b41933b67 tor-circmgr: test DirPathBuilder with GuardMgr. 2021-11-02 13:50:08 -04:00
Nick Mathewson ad132602ae tor-circmgr: testing for NoUsage and TimeoutTesting usage
This doesn't add much to coverage, but it's important.
2021-11-02 13:30:04 -04:00
Nick Mathewson 656a8e5f48 Merge branch 'timestamp' 2021-11-02 12:17:15 -04:00
Nick Mathewson b2567a6d88 Add a comment to explain the computation of net_has_been_down. 2021-11-02 12:17:11 -04:00
Nick Mathewson c979a2f83a tor-guardmgr: Add tests for a few functions. 2021-11-02 12:17:11 -04:00
Nick Mathewson 876a569f6c Mark primary guards as retriable when we come back online.
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.
2021-11-02 12:17:11 -04:00
Nick Mathewson dddf67a902 Use coarsetime to build an incoming traffic timestamp.
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.
2021-11-02 12:17:11 -04:00
Nick Mathewson b0df80dae4 Merge remote-tracking branch 'origin/mr/119' 2021-11-02 11:27:01 -04:00
Nick Mathewson 453855693b Refactor tor-guardmgr's inter-task communication.
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.
2021-11-02 11:19:57 -04:00
Nick Mathewson 5b1b87c896 tor-circmgr: tests for netwoks with no exits 2021-11-02 10:58:28 -04:00
eta 2979bb22a2 Refactor tor_proto::circuit::Reactor to use an UnboundedSender
Basically the same thing as 371437d338
("Refactor tor_proto::channel::Reactor to use an UnboundedSender"), but
for tor_proto::circuit's Reactor instead.

(part of arti#217)
2021-11-02 14:26:25 +00:00
Nick Mathewson 118fddb15f Merge remote-tracking branch 'origin/mr/118' 2021-11-02 10:14:58 -04:00
eta 371437d338 Refactor tor_proto::channel::Reactor to use an UnboundedSender
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)
2021-11-02 14:02:58 +00:00
Nick Mathewson cdae4c033c Remove some dbg!() calls in real code. 2021-11-02 09:50:55 -04:00