p2panda_encryption/
test_utils.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! Internal helpers for writing (fuzz-) tests against `p2panda-encryption`.
4use std::fmt::Display;
5
6use serde::{Deserialize, Serialize};
7
8use crate::traits::OperationId;
9
10// Re-export private types for fuzz tests when `test_utils` feature flag is enabled.
11pub mod crypto {
12    pub use crate::crypto::x25519::SecretKey;
13}
14
15pub mod data_scheme {
16    pub use crate::data_scheme::test_utils::*;
17}
18
19pub mod message_scheme {
20    pub use crate::message_scheme::test_utils::*;
21}
22
23/// Simple member id for tests.
24pub type MemberId = usize;
25
26/// Simple message id for tests with monotonically incrementing sequence numbers per peer.
27///
28/// This contains the sender again as we need unique message ids and just using the sequence number
29/// would not be sufficient.
30#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
31pub struct MessageId {
32    pub sender: MemberId,
33    pub seq: usize,
34}
35
36impl MessageId {
37    pub fn new(my_id: MemberId) -> Self {
38        Self {
39            sender: my_id,
40            seq: 0,
41        }
42    }
43
44    pub fn inc(&self) -> Self {
45        Self {
46            sender: self.sender,
47            seq: self.seq + 1,
48        }
49    }
50}
51
52impl Display for MessageId {
53    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
54        write!(f, "[id={}, seq={}]", self.sender, self.seq)
55    }
56}
57
58impl OperationId for MessageId {}