Skip to content

Conversation

Teebor-Choka
Copy link
Contributor

@Teebor-Choka Teebor-Choka commented May 3, 2025

This pull request introduces several updates, primarily focused on upgrading dependencies in Cargo.toml and transitioning the codebase from async-std to tokio for asynchronous runtime. These changes aim to modernize the project, improve compatibility, and enhance performance. Below are the most significant changes grouped by theme:

Dependency Updates:

  • Updated multiple dependencies in Cargo.toml, including clap (4.5.36 → 4.5.37), ctor (0.4.1 → 0.4.2), rpassword (7.3.1 → 7.4.0), sea-query (0.32.3 → 0.32.4), and tokio (1.44.2 → 1.45.0). These updates ensure compatibility with newer versions and leverage bug fixes and optimizations. [1] [2] [3] [4] [5]

Transition to tokio Runtime:

  • Replaced all instances of async-std with tokio in test files, including the use of #[tokio::test] for asynchronous tests and tokio::task::spawn for task spawning. This change aligns the project with the more widely adopted tokio runtime. [1] [2] [3] [4]
  • Updated Makefile test command to use the runtime-tokio feature instead of runtime-async-std.
  • Removed the runtime-async-std feature and its associated dependencies from chain/actions/Cargo.toml. Added tokio as a development dependency. [1] [2]

Test Enhancements:

  • Replaced async_std::task::spawn with tokio::task::spawn and introduced tokio::time::timeout for better control over asynchronous operations in tests. This ensures that tests have a consistent timeout mechanism. [1] [2]
  • Updated delay logic in tests to use tokio::time::sleep instead of async_std::prelude::FutureExt::delay. [1] [2]

These changes collectively improve the project's maintainability, performance, and alignment with modern Rust ecosystem practices.

Copy link
Contributor

coderabbitai bot commented May 3, 2025

📝 Walkthrough
## Walkthrough

This change removes all support for the `async-std` asynchronous runtime and related libraries throughout the codebase, standardizing exclusively on the `tokio` runtime for all features, dependencies, and tests. All code, tests, and configuration files are updated to use `tokio` and its associated ecosystem, with related HTTP clients switched from `surf` to `reqwest`.

## Changes

| File(s) / Path(s)                                    | Change Summary |
|------------------------------------------------------|---------------|
| Cargo.toml, Makefile, nix/rust-package.nix           | Updated dependency versions, removed `async-std` feature flags, and standardized on `tokio` for testing and build scripts. |
| **chain/actions/\***, **chain/api/\***, **chain/indexer/\***, **chain/rpc/\*** | Removed `runtime-async-std` features, dependencies, and test attributes; switched all async runtime usage and HTTP clients in code and tests from `async-std`/`surf` to `tokio`/`reqwest`. |
| common/async-runtime/src/lib.rs                      | Deprecated the `runtime-async-std` prelude module and removed its conditional compilation in favor of always enabling the `tokio` prelude when the feature is active. |
| **common/network-types/\***                          | Removed all async-std-based DNS resolution and test code, eliminated `async-std` dependencies, and migrated all tests and async utilities to `tokio`. |
| **common/parallelize/Cargo.toml**, **crypto/packet/Cargo.toml**, **db/entity/Cargo.toml**, **db/migration/Cargo.toml**, **db/sql/Cargo.toml**, **hopli/Cargo.toml**, **hopr/hopr-lib/Cargo.toml**, **hoprd/db/api/Cargo.toml**, **hoprd/db/entity/Cargo.toml**, **hoprd/db/migration/Cargo.toml**, **hoprd/hoprd/Cargo.toml**, **hoprd/inbox/Cargo.toml**, **logic/path/Cargo.toml**, **logic/strategy/Cargo.toml**, **transport/api/Cargo.toml**, **transport/mixer/Cargo.toml**, **transport/network/Cargo.toml**, **transport/p2p/Cargo.toml**, **transport/protocol/Cargo.toml**, **transport/session/Cargo.toml**, **transport/ticket-aggregation/Cargo.toml** | Removed `async-std` and `runtime-async-std` features and dependencies from all crate manifests; replaced with `tokio` and `runtime-tokio` as appropriate. |
| **db/sql/src/\***, **hoprd/db/api/src/\***, **logic/strategy/src/\***, **transport/session/src/\***, **transport/protocol/src/\***, **transport/network/src/\***, **transport/mixer/src/\***, **transport/ticket-aggregation/src/\***, **crypto/packet/src/\***, **logic/path/src/\*** | Migrated all async test code and utilities from `async-std` to `tokio`, updated test attributes, task spawning, sleep, and timeout handling accordingly. |
| chain/rpc/src/client.rs                              | Removed the `surf_client` module and all usage of the `SurfRequestor` HTTP client; all HTTP client usage is now via `ReqwestRequestor`. |
| hopli/src/environment_config.rs, hopli/src/methods.rs, hopli/src/main.rs | Updated imports and runtime attributes to use `tokio` and `DefaultHttpRequestor` from the new source; migrated all async test code to `tokio`. |
| hopr/hopr-lib/tests/\*, hopr/hopr-lib/tests/common/mod.rs | Switched all test HTTP clients from `SurfRequestor` to `ReqwestRequestor`; updated test runtime attributes to `tokio`. |
| transport/p2p/src/swarm.rs                           | Removed async-std-specific swarm construction code; now always uses tokio-based swarm. |
| transport/p2p/tests/p2p_transport_test.rs            | Migrated all test runtime and utilities from `async-std` to `tokio`; updated join handle and task management accordingly. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant Test as Test Function
    participant Tokio as Tokio Runtime
    participant Reqwest as Reqwest HTTP Client
    participant App as Application Code

    Test->>Tokio: #[tokio::test] async fn test_...()
    Note right of Tokio: Test code runs in Tokio runtime
    Test->>Reqwest: Instantiate ReqwestRequestor
    Reqwest->>App: Make HTTP request
    App-->>Reqwest: Process request/response
    Reqwest-->>Test: Return result
    Test->>Tokio: Spawn async tasks, sleep, timeout (Tokio APIs)
    Note right of Test: All async utilities via Tokio

Possibly related PRs

  • hoprnet/hoprnet#6367: Introduces a unified async runtime abstraction, which is directly related to this PR's removal of async-std in favor of a single runtime.
  • hoprnet/hoprnet#6292: Adds reqwest HTTP client support for Tokio, directly connected to this PR's migration from surf to reqwest for HTTP requests.

Suggested labels

toolchain, testing, crate:chain-actions

Suggested reviewers

  • NumberFour8

</details>

<!-- walkthrough_end -->

<!-- announcements_start -->

> [!TIP]
> <details>
> <summary>⚡️ Faster reviews with caching</summary>
> 
> - CodeRabbit now supports caching for code and dependencies, helping speed up reviews. This means quicker feedback, reduced wait times, and a smoother review experience overall. Cached data is encrypted and stored securely. This feature will be automatically enabled for all accounts on May 16th. To opt out, configure `Review - Disable Cache` at either the organization or repository level. If you prefer to disable all data retention across your organization, simply turn off the `Data Retention` setting under your Organization Settings.
> 
> Enjoy the performance boost—your workflow just got faster.
> 
> </details>

<!-- announcements_end -->

---

<details>
<summary>📜 Recent review details</summary>

**Configuration used: .coderabbit.yaml**
**Review profile: CHILL**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 8bc04c2a4695b6602e858f60a6c99ab230830f97 and aca0f457516eab0c76b65a9b0f44562e39505f43.

</details>

<details>
<summary>📒 Files selected for processing (1)</summary>

* `hopr/hopr-lib/tests/common/mod.rs` (2 hunks)

</details>

<details>
<summary>🚧 Files skipped from review as they are similar to previous changes (1)</summary>

* hopr/hopr-lib/tests/common/mod.rs

</details>

<details>
<summary>⏰ Context from checks skipped due to timeout of 90000ms (5)</summary>

* GitHub Check: hoprd / docker
* GitHub Check: hopli / docker
* GitHub Check: Docs / Rust docs
* GitHub Check: Linter
* GitHub Check: zizmor

</details>

</details>
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details open="true">
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=hoprnet/hoprnet&utm_content=7094):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

### Support

Need help? Create a ticket on our [support page](https://www.coderabbit.ai/contact-us/support) for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai generate sequence diagram` to generate a sequence diagram of the changes in this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->

@Teebor-Choka Teebor-Choka requested review from NumberFour8, a team and Copilot May 4, 2025 00:00
@Teebor-Choka Teebor-Choka self-assigned this May 4, 2025
@Teebor-Choka Teebor-Choka added this to the 3.0.0 milestone May 4, 2025
Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR removes support for the deprecated async-std runtime and migrates test and runtime usage to the tokio runtime. Key changes include replacing async-std test attributes and task/spawn/sleep calls with tokio equivalents, removing async-std-related dependencies from Cargo.toml files, and updating client usages from SurfRequestor to ReqwestRequestor.

Reviewed Changes

Copilot reviewed 95 out of 96 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
common/network-types/src/session/frame.rs Updates test attributes and sleep calls to use tokio
common/network-types/Cargo.toml Removes async-std resolver dependency
common/async-runtime/src/lib.rs Deprecates async-std module with a note
chain/rpc/src/rpc.rs Updates test attributes, sleep calls, and client usage
chain/rpc/src/indexer.rs Migrates test attributes and updates timeout usage for tokio
chain/rpc/src/client.rs Removes SurfRequestor usage in favor of ReqwestRequestor
chain/rpc/Cargo.toml Removes async-std dependencies and updates runtime configuration
chain/indexer/src/handlers.rs Migrates test attributes to tokio
chain/indexer/src/block.rs Migrates test attributes and sleep calls to tokio for async tests
chain/indexer/Cargo.toml Removes async-std dependencies and updates runtime configuration
chain/api/src/lib.rs Adjusts default HTTP requestor to use ReqwestRequestor
chain/api/Cargo.toml Removes async-std dependencies and updates runtime configuration
chain/actions/src/redeem.rs Migrates test attributes and spawn calls to tokio
chain/actions/src/payload.rs Updates test attributes and client usage from SurfRequestor to ReqwestClient
chain/actions/src/node.rs Migrates test attributes and spawn calls to tokio
chain/actions/src/channels.rs Migrates test attributes and spawn calls to tokio
chain/actions/src/action_state.rs Updates test attributes and timeout calls to tokio runtime
chain/actions/Cargo.toml Removes async-std dependencies and updates runtime configuration
Cargo.toml Updates dependency features to use tokio instead of async-std
Files not reviewed (1)
  • Makefile: Language not supported

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (2)
transport/mixer/benches/mixer_throughput.rs (2)

43-46: ⚠️ Potential issue

Runtime mismatch will panic – replace AsyncStdExecutor with a Tokio executor

tokio::task::spawn (l. 77) and tokio::time::sleep (l. 119) require an active Tokio runtime.
Running them inside criterion::async_executor::AsyncStdExecutor results in

thread panicked at 'there is no reactor running, must be called from the context of a Tokio runtime'

Switch the benchmark to Criterion’s Tokio executor (or roll your own runtime, as the other bench does):

-                let runtime = criterion::async_executor::AsyncStdExecutor {};
+                let runtime = criterion::async_executor::TokioExecutor::new()
+                    .expect("Tokio executor must be constructible");

or

-                let runtime = criterion::async_executor::AsyncStdExecutor {};
+                let runtime = tokio::runtime::Runtime::new()
+                    .expect("Tokio runtime must be constructible");

and pass the corresponding executor to b.to_async(runtime).

Failing to do so will make every benchmark panic at the first spawn call.

Also applies to: 77-80


87-88: ⚠️ Potential issue

cancel() is from async-std – use abort() for Tokio JoinHandle

tokio::task::JoinHandle exposes abort() (non-async) instead of cancel().await.

-        pipe.cancel().await;
+        pipe.abort();
♻️ Duplicate comments (2)
transport/protocol/tests/msg_ack_workflows.rs (1)

15-17: Same remark as above

Apply the same flavor = "current_thread" tweak here for consistency.

chain/rpc/src/indexer.rs (1)

411-412: Timeout handling correctly updated to Tokio pattern.

The timeout pattern has been correctly updated from future.timeout(Duration).await?? (async-std style) to timeout(Duration, future).await??? (tokio style). The triple question marks are correct here as they handle:

  1. The Result from timeout (did the operation time out?)
  2. The Result from the spawned task
  3. The Result from the operation inside the task

This matches the user's confirmation from the previous review.

Also applies to: 546-547

🧹 Nitpick comments (11)
logic/path/Cargo.toml (1)

53-53: Ensure Tokio dev-dependency includes necessary features for tests.

You’ve added tokio = { workspace = true } as a dev-dependency, but #[tokio::test] and the Tokio runtime require at least the macros and an executor feature (e.g., rt or rt-multi-thread). Please verify that the workspace tokio default features cover this, or explicitly enable them:

tokio = { workspace = true, default-features = false, features = ["macros", "rt-multi-thread", "time"] }
crypto/packet/Cargo.toml (1)

44-44: Verify Tokio dev-dependency configuration.

Adding tokio = { workspace = true } under [dev-dependencies] is correct for migrating tests, but please confirm that the Tokio crate in the workspace is built with the macros and runtime features required by #[tokio::test]. Otherwise, specify:

tokio = { workspace = true, default-features = false, features = ["macros", "rt-multi-thread", "time"] }
hoprd/db/entity/Cargo.toml (1)

15-15: Add tokio build-dependency for async build script.

Including tokio under [build-dependencies] is appropriate if build.rs now uses #[tokio::main] or other Tokio macros. Please verify the workspace tokio crate enables the macros and runtime features needed at build time.

transport/protocol/tests/msg_ack_workflows.rs (1)

6-8: Prefer the single-threaded Tokio runtime for serialised tests

serial_test::serial guarantees tests run one-at-a-time, yet the default #[tokio::test] spins up a multi-threaded runtime.
Using the current-thread flavour avoids spawning extra threads, reduces scheduler noise and still plays nicely with serial_test.

-#[tokio::test]
+#[tokio::test(flavor = "current_thread")]
hoprd/db/entity/build.rs (2)

42-44: Build-script: favour the single-threaded runtime to cut compile-time overhead

A build-script rarely needs Tokio’s full multi-threaded scheduler.
Reducing it to a current-thread runtime trims compile time and avoids spawning extra threads during cargo build.

-#[tokio::main]
+#[tokio::main(flavor = "current_thread")]

8-8: Unused import: clap::Parser

Parser is imported but never used anymore after the refactor.
Removing it eliminates a warning and an unnecessary dependency on clap in the build-script.

transport/protocol/benches/protocol_throughput_emulated.rs (1)

36-37: Consider constraining the Tokio runtime to 1 worker thread

The benchmark creates a fresh Tokio runtime per iteration.
Using a single-threaded runtime (Runtime::new() defaults to multi-thread) reduces thread churn and may yield more stable measurements:

let runtime = tokio::runtime::Builder::new_current_thread()
    .enable_all()
    .build()
    .expect("Tokio runtime must be constructible");
hoprd/db/api/Cargo.toml (1)

39-39: Consider addressing the TODO comment.

There's a comment suggesting that the hopr-async-runtime dependency might be removable. Consider investigating whether this dependency is actually needed now that the codebase has migrated to tokio.

chain/rpc/src/client.rs (1)

881-909: Trim down the wall-clock duration of the block-generation test

The test sleeps three times for a whole second, making the suite ~3 s slower.
A shorter interval (e.g. 100–250 ms) is sufficient to advance Anvil blocks deterministically while speeding up CI.

-        let block_time = Duration::from_secs(1);
+        // 100 ms keeps the semantics but runs faster
+        let block_time = Duration::from_millis(100);
logic/path/src/lib.rs (2)

461-465: Consider avoiding per-test runtime construction

Each sync test builds a fresh multi-thread Tokio runtime, which is relatively heavy and can’t run inside an existing runtime.
If parameterized gains async support (or you switch to parameterized_async), you could write:

#[parameterized(hops = { 1, 2, 3 })]
#[tokio::test]
async fn validated_path_multi_hop_validation(hops: usize) {}

Until then, tokio_test::block_on or a lazily-initialised global runtime would cut overhead.

Also applies to: 499-507, 531-534


600-608: Nit: reuse the created runtime

Both .block_on calls can share the existing runtime value instead of creating a second one, saving a few milliseconds.

-        let validated_2 = tokio::runtime::Runtime::new()
-            .expect("runtime must exist")
-            .block_on(ValidatedPath::new(validated_1.clone(), &cg, PATH_ADDRS.deref()))?;
+        let validated_2 = runtime.block_on(ValidatedPath::new(validated_1.clone(), &cg, PATH_ADDRS.deref()))?;

Also applies to: 622-624

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 507c5a0 and a05a042.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (95)
  • Cargo.toml (1 hunks)
  • Makefile (1 hunks)
  • chain/actions/Cargo.toml (1 hunks)
  • chain/actions/src/action_state.rs (7 hunks)
  • chain/actions/src/channels.rs (20 hunks)
  • chain/actions/src/node.rs (6 hunks)
  • chain/actions/src/payload.rs (4 hunks)
  • chain/actions/src/redeem.rs (14 hunks)
  • chain/api/Cargo.toml (1 hunks)
  • chain/api/src/lib.rs (1 hunks)
  • chain/indexer/Cargo.toml (1 hunks)
  • chain/indexer/src/block.rs (8 hunks)
  • chain/indexer/src/handlers.rs (33 hunks)
  • chain/rpc/Cargo.toml (1 hunks)
  • chain/rpc/src/client.rs (18 hunks)
  • chain/rpc/src/indexer.rs (13 hunks)
  • chain/rpc/src/rpc.rs (17 hunks)
  • common/async-runtime/src/lib.rs (2 hunks)
  • common/network-types/Cargo.toml (0 hunks)
  • common/network-types/src/session/frame.rs (19 hunks)
  • common/network-types/src/session/state.rs (14 hunks)
  • common/network-types/src/session/utils.rs (6 hunks)
  • common/network-types/src/types.rs (0 hunks)
  • common/network-types/src/utils.rs (4 hunks)
  • common/parallelize/Cargo.toml (0 hunks)
  • crypto/packet/Cargo.toml (1 hunks)
  • crypto/packet/src/validation.rs (7 hunks)
  • db/entity/Cargo.toml (0 hunks)
  • db/migration/Cargo.toml (1 hunks)
  • db/migration/src/main.rs (1 hunks)
  • db/sql/Cargo.toml (1 hunks)
  • db/sql/src/accounts.rs (12 hunks)
  • db/sql/src/channels.rs (5 hunks)
  • db/sql/src/db.rs (3 hunks)
  • db/sql/src/info.rs (6 hunks)
  • db/sql/src/logs.rs (11 hunks)
  • db/sql/src/peers.rs (10 hunks)
  • db/sql/src/registry.rs (2 hunks)
  • db/sql/src/resolver.rs (6 hunks)
  • db/sql/src/ticket_manager.rs (1 hunks)
  • db/sql/src/tickets.rs (56 hunks)
  • hopli/Cargo.toml (2 hunks)
  • hopli/src/environment_config.rs (5 hunks)
  • hopli/src/main.rs (1 hunks)
  • hopli/src/methods.rs (28 hunks)
  • hopr/hopr-lib/Cargo.toml (1 hunks)
  • hopr/hopr-lib/tests/chain_integration_tests.rs (3 hunks)
  • hopr/hopr-lib/tests/common/mod.rs (3 hunks)
  • hopr/hopr-lib/tests/node_integration_tests.rs (1 hunks)
  • hoprd/db/api/Cargo.toml (1 hunks)
  • hoprd/db/api/src/aliases.rs (13 hunks)
  • hoprd/db/api/src/db.rs (1 hunks)
  • hoprd/db/entity/Cargo.toml (1 hunks)
  • hoprd/db/entity/build.rs (4 hunks)
  • hoprd/db/migration/Cargo.toml (1 hunks)
  • hoprd/db/migration/src/main.rs (1 hunks)
  • hoprd/hoprd/Cargo.toml (0 hunks)
  • hoprd/hoprd/src/main.rs (1 hunks)
  • hoprd/inbox/Cargo.toml (1 hunks)
  • hoprd/inbox/src/inbox.rs (2 hunks)
  • hoprd/inbox/src/ring.rs (13 hunks)
  • hoprd/rest-api/Cargo.toml (1 hunks)
  • logic/path/Cargo.toml (1 hunks)
  • logic/path/src/lib.rs (7 hunks)
  • logic/path/src/selectors/dfs.rs (11 hunks)
  • logic/strategy/Cargo.toml (1 hunks)
  • logic/strategy/src/aggregating.rs (11 hunks)
  • logic/strategy/src/auto_funding.rs (1 hunks)
  • logic/strategy/src/auto_redeeming.rs (6 hunks)
  • logic/strategy/src/channel_finalizer.rs (1 hunks)
  • logic/strategy/src/promiscuous.rs (2 hunks)
  • logic/strategy/src/strategy.rs (2 hunks)
  • nix/rust-package.nix (1 hunks)
  • transport/api/Cargo.toml (1 hunks)
  • transport/mixer/Cargo.toml (1 hunks)
  • transport/mixer/benches/mixer_throughput.rs (2 hunks)
  • transport/mixer/src/channel.rs (10 hunks)
  • transport/network/Cargo.toml (1 hunks)
  • transport/network/src/heartbeat.rs (3 hunks)
  • transport/network/src/network.rs (16 hunks)
  • transport/network/src/ping.rs (11 hunks)
  • transport/p2p/Cargo.toml (1 hunks)
  • transport/p2p/src/swarm.rs (1 hunks)
  • transport/p2p/tests/p2p_transport_test.rs (1 hunks)
  • transport/protocol/Cargo.toml (1 hunks)
  • transport/protocol/benches/protocol_throughput_emulated.rs (3 hunks)
  • transport/protocol/src/processor.rs (3 hunks)
  • transport/protocol/src/stream.rs (1 hunks)
  • transport/protocol/tests/common/mod.rs (4 hunks)
  • transport/protocol/tests/msg_ack_workflows.rs (2 hunks)
  • transport/session/Cargo.toml (1 hunks)
  • transport/session/src/manager.rs (19 hunks)
  • transport/session/src/types.rs (4 hunks)
  • transport/ticket-aggregation/Cargo.toml (1 hunks)
  • transport/ticket-aggregation/src/lib.rs (7 hunks)
💤 Files with no reviewable changes (5)
  • common/network-types/Cargo.toml
  • db/entity/Cargo.toml
  • hoprd/hoprd/Cargo.toml
  • common/network-types/src/types.rs
  • common/parallelize/Cargo.toml
🧰 Additional context used
🧠 Learnings (12)
transport/p2p/Cargo.toml (1)
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6345
File: hopr-socks/hopr-socks-server/Cargo.toml:20-20
Timestamp: 2024-06-21T20:51:35.871Z
Learning: All code and packages in the `hoprnet` project should use the workspace level dependency of `reqwest`.
chain/api/Cargo.toml (2)
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6345
File: hopr-socks/hopr-socks-server/Cargo.toml:20-20
Timestamp: 2024-06-21T20:51:35.871Z
Learning: All code and packages in the `hoprnet` project should use the workspace level dependency of `reqwest`.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
transport/api/Cargo.toml (3)
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6345
File: hopr-socks/hopr-socks-server/Cargo.toml:20-20
Timestamp: 2024-06-21T20:51:35.871Z
Learning: All code and packages in the `hoprnet` project should use the workspace level dependency of `reqwest`.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: common/primitive-types/Cargo.toml:24-24
Timestamp: 2024-11-01T09:32:55.651Z
Learning: In the hoprnet project, dependency versions are defined in the workspace Cargo.toml, so it's not necessary to specify them in individual package Cargo.toml files.
transport/session/Cargo.toml (1)
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6345
File: hopr-socks/hopr-socks-server/Cargo.toml:20-20
Timestamp: 2024-06-21T20:51:35.871Z
Learning: All code and packages in the `hoprnet` project should use the workspace level dependency of `reqwest`.
chain/indexer/Cargo.toml (1)
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
chain/actions/Cargo.toml (1)
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
chain/indexer/src/handlers.rs (1)
Learnt from: NumberFour8
PR: hoprnet/hoprnet#6511
File: tests/test_integration.py:1182-1198
Timestamp: 2024-10-01T04:47:11.992Z
Learning: In the test `test_hoprd_should_not_accept_tickets_with_lower_than_min_win_prob`, the relay's `rejected_tickets_value` and `unredeemed_value` are already being verified to ensure tickets are rejected and the unredeemed value does not increase.
transport/network/Cargo.toml (1)
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
hopr/hopr-lib/Cargo.toml (1)
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6345
File: hopr-socks/hopr-socks-server/Cargo.toml:20-20
Timestamp: 2024-06-21T20:51:35.871Z
Learning: All code and packages in the `hoprnet` project should use the workspace level dependency of `reqwest`.
logic/strategy/Cargo.toml (1)
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
hoprd/db/api/Cargo.toml (2)
Learnt from: Teebor-Choka
PR: hoprnet/hoprnet#6345
File: hopr-socks/hopr-socks-server/Cargo.toml:20-20
Timestamp: 2024-06-21T20:51:35.871Z
Learning: All code and packages in the `hoprnet` project should use the workspace level dependency of `reqwest`.
Learnt from: tolbrino
PR: hoprnet/hoprnet#6399
File: chain/api/Cargo.toml:50-53
Timestamp: 2024-11-01T15:26:53.058Z
Learning: In `chain/api/Cargo.toml`, it's acceptable to declare the same dependency `hopr-db-sql` in both `[dependencies]` and `[dev-dependencies]` with different features, especially when additional features are only needed for tests.
chain/rpc/src/client.rs (1)
Learnt from: NumberFour8
PR: hoprnet/hoprnet#6292
File: chain/actions/src/payload.rs:596-596
Timestamp: 2024-07-28T07:26:06.634Z
Learning: The `SurfRequestor` in the `chain_rpc::client::surf_client` module implements the `Debug` trait.
🧬 Code Graph Analysis (2)
transport/mixer/benches/mixer_throughput.rs (1)
transport/mixer/src/config.rs (1)
  • random_delay (30-40)
hoprd/db/entity/build.rs (4)
db/migration/src/main.rs (1)
  • main (4-6)
hoprd/db/migration/src/main.rs (1)
  • main (4-6)
hopli/src/main.rs (1)
  • main (65-99)
db/entity/build.rs (2)
  • main (64-138)
  • execute_sea_orm_cli_command (11-62)
⏰ Context from checks skipped due to timeout of 90000ms (11)
  • GitHub Check: hoprd / docker
  • GitHub Check: hopli / docker
  • GitHub Check: zizmor
  • GitHub Check: Docs / Rust docs
  • GitHub Check: tests-smoke-websocket
  • GitHub Check: tests-smart-contracts
  • GitHub Check: tests-unit-nightly
  • GitHub Check: Linter
  • GitHub Check: tests-unit
  • GitHub Check: Cargo Audit
  • GitHub Check: Cargo Audit
🔇 Additional comments (258)
hoprd/inbox/Cargo.toml (1)

29-29: Add Tokio as a dev-dependency to support async tests
Switching the test runtime to Tokio requires adding tokio under [dev-dependencies]. This ensures that any test modules annotated with #[tokio::test] can compile and run.

transport/mixer/Cargo.toml (2)

32-32: Introduce tokio for async test support
Adding tokio as a dev-dependency aligns this crate’s benchmarks and tests with the Tokio runtime, replacing any previous async-std runtime expectations.


34-34: Update criterion to use Tokio under the hood
Changing the criterion features to ["async_futures", "async_tokio"] ensures benchmarks use Tokio’s async executor rather than async-std.

transport/network/Cargo.toml (2)

44-44: Add tokio to dev-dependencies for async tests
Including tokio here ensures that any tests using #[tokio::test] compile successfully and run on the Tokio runtime.


47-47: Switch hopr-db-sql to runtime-tokio
The dev-dependency on hopr-db-sql now specifies features = ["runtime-tokio"], which complements the project-wide migration off async-std.

transport/api/Cargo.toml (1)

81-88: Standardize dev-dependencies on runtime-tokio feature
You’ve updated hopr-db-sql, hopr-transport-network, hopr-transport-protocol, hopr-transport-p2p, and hopr-transport-ticket-aggregation to use features = ["runtime-tokio"]. This aligns with the removal of async-std. Ensure all test modules have been updated to #[tokio::test] and remove any leftover async-std imports or annotations.

hopr/hopr-lib/Cargo.toml (1)

85-90: Update dev-dependencies for Tokio migration
The new dev-dependencies (hopr-crypto-types, hopr-crypto-random, hopr-db-sql with runtime-tokio, and hopr-transport-session with runtime-tokio) ensure test and integration code compiles against Tokio. This change is consistent with the crate’s transition off async-std.

hoprd/db/api/src/db.rs (1)

76-76: Replace async-std test attribute with tokio::test.

Switching the test macro to #[tokio::test] aligns with the runtime migration. Ensure that tokio is available in dev-dependencies (with the proper features) so this attribute and the async execution work correctly.

transport/protocol/src/stream.rs (1)

200-200: Update async test macro to #[tokio::test].

Changing the test to use #[tokio::test] is consistent with the migration. Confirm that returning anyhow::Result<()> is compatible with the Tokio test runner (latest versions support -> Result<(), E>).

hoprd/db/migration/Cargo.toml (1)

16-16: Dependency addition looks good.

The addition of tokio as a workspace dependency aligns with the PR's objective to migrate from async-std to tokio runtime across the codebase.

logic/strategy/src/auto_funding.rs (1)

161-161: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the broader migration from async-std to tokio runtime.

db/sql/src/channels.rs (5)

364-364: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


388-388: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


415-415: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


430-430: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


457-457: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.

logic/strategy/src/auto_redeeming.rs (6)

273-273: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the broader migration from async-std to tokio runtime.


303-303: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


337-337: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


371-371: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


423-423: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.


468-468: Test runtime migration looks good.

The test attribute has been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to tokio runtime.

hoprd/rest-api/Cargo.toml (1)

24-24: Correct runtime feature flag change.

The feature flag change from runtime-async-std to runtime-tokio is consistent with the PR objective to transition from the async-std runtime to the tokio runtime.

db/migration/Cargo.toml (1)

17-19: Appropriate dependency update for tokio migration.

The replacement of async-std with tokio as a dependency is aligned with the PR's goal to remove the deprecated async-std crate.

db/sql/src/ticket_manager.rs (1)

375-375: Test macro updated correctly for tokio runtime.

Test annotation change from #[async_std::test] to #[tokio::test] is consistent with the project's migration to the tokio runtime.

logic/strategy/src/channel_finalizer.rs (1)

191-191: Test macro updated correctly for tokio runtime.

Test annotation change from #[async_std::test] to #[tokio::test] is consistent with the project's migration to the tokio runtime.

db/sql/src/peers.rs (1)

337-337: Successfully transitioned tests to tokio runtime.

All test attributes have been properly migrated from #[async_std::test] to #[tokio::test], which is aligned with the project-wide migration to tokio as the standard async runtime.

Also applies to: 365-365, 385-385, 398-398, 414-414, 424-424, 467-467, 490-490, 519-519, 569-569

Cargo.toml (1)

157-157: Correctly switched sea-query-binder to use tokio runtime.

The feature flag has been properly updated from runtime-async-std-rustls to runtime-tokio-rustls, which is necessary for database query operations to work with the tokio runtime.

transport/p2p/Cargo.toml (1)

54-54: Successfully removed async-std dependency.

The async-std dev-dependency has been removed while maintaining the tokio dependency, correctly aligning with the project's migration to standardize on the tokio runtime.

I've noticed from the retrieved learnings that all packages in the project should use workspace-level dependencies for tools like reqwest. This change correctly maintains that pattern by using only workspace dependencies.

hoprd/inbox/src/inbox.rs (2)

198-198: Test attribute correctly migrated to tokio.

The test attribute has been properly updated from #[async_std::test] to #[tokio::test] to align with the project-wide migration to tokio runtime.


249-249: Successfully migrated async sleep function to tokio equivalent.

The sleep function has been correctly changed from async_std::task::sleep to tokio::time::sleep, which is the proper equivalent in the tokio runtime.

db/sql/src/registry.rs (2)

170-170: Test attribute updated to use Tokio runtime

This test has been properly migrated from async-std to tokio runtime as part of the codebase-wide transition away from the deprecated async-std crate.


199-199: Test attribute updated to use Tokio runtime

This test has been properly migrated from async-std to tokio runtime as part of the codebase-wide transition away from the deprecated async-std crate.

logic/strategy/src/strategy.rs (2)

282-282: Test attribute updated to use Tokio runtime

This test has been properly migrated from async-std to tokio runtime as part of the codebase-wide transition away from the deprecated async-std crate.


311-311: Test attribute updated to use Tokio runtime

This test has been properly migrated from async-std to tokio runtime as part of the codebase-wide transition away from the deprecated async-std crate.

chain/actions/Cargo.toml (1)

56-56: Dev dependency updated from async-std to tokio

The development dependency has been properly updated to use tokio instead of async-std, which aligns with the PR's objective to standardize on the Tokio runtime.

Note: The runtime-async-std feature has also been correctly removed from the features section, completing the migration from async-std to tokio.

hopli/src/main.rs (1)

64-64: Main function attribute updated to use Tokio runtime

The main function attribute has been properly updated from #[async_std::main] to #[tokio::main], switching the async runtime used to drive the program from async-std to tokio.

hoprd/db/api/src/aliases.rs (1)

141-141: Test attribute migration looks good

All test attributes have been properly updated from #[async_std::test] to #[tokio::test], aligning with the project-wide migration from async-std to tokio runtime.

Also applies to: 154-154, 177-177, 204-204, 220-220, 240-240, 260-260, 276-276, 295-295, 313-313, 339-339, 364-364, 388-388

db/sql/src/info.rs (1)

598-598: Test attribute migration correctly implemented

All async test functions have been properly updated to use #[tokio::test] instead of #[async_std::test], consistent with the codebase-wide transition to tokio runtime.

Also applies to: 619-619, 641-641, 660-660, 677-677, 695-695

common/network-types/src/utils.rs (1)

458-458: AsyncReadStreamer tests successfully migrated to tokio

All test attributes for the AsyncReadStreamer functionality have been correctly updated from #[async_std::test] to #[tokio::test], maintaining consistent test behavior while switching to the tokio runtime.

Also applies to: 471-471, 485-485, 499-499

crypto/packet/src/validation.rs (1)

137-137: Validation tests properly migrated to tokio runtime

All ticket validation test attributes have been successfully updated from #[async_std::test] to #[tokio::test], completing the migration from async-std to tokio for this module.

Also applies to: 158-158, 177-177, 196-196, 221-221, 241-241, 266-266

hoprd/db/migration/src/main.rs (1)

3-3: Runtime attribute updated correctly.

The #[tokio::main] attribute has been properly added to replace the previous async-std runtime attribute, aligning with the project-wide migration to the Tokio runtime.

hopli/Cargo.toml (3)

21-21: Correctly added tokio dependency.

The tokio dependency has been added as a direct dependency, which is necessary for the migration from async-std.


26-26: Runtime feature flag updated appropriately.

The feature flag for hopr-chain-api has been correctly updated from runtime-async-std to runtime-tokio to match the runtime migration.


38-39: Dev dependency reordering.

The reordering of the hopr-crypto-random dependency is functionally equivalent to the previous placement.

chain/indexer/src/handlers.rs (2)

974-974: Test attribute updated to tokio.

The test attribute has been correctly migrated from #[async_std::test] to #[tokio::test].


1020-1020: Multiple test attributes consistently updated to tokio.

All test attributes throughout the file have been consistently migrated from #[async_std::test] to #[tokio::test], ensuring compatibility with the Tokio runtime.

Also applies to: 1196-1196, 1254-1254, 1288-1288, 1322-1322, 1386-1386, 1427-1427, 1468-1468, 1512-1512, 1556-1556, 1584-1584, 1614-1614, 1647-1647, 1682-1682, 1732-1732, 1774-1774, 1824-1824, 1882-1882, 1929-1929, 1976-1976, 2033-2033, 2098-2098, 2201-2201, 2307-2307, 2377-2377, 2432-2432, 2484-2484, 2538-2538, 2566-2566, 2600-2600, 2633-2633, 2673-2673

hoprd/inbox/src/ring.rs (2)

220-220: All test attributes consistently updated to tokio.

All test attributes in the file have been systematically migrated from #[async_std::test] to #[tokio::test], maintaining consistent usage of the Tokio runtime throughout the test suite.

Also applies to: 270-270, 293-293, 321-321, 353-353, 372-372, 399-399, 428-428, 456-456, 506-506, 536-536


469-469: Sleep implementation properly updated to tokio.

The async sleep calls have been correctly migrated from async_std::task::sleep to tokio::time::sleep, ensuring consistent usage of Tokio's utilities for time-based operations.

Also applies to: 515-515

db/sql/src/resolver.rs (1)

39-39: Test attribute changes look good!

All test attributes have been properly updated from #[async_std::test] to #[tokio::test] as part of the migration from async-std to tokio runtime. The test logic remains unchanged, which is the expected approach for this transition.

Also applies to: 51-51, 63-63, 94-94, 131-131, 163-163

transport/network/src/network.rs (1)

397-397: Test attribute changes look good!

All test attributes have been properly migrated from #[async_std::test] to #[tokio::test] across the network module's test suite. This change is consistent with the project-wide migration to the tokio runtime while preserving all test logic.

Also applies to: 418-418, 440-440, 464-464, 488-488, 512-512, 547-547, 577-577, 608-608, 651-651, 662-662, 677-677, 693-693, 719-719, 748-748, 777-777

Makefile (1)

64-64: Makefile update correctly switches to tokio runtime!

The test target has been properly updated to use --features runtime-tokio instead of runtime-async-std, ensuring that all tests run through the Makefile will use the tokio runtime. This matches the PR objectives of standardizing on tokio throughout the project.

logic/strategy/src/promiscuous.rs (1)

806-806: Test attribute and sleep function correctly migrated to tokio!

Both changes in this file properly migrate from async-std to tokio:

  1. The test attribute macro is now using tokio::test
  2. The sleep function now uses tokio::time::sleep instead of async_std::task::sleep

This completes both aspects of the migration mentioned in the PR objectives: updating test annotations and replacing delay functions.

Also applies to: 872-872

db/sql/src/tickets.rs (1)

1417-1417: Runtime migration successfully implemented.

The test annotations have been properly updated from #[async_std::test] to #[tokio::test] across all test functions in this file, consistent with the project-wide migration from async-std to tokio. This change maintains the same test behavior while standardizing on the tokio runtime.

Also applies to: 1449-1449, 1512-1512, 1528-1528, 1542-1542, 1589-1589, 1617-1617, 1661-1661, 1684-1684, 1704-1704, 1715-1715, 1747-1747, 1812-1812, 1873-1873, 1895-1895, 1943-1943, 1979-1979, 2005-2005, 2032-2032, 2071-2071, 2096-2096, 2137-2137, 2166-2166, 2196-2196, 2226-2226, 2256-2256, 2286-2286, 2311-2311, 2334-2334, 2362-2362, 2391-2391, 2412-2412, 2442-2442, 2496-2496, 2537-2537, 2572-2572, 2603-2603, 2641-2641, 2693-2693, 2793-2793, 2834-2834, 2855-2855, 2905-2905, 2942-2942, 3036-3036, 3048-3048, 3082-3082, 3110-3110, 3140-3140, 3172-3172, 3201-3201, 3232-3232, 3263-3263, 3293-3293, 3331-3331, 3352-3352, 3391-3391

chain/actions/src/channels.rs (5)

260-260: Switched test attribute to Tokio runtime
Replaced the deprecated #[async_std::test] with #[tokio::test] to run tests under the Tokio executor.


309-310: Migrated background task spawn to Tokio
Updated the test setup to use tokio::task::spawn instead of async_std::task::spawn for running the action queue. This aligns with the new Tokio-based runtime.


627-629: Updated background task spawn in fund_channel test
Switched the spawn call in the test_fund_channel to tokio::task::spawn to use the Tokio runtime.


920-923: Updated background task spawn in close_channel_outgoing test
Changed the test’s queue runner to tokio::task::spawn for consistency with Tokio runtime.


1013-1015: Updated background task spawn in close_channel_incoming test
Replaced the previous async-std spawn with tokio::task::spawn to schedule the action queue under Tokio.

db/sql/src/logs.rs (10)

455-455: Switched log test attribute to Tokio runtime
Replaced #[async_std::test] with #[tokio::test] for the test_store_single_log test.


481-481: Switched log test attribute to Tokio runtime
Updated test_store_multiple_logs to use #[tokio::test].


531-531: Switched log test attribute to Tokio runtime
Replaced the attribute for test_store_duplicate_log with #[tokio::test].


558-558: Switched log test attribute to Tokio runtime
Migrated test_set_log_processed to use #[tokio::test].


590-590: Switched log test attribute to Tokio runtime
Changed test_list_logs_ordered to #[tokio::test].


653-653: Switched log test attribute to Tokio runtime
Updated test_get_logs_block_numbers to run under Tokio.


707-707: Switched log test attribute to Tokio runtime
Migrated test_set_logs_unprocessed to use #[tokio::test].


736-736: Switched log test attribute to Tokio runtime
Replaced the attribute for the second test_get_logs_block_numbers with #[tokio::test].


809-809: Switched log test attribute to Tokio runtime
Updated test_update_logs_checksums to use Tokio’s test macro.


873-873: Switched log test attribute to Tokio runtime
Migrated test_should_not_allow_inconsistent_logs_in_the_db to #[tokio::test].

hopli/src/methods.rs (3)

1455-1455: Updated HTTP requestor import
The import of ReqwestRequestor from hopr_chain_rpc::client replaces the previous async-std–based SurfRequestor, aligning with the migration to Tokio.


1560-1560: Switched async test attributes to Tokio
All #[async_std::test] attributes have been correctly replaced with #[tokio::test], ensuring tests run on the Tokio runtime. No test logic was altered.

Also applies to: 1588-1588, 1651-1651, 1710-1710, 1749-1749, 1789-1789, 1851-1851, 1864-1864, 1881-1881, 1976-1976, 2050-2050, 2145-2145, 2220-2220, 2278-2278, 2371-2371, 2444-2444


1569-1569: Updated client instantiation to use ReqwestRequestor
Each test now calls create_rpc_client_to_anvil(ReqwestRequestor::default(), ...), replacing any async-std HTTP client. This is consistent with the PR’s removal of async-std.

Also applies to: 1599-1599, 1659-1659, 1719-1719, 1760-1760, 1800-1800

logic/path/src/selectors/dfs.rs (1)

474-474: Replaced async-std test annotations with Tokio
Each unit test attribute was updated from #[async_std::test] to #[tokio::test], in line with the repo-wide runtime migration. Test bodies and assertions remain unchanged.

Also applies to: 486-486, 503-503, 520-520, 549-549, 565-565, 582-582, 601-601, 618-618, 635-635, 651-651

db/migration/src/main.rs (1)

3-3: Runtime attribute successfully updated to tokio

The change from #[async_std::main] to #[tokio::main] correctly aligns the main function with the project's transition to the tokio runtime.

db/sql/src/accounts.rs (2)

459-459: Test attribute correctly migrated to tokio

The test attribute has been properly updated from #[async_std::test] to #[tokio::test] as part of the codebase-wide runtime migration.


512-512: All test attributes consistently migrated to tokio

All remaining test attributes in this file have been consistently updated from #[async_std::test] to #[tokio::test], ensuring complete migration to the tokio runtime for all tests.

Also applies to: 553-553, 571-571, 622-622, 651-651, 666-666, 698-698, 727-727, 742-742, 802-802, 864-864

nix/rust-package.nix (1)

95-95: Successfully removed async-std feature flag from test configuration

The -F runtime-async-std feature flag has been correctly removed from the test arguments, leaving only -F runtime-tokio. This ensures tests run exclusively on the tokio runtime, completing the migration away from async-std.

transport/protocol/Cargo.toml (2)

55-55: Dev dependency successfully migrated to tokio

The dev dependency has been correctly updated from async-std to tokio, aligning with the project's runtime migration strategy.


59-59: Feature flags appropriately updated for tokio runtime

The feature flags for both criterion and hopr-db-sql have been properly updated to use tokio instead of async-std:

  1. criterion now uses async_tokio instead of async_std
  2. hopr-db-sql now uses runtime-tokio instead of runtime-async-std

These changes ensure consistent use of the tokio runtime throughout the dependency chain.

Also applies to: 60-60

chain/api/Cargo.toml (1)

52-53: Correctly updated dev-dependencies to use tokio runtime

The dependency changes properly align with the PR objective of replacing async-std with tokio across the codebase. This file correctly:

  1. Adds tokio as a dev-dependency from the workspace
  2. Updates hopr-db-sql dev-dependency to use the runtime-tokio feature

This is consistent with the learning from tolbrino about how it's appropriate to declare hopr-db-sql in both dependencies and dev-dependencies with different features for testing.

hopr/hopr-lib/tests/node_integration_tests.rs (3)

4-4: Switched from SurfRequestor to ReqwestRequestor

The import change correctly aligns with the PR objective of removing async-std dependencies, as ReqwestRequestor uses the tokio runtime while the previous SurfRequestor used async-std.


12-12: Simplified test attribute to use only tokio runtime

Correctly simplified the test attribute to only use tokio::test instead of conditionally supporting both async-std and tokio runtimes, which aligns with the PR objective of standardizing on tokio.


17-17: Updated SnapshotRequestor to use ReqwestRequestor

The instantiation of SnapshotRequestor now correctly uses ReqwestRequestor which is tokio-based, replacing the previous SurfRequestor which was async-std-based.

chain/actions/src/payload.rs (3)

606-606: Switched to reqwest_client::ReqwestRequestor

The import has been correctly updated to use reqwest_client::ReqwestRequestor instead of the previous surf_client::SurfRequestor, which aligns with the migration from async-std to tokio.


615-615: Updated test attributes to use tokio runtime

All test attributes have been correctly changed from #[async_std::test] to #[tokio::test], consistently applying the migration from async-std to tokio throughout the test suite.

Also applies to: 652-652, 712-712


621-621: Updated RPC client creation to use ReqwestRequestor

All instances of create_rpc_client_to_anvil now correctly use ReqwestRequestor instead of the previous SurfRequestor, consistently applying the migration from async-std to tokio-based HTTP clients.

Also applies to: 657-657, 717-717

transport/protocol/src/processor.rs (3)

267-267: Switched to tokio::time::timeout

The import has been correctly updated to use tokio::time::timeout instead of the previous async_std::future::timeout, aligning with the migration to tokio.


269-269: Updated test attributes to use tokio runtime

Test attributes have been correctly changed from #[async_std::test] to #[tokio::test], consistently applying the migration from async-std to tokio throughout the test suite.

Also applies to: 283-283


313-315: Updated task spawning and sleep to use tokio

The task spawning and sleep operations have been correctly migrated from async_std to tokio:

  • Changed from async_std::task::spawn to tokio::task::spawn
  • Changed from async_std::time::sleep to tokio::time::sleep

These changes ensure consistent use of the tokio runtime for asynchronous operations.

db/sql/src/db.rs (3)

260-260: Correctly migrated test annotations to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] to align with the migration from async-std to tokio runtime.


273-273: Test annotation updated correctly to tokio runtime

This test annotation change is consistent with the project-wide migration to the tokio runtime.


311-311: Test annotation successfully migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] while maintaining the test logic.

chain/actions/src/node.rs (6)

118-118: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] to align with the migration to tokio runtime.


159-161: Task spawning function updated to use tokio

The task spawning has been correctly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same execution flow.


176-176: Test annotation correctly migrated to tokio

The test annotation has been updated from #[async_std::test] to #[tokio::test] as part of the runtime migration.


217-217: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] while maintaining the test logic.


238-240: Task spawning updated to use tokio runtime

The task spawning has been correctly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same execution flow.


259-259: Test annotation successfully migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] as part of the project-wide migration.

transport/network/src/heartbeat.rs (3)

249-249: Sleep utility correctly migrated to tokio

The import has been properly updated from async_std::task::sleep to tokio::time::sleep to align with the tokio runtime migration.


273-273: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] while maintaining the test logic.


298-298: Test annotation successfully migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] as part of the project-wide migration.

chain/actions/src/redeem.rs (14)

352-352: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] to align with the tokio runtime migration.


418-420: Task spawning updated to use tokio runtime

The task spawning has been correctly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same execution flow and functionality.


452-452: Test annotation successfully migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] as part of the project-wide migration.


497-499: Task spawning correctly migrated to tokio

The task spawning has been properly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same functionality.


539-539: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] while maintaining the test logic.


587-589: Task spawning updated to use tokio runtime

The task spawning has been correctly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same execution flow.


620-620: Test annotation successfully migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] as part of the project's runtime migration.


669-671: Task spawning correctly migrated to tokio

The task spawning has been properly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the test's execution flow.


691-691: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] in line with the runtime migration.


739-741: Task spawning updated to use tokio runtime

The task spawning has been correctly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same behavior.


766-766: Test annotation successfully migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] as part of the project-wide migration.


799-801: Task spawning correctly migrated to tokio

The task spawning has been properly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the test's functionality.


820-820: Test annotation correctly migrated to tokio

The test annotation has been properly updated from #[async_std::test] to #[tokio::test] as part of the tokio runtime migration.


856-858: Task spawning updated to use tokio runtime

The task spawning has been correctly migrated from async_std::task::spawn to tokio::task::spawn, maintaining the same execution flow.

logic/strategy/Cargo.toml (1)

62-63: LGTM! Successfully migrated to tokio runtime

The change correctly adds tokio as a dev-dependency and configures hopr-db-sql with the runtime-tokio feature, which is in line with the project-wide migration from async-std to tokio.

chain/indexer/Cargo.toml (1)

55-58: LGTM! Successfully migrated to tokio runtime

The change correctly adds tokio as a dev-dependency and configures hopr-db-sql with the runtime-tokio feature, which aligns with the project-wide migration from async-std to tokio.

transport/session/src/types.rs (4)

638-638: LGTM! Successfully migrated test attribute to tokio

The test attribute has been correctly updated from async_std::test to tokio::test as part of the migration from async-std to tokio runtime.


669-669: LGTM! Successfully migrated test attribute to tokio

The test attribute has been correctly updated from async_std::test to tokio::test.


707-707: LGTM! Successfully migrated test attribute to tokio

The test attribute has been correctly updated from async_std::test to tokio::test.


741-741: LGTM! Successfully migrated test attribute to tokio

The test attribute has been correctly updated from async_std::test to tokio::test.

db/sql/Cargo.toml (1)

63-71: LGTM! Successfully migrated to tokio runtime and rustls features

The changes correctly update all dev-dependencies to use tokio runtime:

  1. Added tokio as a direct dev-dependency
  2. Updated sea-orm to use runtime-tokio-rustls feature
  3. Updated sea-query-binder to use runtime-tokio-rustls feature
  4. Updated sqlx to use runtime-tokio-rustls feature

These changes appropriately align with the project-wide migration from async-std to tokio.

hopr/hopr-lib/tests/common/mod.rs (3)

2-2: LGTM! Successfully migrated HTTP client to Reqwest

Updated to use ReqwestRequestor instead of SurfRequestor as part of the migration from async-std to tokio runtime.


13-13: LGTM! Successfully migrated to tokio sleep function

Updated to use tokio::time::sleep instead of async_std::task::sleep.


22-22: LGTM! Successfully updated Requestor type alias

Updated the Requestor type alias to use ReqwestRequestor instead of SurfRequestor.

transport/p2p/src/swarm.rs (1)

47-47: Excellent simplification of runtime configuration.

The conditional compilation has been simplified to only check for the "runtime-tokio" feature, removing the previous async-std related code path. This change aligns perfectly with the PR objective of standardizing on the Tokio runtime.

chain/indexer/src/block.rs (5)

656-656: Test attribute correctly migrated to tokio.

Replacing #[async_std::test] with #[tokio::test] correctly updates the test to use the tokio runtime.


691-691: Sleep function correctly migrated to tokio.

Replacing async_std::time::sleep with tokio::time::sleep properly updates the sleep function for the new runtime.


699-699: Test attribute with test_log wrapper correctly migrated to tokio.

Replacing #[test_log::test(async_std::test)] with #[test_log::test(tokio::test)] correctly updates the test to use the tokio runtime.


757-757: All sleep calls correctly migrated to tokio.

All instances of sleep calls have been properly migrated from async-std to tokio.

Also applies to: 809-809, 871-871, 952-952


765-765: Remaining test attributes correctly migrated to tokio.

All remaining test attributes have been properly updated to use the tokio runtime.

Also applies to: 816-816, 964-964, 1034-1034

transport/ticket-aggregation/Cargo.toml (3)

37-37: Dev dependency correctly switched to tokio.

The dev-dependency has been properly changed from async-std to tokio, aligning with the PR objective.


41-41: Criterion features correctly updated for tokio.

The criterion features have been properly updated from async_std to async_tokio, maintaining the async testing capabilities with the new runtime.


46-46: Dependency feature flag correctly updated for tokio.

The hopr-db-sql dependency's feature flag has been properly changed from runtime-async-std to runtime-tokio, ensuring consistent runtime usage across dependencies.

chain/rpc/src/rpc.rs (4)

475-475: Import correctly changed to use reqwest client.

The import has been correctly updated to use ReqwestRequestor instead of the previous SurfRequestor, aligning with the change from async-std to tokio.


515-515: Test attributes correctly migrated to tokio.

All test functions have been properly updated to use #[tokio::test] instead of #[async_std::test].

Also applies to: 568-568, 612-612, 669-669, 713-713, 757-757, 850-850


541-541: Client instances correctly changed to use ReqwestRequestor.

All instances of client creation now use ReqwestRequestor::default() instead of the previous SurfRequestor::default(), consistently applying the HTTP client change across the tests.

Also applies to: 548-548, 587-587, 594-594, 631-631, 638-638, 688-688, 695-695, 742-742, 749-749, 798-798, 805-805, 892-892, 899-899


723-723: RPC client creation correctly updated to use ReqwestRequestor.

The calls to create_rpc_client_to_anvil have been properly updated to use ReqwestRequestor, maintaining consistent HTTP client usage across the test suite.

Also applies to: 767-767, 861-861

transport/network/src/ping.rs (16)

275-275: Successfully migrated test annotations to Tokio

The change from #[async_std::test] to #[tokio::test] is correctly implemented as part of the project-wide migration to the tokio runtime.


293-293: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


310-310: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


319-319: Successfully migrated sleep function to Tokio

The sleep function has been properly updated from async_std::task::sleep to tokio::time::sleep.


337-337: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


341-341: Successfully migrated task spawning and cancellation to Tokio

The changes correctly update:

  1. Task spawning from async_std::task::spawn to tokio::task::spawn
  2. Task cancellation from cancel().await to abort() which is Tokio's equivalent method

These changes align with the Tokio runtime's API.

Also applies to: 359-359


364-364: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


368-368: Successfully migrated task spawning and cancellation to Tokio

The code correctly updates task spawning and cancellation methods to use Tokio's API.

Also applies to: 394-394


399-399: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


403-403: Successfully migrated task spawning and cancellation to Tokio

The code correctly updates task spawning and cancellation methods to use Tokio's API.

Also applies to: 428-428


433-433: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


438-438: Successfully migrated task spawning, sleep function, and cancellation to Tokio

The code correctly updates:

  1. Task spawning to tokio::task::spawn
  2. Sleep function to tokio::time::sleep
  3. Task cancellation to abort()

These changes align with Tokio's API.

Also applies to: 442-442, 469-469


474-474: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


478-478: Successfully migrated task spawning and cancellation to Tokio

The code correctly updates task spawning and cancellation methods to use Tokio's API.

Also applies to: 512-512


517-517: Successfully migrated test annotations to Tokio

The test annotation has been properly updated to use tokio::test instead of async_std::test.


523-523: Successfully migrated task spawning, sleep function, and cancellation to Tokio

The code correctly updates:

  1. Task spawning to tokio::task::spawn
  2. Sleep function to tokio::time::sleep
  3. Task cancellation to abort()

These changes align with Tokio's API.

Also applies to: 527-527, 570-570

transport/session/Cargo.toml (2)

22-24: Successfully removed async-std runtime feature

The runtime-async-std feature has been removed, leaving only the runtime-tokio feature, which aligns with the PR objective to standardize on the Tokio runtime.


51-53: Successfully updated dev-dependencies to use Tokio

The changes correctly:

  1. Replace async-std with tokio in dev-dependencies
  2. Update the hopr-network-types feature to use runtime-tokio instead of runtime-async-std

This aligns with the learnings that the project should standardize on the workspace level dependency of reqwest, which is compatible with tokio.

hopr/hopr-lib/tests/chain_integration_tests.rs (3)

18-18: Successfully migrated HTTP client to Reqwest

Changed from surf_client::SurfRequestor (which relies on async-std) to reqwest_client::ReqwestRequestor (which uses tokio), aligning with the PR objective to standardize on Tokio.


176-176: Successfully updated test attribute for Tokio runtime

The test attribute has been correctly updated to use tokio::test instead of async_std::test, maintaining the test_log::test wrapper.


195-218: Successfully replaced all SurfRequestor instances with ReqwestRequestor

All instances of SnapshotRequestor creation have been updated to use ReqwestRequestor instead of SurfRequestor, maintaining the same snapshot file paths and configuration options (ignore_snapshot, aggressive_save).

chain/actions/src/action_state.rs (13)

176-176: Successfully updated timeout import for Tokio

Replaced the import of async_std::prelude::FutureExt with tokio::time::timeout, which is the correct Tokio equivalent for timeout functionality.


183-183: Successfully migrated test attribute to Tokio

The test attribute has been properly updated to use tokio::test instead of async_std::test.


195-197: Successfully migrated task spawning and sleep function to Tokio

The code correctly updates:

  1. Task spawning from async_std::task::spawn to tokio::task::spawn
  2. Sleep function from using .delay() to tokio::time::sleep()

These changes align with Tokio's API.


204-213: Successfully updated timeout handling for Tokio

The timeout handling pattern has been correctly updated from the chained method style in async-std (.timeout()) to the wrapper function style in Tokio (timeout(duration, future)). This maintains the same timeout functionality while adapting to Tokio's API.


219-219: Successfully migrated test attribute to Tokio

The test attribute has been properly updated to use tokio::test instead of async_std::test.


230-233: Successfully migrated task spawning and sleep function to Tokio

The code correctly updates task spawning and sleep functionality to use Tokio's API.


235-244: Successfully updated timeout handling for Tokio

The timeout handling pattern has been correctly updated to use Tokio's wrapper function style.


253-253: Successfully migrated test attribute to Tokio

The test attribute has been properly updated to use tokio::test instead of async_std::test.


275-279: Successfully migrated task spawning and sleep function to Tokio

The task spawning and sleep function calls have been correctly updated to use Tokio's API in the loop that processes test events.


282-294: Successfully updated timeout handling for Tokio

The timeout handling pattern has been correctly updated to use Tokio's wrapper function style while maintaining the same timeout duration and functionality.


300-300: Successfully migrated test attribute to Tokio

The test attribute has been properly updated to use tokio::test instead of async_std::test.


321-325: Successfully migrated task spawning and sleep function to Tokio

The task spawning and sleep function calls have been correctly updated to use Tokio's API in the loop that processes test events.


344-346: Successfully updated timeout handling for Tokio

The timeout wrapper has been correctly applied to the futures::future::try_join_all call, maintaining the same timeout functionality while adapting to Tokio's API.

transport/p2p/tests/p2p_transport_test.rs (3)

121-121: Task cancellation method updated correctly

The change from cancel().await to abort() correctly adapts to Tokio's JoinHandle API for task cancellation.


126-129: Import statements correctly migrated to tokio

The imports have been correctly updated from async-std to tokio, maintaining equivalent functionality for task spawning, JoinHandle, and time utilities.


134-135: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[async_std::test] to #[tokio::test] to align with the new runtime.

hopli/src/environment_config.rs (5)

29-34: Successfully migrated HTTP client imports

Imports have been correctly updated to use DefaultHttpRequestor from hopr_chain_api instead of the previous type alias, aligning with the standardization on tokio-based HTTP clients.


130-131: HTTP client instantiation updated for provider with signer

The code correctly creates a JSON RPC client using the tokio-compatible DefaultHttpRequestor instead of the async-std-based DefaultHttpPostRequestor.


162-163: HTTP client instantiation updated for provider without signer

The code correctly creates a JSON RPC client using the tokio-compatible DefaultHttpRequestor instead of the async-std-based DefaultHttpPostRequestor.


306-307: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[async_std::test] to #[tokio::test] to align with the new runtime.


327-328: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[async_std::test] to #[tokio::test] to align with the new runtime.

transport/ticket-aggregation/src/lib.rs (9)

443-444: Timeout utility import successfully migrated

The code now correctly imports timeout from tokio::time instead of using the FutureExt trait extension method from async-std.


526-527: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[async_std::test] to #[tokio::test] to align with the new runtime.


584-585: Timeout call correctly migrated to tokio

The timeout pattern has been properly updated from the async-std extension method .timeout(Duration::from_secs(5)).await to the tokio function call timeout(Duration::from_secs(5), future).await.


601-602: Timeout call correctly migrated to tokio

The timeout pattern has been properly updated from the async-std extension method to the tokio function call.


608-609: Timeout call correctly migrated to tokio

The timeout pattern has been properly updated from the async-std extension method to the tokio function call.


652-653: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[async_std::test] to #[tokio::test] to align with the new runtime.


706-707: Timeout call correctly migrated to tokio

The timeout pattern has been properly updated from the async-std extension method to the tokio function call.


723-724: Timeout call correctly migrated to tokio

The timeout pattern has been properly updated from the async-std extension method to the tokio function call.


730-731: Timeout call correctly migrated to tokio

The timeout pattern has been properly updated from the async-std extension method to the tokio function call.

common/network-types/src/session/state.rs (13)

1170-1192: Task spawning and joining logic updated for tokio

The task spawning has been properly migrated from async-std to tokio, with appropriate changes to the await patterns for handling task completion. The use of async move blocks with explicit await calls adapts to tokio's task joining semantics.


1216-1217: Parameterized test macro updated to tokio

The parameterized test attribute has been correctly migrated from #[parameterized_macro(async_std::test)] to #[parameterized_macro(tokio::test)].


1238-1239: Parameterized test macro updated to tokio

The parameterized test attribute has been correctly migrated from #[parameterized_macro(async_std::test)] to #[parameterized_macro(tokio::test)].


1257-1258: Parameterized test macro updated to tokio

The parameterized test attribute has been correctly migrated from #[parameterized_macro(async_std::test)] to #[parameterized_macro(tokio::test)].


1288-1289: Parameterized test macro updated to tokio

The parameterized test attribute has been correctly migrated from #[parameterized_macro(async_std::test)] to #[parameterized_macro(tokio::test)].


1319-1320: Parameterized test macro updated to tokio

The parameterized test attribute has been correctly migrated from #[parameterized_macro(async_std::test)] to #[parameterized_macro(tokio::test)].


1350-1351: Parameterized test macro updated to tokio

The parameterized test attribute has been correctly migrated from #[parameterized_macro(async_std::test)] to #[parameterized_macro(tokio::test)].


1378-1379: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[test(async_std::test)] to #[test(tokio::test)] to align with the new runtime.


1422-1423: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[test(async_std::test)] to #[test(tokio::test)] to align with the new runtime.


1467-1468: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[test(async_std::test)] to #[test(tokio::test)] to align with the new runtime.


1488-1489: Sleep call correctly migrated to tokio

The sleep call has been properly updated from async_std::task::sleep to tokio::time::sleep.


1498-1499: Test attribute correctly updated to tokio

The test attribute has been properly migrated from #[test(async_std::test)] to #[test(tokio::test)] to align with the new runtime.


1520-1521: Sleep call correctly migrated to tokio

The sleep call has been properly updated from async_std::task::sleep to tokio::time::sleep.

chain/rpc/src/indexer.rs (4)

232-232: Correct update to tokio's timeout implementation.

This change correctly imports the timeout function from the tokio::time module to replace the previously used async_std::prelude::FutureExt trait that provided .timeout() method on futures.


241-241: Correctly switched to Tokio-compatible HTTP client.

The change from SurfRequestor (async-std based) to ReqwestRequestor (tokio based) aligns with the migration from async-std to tokio runtime.


267-267: Test annotation correctly updated to Tokio.

Changed test annotation from #[async_std::test] to #[tokio::test] as part of the migration to the tokio runtime.

Also applies to: 301-301, 336-336, 471-471


309-310: HTTP client instances updated to use Tokio-compatible implementation.

Correctly updated all HTTP client instances to use ReqwestRequestor instead of SurfRequestor.

Also applies to: 323-324, 368-369, 505-506, 512-512

logic/strategy/src/aggregating.rs (5)

321-321: Correct import of tokio timeout functionality.

This change correctly imports the timeout function from the tokio::time module to replace the previously used async_std::prelude::FutureExt trait.


469-469: Task spawning correctly updated to use Tokio.

Task spawning mechanism updated from async_std::task::spawn to tokio::task::spawn for compatibility with the tokio runtime.


517-517: Test annotation correctly updated to Tokio.

All test annotations have been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to the tokio runtime.

Also applies to: 564-564, 611-611, 662-662, 717-717


551-551: Sleep functionality correctly updated to use Tokio.

Sleep functionality updated from async_std::task::sleep to tokio::time::sleep for compatibility with the tokio runtime.

Also applies to: 598-598


705-705: Timeout handling correctly updated to Tokio pattern.

The timeout pattern has been correctly updated from the async-std style to the tokio style, which wraps the future in the timeout function instead of calling timeout as a method on the future.

Also applies to: 761-763

hoprd/hoprd/src/main.rs (1)

145-145: Simplified runtime attribute for Tokio.

The runtime attribute has been simplified to only use tokio's main attribute, removing the conditional compilation for async-std which aligns with the PR objective of standardizing on tokio as the sole runtime.

transport/mixer/src/channel.rs (5)

304-304: Correctly updated to tokio's timeout implementation.

This change correctly imports the timeout function from the tokio::time module to replace the previously used async_std::prelude::FutureExt trait.


313-313: Test annotations correctly updated to use Tokio.

All test annotations have been correctly updated from #[async_std::test] to #[tokio::test] as part of the migration to the tokio runtime.

Also applies to: 322-322, 338-338, 363-363, 390-390, 413-413, 437-437, 462-462


351-351: Timeout handling correctly updated to Tokio pattern.

The timeout pattern has been correctly updated from the async-std style (chaining .timeout() on futures) to the tokio style (wrapping futures with the timeout() function). All instances throughout the test module have been consistently updated.

Also applies to: 371-372, 381-383, 403-408, 427-432, 452-457, 479-484


370-370: Task spawning correctly updated to use Tokio.

Task spawning mechanism updated from async_std::task::spawn to tokio::task::spawn for compatibility with the tokio runtime.

Also applies to: 378-378


385-385: Error handling correctly adjusted for nested futures.

The error handling pattern has been correctly updated to account for the changed nesting of Results when using tokio's timeout pattern with futures::try_join.

chain/rpc/Cargo.toml (1)

67-67: Looks good: Added tokio as a dev dependency.

This change aligns with the PR objective to transition from async-std to tokio as the standard async runtime. With tokio now available in dev-dependencies, tests in this crate can use tokio's async runtime.

hoprd/db/api/Cargo.toml (1)

35-39: Successfully migrated from async-std to tokio runtime.

The changes correctly update sea-orm and sqlx to use the tokio runtime with rustls instead of async-std, which aligns with the PR objectives.

transport/protocol/tests/common/mod.rs (4)

29-29: Import of tokio's timeout function is correct.

This properly replaces the FutureExt trait from async-std which provided the .timeout() method on futures.


378-378: Successfully migrated task spawning to tokio.

The change from async_std::task::spawn to tokio::task::spawn is correct for spawning the task to emulate channel communication.


422-422: Correctly migrated timeout handling to tokio.

The code now uses timeout(TIMEOUT_SECONDS, compare_packets).await instead of chaining .timeout() on the future, which is the proper way to use timeouts with tokio.


436-437: Properly updated timeout usage for ticket checks.

This correctly replaces the async-std style timeout with tokio's timeout function while maintaining the same functionality.

common/network-types/src/session/frame.rs (7)

749-749: Successfully migrated test annotations to tokio.

All test annotations have been properly updated from #[async_std::test] to #[tokio::test] to support the migration from async-std to tokio runtime.

Also applies to: 769-769, 829-829, 848-848, 888-888, 910-910, 965-965, 1019-1019, 1091-1091, 1150-1150, 1210-1210


838-838: Sleep functionality properly migrated to tokio.

All instances of async_std::task::sleep have been correctly replaced with tokio::time::sleep, maintaining the same timing functionality.

Also applies to: 956-956, 1008-1008, 1034-1034, 1113-1113, 1198-1198, 1220-1220


938-938: Task spawning with type annotation updated for tokio.

The code now spawns tasks using tokio::task::spawn with the appropriate type annotation for the JoinHandle. This ensures type compatibility with the existing code that expects a specific JoinHandle type.

Also applies to: 991-991


1033-1033: Successfully migrated task spawning in buffer_unordered.

The migration from async-std to tokio for task spawning within the stream processing pipeline is correct.


1039-1039: Added Result unwrapping to stream processing.

The addition of .map(Result::unwrap) after .buffer_unordered(4) is necessary because tokio's JoinHandle result structure differs slightly from async-std's. This ensures the returned values are properly unwrapped before being forwarded to the sink.


960-962: Updated join handle awaiting and error propagation.

The code now properly propagates errors from the join handle with .await?? and returns an explicit Ok(()). This handles a subtle difference in how tokio's JoinHandles work compared to async-std.

Also applies to: 1014-1016


1234-1234: Error propagation added for join handle.

The ? operator has been added to eviction_jh.await to propagate any errors from the spawned task. This is necessary when migrating to tokio's JoinHandle which has a different error propagation model.

common/async-runtime/src/lib.rs (2)

6-6: Good addition of deprecation notice for the async-std feature

This effectively communicates to users that they should migrate to tokio, aligning with the PR's goal of removing the deprecated async-std crate.


18-18: Clean feature flag simplification

Good simplification of the conditional compilation for tokio. Previously, this was likely guarded with #[cfg(all(feature = "runtime-tokio", not(feature = "runtime-async-std")))] to ensure mutual exclusivity, but now tokio is the standard runtime and can be unconditionally enabled when its feature is present.

common/network-types/src/session/utils.rs (8)

206-206: Appropriate import for tokio's JoinError

Correctly importing the JoinError type from tokio to handle task result errors.


211-214: Updated return type signatures for tokio compatibility

The function signature has been properly updated to account for tokio's different task spawning mechanism that returns Result<Vec<u8>, JoinError> rather than async-std's approach.


221-221: Correctly migrated task spawning to tokio

Task spawning calls have been appropriately converted from async_std::task::spawn to tokio::task::spawn.

Also applies to: 234-234


247-247: Updated test attributes to use tokio

Test annotations have been consistently changed from #[async_std::test] to #[tokio::test].

Also applies to: 274-274, 298-298


261-263: Proper error handling for tokio tasks

The code now correctly handles awaiting tokio tasks with explicit expect calls, which is necessary since tokio's task join handles return Results wrapped with JoinError.

Also applies to: 289-292


754-754: Updated import for tokio timeout

Correctly importing timeout from tokio's time module, replacing the previous usage of the timeout extension method from async-std.


889-900: Proper timeout pattern for tokio

The timeout pattern has been correctly updated from async-std's .timeout(Duration) chaining to tokio's timeout(Duration, future) function call.

Also applies to: 1023-1034


912-912: Updated sleep calls to use tokio

Sleep calls have been properly migrated from async_std::time::sleep to tokio::time::sleep.

Also applies to: 915-915, 1047-1047

chain/api/src/lib.rs (1)

36-37: Standardized on tokio-based HTTP requestor

The DefaultHttpRequestor type alias has been correctly updated to only use the tokio-based ReqwestRequestor, removing the conditional path for SurfRequestor which was tied to async-std. This aligns with the PR's objective of standardizing on the tokio runtime.

transport/session/src/manager.rs (2)

814-816: Updated blocking approach for tokio runtime

The mock transport handlers have been correctly updated to use tokio::runtime::Runtime::new().expect().block_on() instead of async_std::task::block_on(), which is necessary due to tokio's different approach to blocking operations.

Also applies to: 835-837, 857-858, 892-893, 948-950, 969-971, 990-992, 1004-1006, 1094-1096, 1108-1110


771-771: Consistently updated test attributes

All test attributes have been properly migrated from async-std to tokio, including both standalone #[tokio::test] and combined #[test_log::test(tokio::test)] attributes.

Also applies to: 793-793, 923-923, 1056-1056, 1140-1140

chain/rpc/src/client.rs (9)

912-929: LGTM – runtime attribute migrated

The switch to #[tokio::test] together with ReqwestRequestor is correct and compiles cleanly.


930-954: LGTM – malformed-response assertion

Only the runtime/client changed; the assertion logic is untouched.


956-991: Retry-on-HTTP-error test: consider a tighter back-off

To keep the test fast you can lower initial_backoff (e.g. 10–20 ms); otherwise looks good.


993-1019: LGTM – zero-retry policy test

Behaviour preserved; no issues.


1021-1065: LGTM – JSON-RPC retry test

No further remarks.


1067-1111: LGTM – non-retryable JSON-RPC error test

Assertions remain valid.


1113-1158: LGTM – min-retries enforcement

Test accurately checks min_retries; no concerns.


1160-1203: LGTM – malformed JSON-RPC error handling

The runtime migration is correct and logic intact.


1220-1266: Snapshot-based test under Tokio

Works correctly; temp-file is cleaned up via Drop, good job.

logic/path/src/lib.rs (6)

567-575: LGTM – async zero-hop test

Runtime migration is correct; logic unchanged.


590-608: LGTM – zero-hop non-open channel test

No issues spotted.


638-663: LGTM – non-open channel (mid-path) negative tests

Behaviour remains identical; good.


667-693: LGTM – non-existing channel (mid-path) negative tests

Looks correct.


697-709: LGTM – simple loop rejection

Assertion logic intact.


715-725: LGTM – long cycle acceptance

Test passes under Tokio; no further comments.

@Teebor-Choka Teebor-Choka force-pushed the kauki/replace-tests-with-tokio-to-replace-deprecated-async-std branch from bbac42e to 7cd473c Compare May 6, 2025 08:57
Copy link
Contributor

@tolbrino tolbrino left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't forget to bump crate versions.

@NumberFour8
Copy link
Contributor

There's a mockall problem as it cannot return a future even in a mocked async-trait:

failures:

---- manager::tests::session_manager_should_not_allow_establish_session_when_tag_range_is_used_up stdout ----

thread 'manager::tests::session_manager_should_not_allow_establish_session_when_tag_range_is_used_up' panicked at transport/session/src/manager.rs:1085:22:
Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- manager::tests::session_manager_should_close_idle_session_automatically stdout ----

thread 'manager::tests::session_manager_should_close_idle_session_automatically' panicked at transport/session/src/manager.rs:943:22:
Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.

---- manager::tests::session_manager_should_follow_start_protocol_to_establish_new_session_and_close_it stdout ----

thread 'manager::tests::session_manager_should_follow_start_protocol_to_establish_new_session_and_close_it' panicked at transport/session/src/manager.rs:814:51:
Cannot start a runtime from within a runtime. This happens because a function (like `block_on`) attempted to block the current thread while the thread is being used to drive asynchronous tasks.


failures:
    manager::tests::session_manager_should_close_idle_session_automatically
    manager::tests::session_manager_should_follow_start_protocol_to_establish_new_session_and_close_it
    manager::tests::session_manager_should_not_allow_establish_session_when_tag_range_is_used_up

@Teebor-Choka Teebor-Choka force-pushed the kauki/replace-tests-with-tokio-to-replace-deprecated-async-std branch from c0d10bb to d45672d Compare May 6, 2025 18:46
@Teebor-Choka Teebor-Choka force-pushed the kauki/replace-tests-with-tokio-to-replace-deprecated-async-std branch from 2827458 to 040eca2 Compare May 7, 2025 07:36
@Teebor-Choka Teebor-Choka changed the title Remove the 'async-std' deprecated crate Remove the 'async-std' due to deprecation May 7, 2025
@Teebor-Choka Teebor-Choka linked an issue May 7, 2025 that may be closed by this pull request
1 task
@tolbrino tolbrino removed the request for review from NumberFour8 May 8, 2025 11:41
@Teebor-Choka Teebor-Choka merged commit 30291e0 into master May 8, 2025
28 of 31 checks passed
@Teebor-Choka Teebor-Choka deleted the kauki/replace-tests-with-tokio-to-replace-deprecated-async-std branch May 8, 2025 20:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment