tor_netdoc/
testdata_live.rs1use paste::paste;
7
8use crate::doc::microdesc::Microdesc;
9use crate::doc::netstatus;
10use crate::doc::routerdesc::{RouterDesc, RouterDescUnverified};
11use crate::parse2::{NetdocParseable, NetdocParseableUnverified};
12use crate::test_support::parse_test_document;
13
14#[macro_use]
15#[path = "../testdata-live/generated_consts.rs"]
16#[rustfmt::skip] mod generated_consts;
18
19pub use generated_consts::*;
20
21#[derive(Clone, Debug)]
23#[non_exhaustive]
24pub struct PerVariety {
25 pub plain: &'static str,
27
28 pub md: &'static str,
30
31 pub vote: &'static str,
33}
34
35#[derive(Clone, Debug)]
37#[non_exhaustive]
38pub struct PerRelay {
39 pub nick: &'static str,
41
42 pub data: PerVariety,
44}
45
46#[derive(Debug, Clone, Copy)]
53#[non_exhaustive]
54pub struct RelayDocument<D: 'static> {
55 pub nick: &'static str,
57
58 pub doc: &'static D,
60}
61
62fn relay_documents<D, S>(inputs: &[PerRelay], selector: S) -> Vec<RelayDocument<D>>
64where
65 D: NetdocParseable + Sync,
66 S: Fn(&PerVariety) -> &'static str,
67{
68 inputs
69 .iter()
70 .map(|relay| RelayDocument {
71 nick: relay.nick,
72 doc: parse_test_document::<D>(selector(&relay.data)),
73 })
74 .collect()
76}
77
78fn unwrap_bodies<U>(u: Vec<RelayDocument<U>>) -> Vec<RelayDocument<U::Body>>
80where
81 U: NetdocParseableUnverified,
82{
83 u.into_iter()
84 .map(|rd| RelayDocument {
85 nick: rd.nick,
86 doc: rd.doc.inspect_unverified().0,
87 })
88 .collect()
89}
90
91macro_rules! netstatus_variety { { $v:ident } => { paste!{
95 pub fn [<netstatus_ $v _unverified>]() -> &'static netstatus::$v::NetworkStatusUnverified {
97 parse_test_document(NETSTATUS.$v)
98 }
99 pub fn [<netstatus_ $v>]() -> &'static netstatus::$v::NetworkStatus {
101 [<netstatus_ $v _unverified>]().inspect_unverified().0
102 }
103 pub fn [<relay_routerstatuses_ $v>]() -> Vec<RelayDocument<netstatus::$v::RouterStatus>> {
105 relay_documents(RELAY_ROUTERSTATUSES, |relay| relay.$v)
106 }
107} } }
108
109netstatus_variety! { plain }
110netstatus_variety! { md }
111netstatus_variety! { vote }
112
113pub fn relay_routerdescs() -> Vec<RelayDocument<RouterDesc>> {
115 unwrap_bodies(relay_routerdescs_unverified())
116}
117pub fn relay_routerdescs_unverified() -> Vec<RelayDocument<RouterDescUnverified>> {
119 relay_documents(RELAY_DESCRIPTORS, |relay| relay.plain)
120}
121pub fn relay_routerdescs_vote() -> Vec<RelayDocument<RouterDesc>> {
123 unwrap_bodies(relay_routerdescs_vote_unverified())
124}
125pub fn relay_routerdescs_vote_unverified() -> Vec<RelayDocument<RouterDescUnverified>> {
127 relay_documents(RELAY_DESCRIPTORS, |relay| relay.vote)
128}
129pub fn relay_microdescs() -> Vec<RelayDocument<Microdesc>> {
132 relay_documents(RELAY_DESCRIPTORS, |relay| relay.md)
133}
134
135pub fn relay_document_by_nick<D>(nick: &str, docs: &[RelayDocument<D>]) -> &'static D {
153 docs.iter().find(|d| d.nick == nick).expect(nick).doc
154}
155
156#[test]
157fn test_all() {
158 netstatus_plain();
159 netstatus_md();
160 netstatus_vote();
161
162 netstatus_plain_unverified();
163 netstatus_md_unverified();
164 netstatus_vote_unverified();
165
166 relay_routerstatuses_plain();
167 relay_routerstatuses_md();
168 relay_routerstatuses_vote();
169
170 relay_routerdescs();
171 relay_routerdescs_unverified();
172
173 relay_routerdescs_vote();
174 relay_routerdescs_vote_unverified();
175
176 relay_microdescs();
177}