#async #networking #async-networking #rpc #rpc-service #testing

aldrin-test

Utilities for Aldrin server and client tests

11 breaking releases

0.12.0 Jan 26, 2025
0.10.0 Nov 26, 2024
0.7.0 Jul 25, 2024
0.3.0 Jan 18, 2024
0.2.0 Nov 27, 2023

#1834 in Network programming

MIT/Apache

1MB
30K SLoC

Utilities for Aldrin server and client tests

This crate provides a simple way to quickly setup a complete Aldrin bus with a broker and multiple clients and is intended to be used in unit tests.

If you are using Tokio, it is strongly recommended to enable this crate's tokio feature and use the types in the tokio module instead of the crate-level types.


Aldrin

Crates.io Crates.io Build status

Aldrin is a message bus for service-oriented RPC and general interprocess communication.

Aldrin busses are star-shaped: there is a cental component, called the broker, to which multiple clients can connect. These client can then publish services for other clients to use.

Services are described in a small DSL called Aldrin schema and are composed of functions and events. Schemata are then processed by a code generator, which can output both client and server-side code.

Here is a small toy example of an echo service:

service Echo {
    uuid = 8920965f-110a-42ec-915c-2a65a3c47d1f;
    version = 1;

    fn echo @ 1 {
        args = string;
        ok = string;

        err = enum {
            EmptyString @ 1;
        }
    }

    fn echo_all @ 2 {
        args = string;

        err = enum {
            EmptyString @ 1;
        }
    }

    event echoed_to_all @ 1 = string;
}

Crate organization

  • aldrin: This is the main crate, aimed at writing both client and server applications.
  • aldrin-broker: Implements the broker-side of the protocol.
  • aldrin-core: Shared protocol primitives used by aldrin and aldrin-broker.
  • aldrin-test: Utilities for setting up unit tests of Aldrin services.
  • aldrin-parser: Parser library for Aldrin schemata.
  • aldrin-codegen: Implements client and server code generation from Aldrin schemata.
  • aldrin-gen: Standalone frontend to the parser and code generation.
  • aldrin-macros: Contains a macro for code generation at compile-time.

Dependencies

~1.2–7.5MB
~58K SLoC