zerokms_protocol/
testing.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//! Implementations of `Dummy` for various types in the `zerokms-protocol` crate.
use fake::{
    faker::lorem::en::{Word, Words},
    Dummy, Fake, Faker,
};
use rand::{Fill, Rng};
use std::borrow::Cow;
use uuid::Uuid;

use crate::{
    CreateClientRequest, CreateDatasetRequest, Dataset, GenerateKeyRequest, GenerateKeySpec,
    GrantDatasetRequest,
};

/// Generate a random `CreateDatasetRequest` with a random description and the given name.
impl<'a> Dummy<&'static str> for CreateDatasetRequest<'a> {
    fn dummy_with_rng<R: Rng + ?Sized>(name: &&'static str, _: &mut R) -> Self {
        Self {
            name: Cow::Borrowed(*name),
            description: Cow::Owned("description".to_string()),
        }
    }
}

impl Dummy<Faker> for Dataset {
    fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, _: &mut R) -> Self {
        Self {
            id: Uuid::new_v4(),
            name: Word().fake(),
            description: Words(3..10).fake::<Vec<String>>().join(" "),
        }
    }
}

/// Generate a random `CreateDatasetRequest` with a random name and description.
impl<'a> Dummy<Faker> for CreateDatasetRequest<'a> {
    fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, _: &mut R) -> Self {
        let words: Vec<String> = Words(3..10).fake();

        Self {
            name: Cow::Owned(Word().fake()),
            description: Cow::Owned(words.join(" ")),
        }
    }
}

/// Generate a random `CreateClientRequest` for the given `Dataset`.
/// The name and description are random.
impl Dummy<Dataset> for CreateClientRequest<'_> {
    fn dummy_with_rng<R: Rng + ?Sized>(Dataset { id, .. }: &Dataset, _: &mut R) -> Self {
        Self {
            dataset_id: *id,
            name: Cow::Owned(Word().fake()),
            description: Cow::Owned(Word().fake()),
        }
    }
}

/// Generate a `GrantDatasetRequest` for the given `Dataset` and client ID (`Uuid`).
impl Dummy<(&Dataset, Uuid)> for GrantDatasetRequest {
    fn dummy_with_rng<R: Rng + ?Sized>((dataset, client_id): &(&Dataset, Uuid), _: &mut R) -> Self {
        Self {
            dataset_id: dataset.id,
            client_id: *client_id,
        }
    }
}

impl Dummy<(&Dataset, Uuid)> for GenerateKeyRequest<'_> {
    fn dummy_with_rng<R: Rng + ?Sized>((dataset, client_id): &(&Dataset, Uuid), _: &mut R) -> Self {
        Self {
            dataset_id: Some(dataset.id),
            client_id: *client_id,
            keys: Cow::Owned(fake::vec![GenerateKeySpec; 4]),
        }
    }
}

impl Dummy<Faker> for GenerateKeySpec<'_> {
    fn dummy_with_rng<R: Rng + ?Sized>(_: &Faker, rng: &mut R) -> Self {
        let mut buf: [u8; 16] = Default::default();
        buf.try_fill(rng).unwrap();

        Self {
            iv: buf,
            descriptor: Cow::Owned(Word().fake()),
        }
    }
}