zerokms_protocol/
testing.rs

1//! Implementations of `Dummy` for various types in the `zerokms-protocol` crate.
2use fake::{
3    faker::lorem::en::{Word, Words},
4    Dummy, Fake, Faker,
5};
6use rand::{Fill, Rng};
7use std::borrow::Cow;
8use uuid::Uuid;
9
10use crate::{
11    CreateClientRequest, CreateDatasetRequest, Dataset, GenerateKeyRequest, GenerateKeySpec,
12    GrantDatasetRequest,
13};
14
15/// Generate a random `CreateDatasetRequest` with a random description and the given name.
16impl Dummy<&'static str> for CreateDatasetRequest<'_> {
17    fn dummy_with_rng<R: Rng + ?Sized>(name: &&'static str, _: &mut R) -> Self {
18        Self {
19            name: Cow::Borrowed(*name),
20            description: Cow::Owned("description".to_string()),
21        }
22    }
23}
24
25impl Dummy<Faker> for Dataset {
26    fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, _: &mut R) -> Self {
27        Self {
28            id: Uuid::new_v4(),
29            name: Word().fake(),
30            description: Words(3..10).fake::<Vec<String>>().join(" "),
31        }
32    }
33}
34
35/// Generate a random `CreateDatasetRequest` with a random name and description.
36impl Dummy<Faker> for CreateDatasetRequest<'_> {
37    fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, _: &mut R) -> Self {
38        let words: Vec<String> = Words(3..10).fake();
39
40        Self {
41            name: Cow::Owned(Word().fake()),
42            description: Cow::Owned(words.join(" ")),
43        }
44    }
45}
46
47/// Generate a random `CreateClientRequest` for the given `Dataset`.
48/// The name and description are random.
49impl Dummy<Dataset> for CreateClientRequest<'_> {
50    fn dummy_with_rng<R: Rng + ?Sized>(Dataset { id, .. }: &Dataset, _: &mut R) -> Self {
51        Self {
52            dataset_id: *id,
53            name: Cow::Owned(Word().fake()),
54            description: Cow::Owned(Word().fake()),
55        }
56    }
57}
58
59/// Generate a `GrantDatasetRequest` for the given `Dataset` and client ID (`Uuid`).
60impl Dummy<(&Dataset, Uuid)> for GrantDatasetRequest {
61    fn dummy_with_rng<R: Rng + ?Sized>((dataset, client_id): &(&Dataset, Uuid), _: &mut R) -> Self {
62        Self {
63            dataset_id: dataset.id,
64            client_id: *client_id,
65        }
66    }
67}
68
69impl Dummy<(&Dataset, Uuid)> for GenerateKeyRequest<'_> {
70    fn dummy_with_rng<R: Rng + ?Sized>((dataset, client_id): &(&Dataset, Uuid), _: &mut R) -> Self {
71        Self {
72            dataset_id: Some(dataset.id),
73            client_id: *client_id,
74            keys: Cow::Owned(fake::vec![GenerateKeySpec; 4]),
75        }
76    }
77}
78
79impl Dummy<Faker> for GenerateKeySpec<'_> {
80    fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, rng: &mut R) -> Self {
81        let mut buf: [u8; 16] = Default::default();
82        buf.try_fill(rng).unwrap();
83
84        Self {
85            iv: buf,
86            descriptor: Cow::Owned(Word().fake()),
87            context: vec![],
88        }
89    }
90}