]> git.proxmox.com Git - proxmox-backup.git/blame - tests/verify-api.rs
tests/verify-api.rs: remove unused use clause
[proxmox-backup.git] / tests / verify-api.rs
CommitLineData
5e6b9e44
DM
1use failure::*;
2
3use proxmox_backup::api2;
4use proxmox::api::*;
5use proxmox::api::schema::*;
5e6b9e44
DM
6
7// Simply test if api lookup tables inside Routers and Schemas are
8// correctly sorted.
9
10fn verify_object_schema(schema: &ObjectSchema) -> Result<(), Error> {
11
12 let map = schema.properties;
13
14 if map.len() >= 1 {
15
16 for i in 1..map.len() {
17
18 if map[i].0 <= map[i-1].0 {
19 for (name, _, _) in map.iter() {
20 eprintln!("{}", name);
21 }
22 bail!("found unsorted property map ({} <= {})", map[i].0, map[i-1].0);
23 }
24 }
25 }
26
27 for (_name, _, sub_schema) in map.iter() {
28 verify_schema(sub_schema)?;
29 }
30
31 Ok(())
32}
33
34fn verify_schema(schema: &Schema) -> Result<(), Error> {
35 match schema {
36 Schema::Object(obj_schema) => {
37 verify_object_schema(obj_schema)?;
38 }
39 Schema::Array(arr_schema) => {
40 verify_schema(arr_schema.items)?;
41 }
42 _ => {}
43 }
44 Ok(())
45}
46fn verify_api_method(
47 method: &str,
48 path: &str,
49 info: &ApiMethod
50) -> Result<(), Error>
51{
52 verify_object_schema(info.parameters)
53 .map_err(|err| format_err!("{} {} parameters: {}", method, path, err))?;
54
55 verify_schema(info.returns)
56 .map_err(|err| format_err!("{} {} returns: {}", method, path, err))?;
57
58 Ok(())
59}
60
61fn verify_dirmap(
62 path: &str,
63 dirmap: SubdirMap,
64) -> Result<(), Error> {
65
66 if dirmap.len() >= 1 {
67
68 for i in 1..dirmap.len() {
69
70 if dirmap[i].0 <= dirmap[i-1].0 {
71 for (name, _) in dirmap.iter() {
72 eprintln!("{}/{}", path, name);
73 }
74 bail!("found unsorted dirmap at {:?} ({} <= {})", path, dirmap[i].0, dirmap[i-1].0);
75 }
76
77 }
78 }
79
80 for (name, router) in dirmap.iter() {
81 let sub_path = format!("{}/{}", path, name);
82 verify_router(&sub_path, router)?;
83 }
84
85 Ok(())
86}
87
88fn verify_router(path: &str, router: &Router) -> Result<(), Error> {
89
90 println!("Verify {}", path);
91
92 if let Some(api_method) = router.get {
93 verify_api_method("GET", path, api_method)?;
94 }
95 if let Some(api_method) = router.put {
96 verify_api_method("PUT", path, api_method)?;
97 }
98 if let Some(api_method) = router.post {
99 verify_api_method("POST", path, api_method)?;
100 }
101 if let Some(api_method) = router.delete {
102 verify_api_method("DELETE", path, api_method)?;
103 }
104
105 match router.subroute {
106 Some(SubRoute::Map(dirmap)) => {
107 verify_dirmap(path, dirmap)?;
108 }
109 Some(SubRoute::MatchAll { router, param_name }) => {
110 let path = format!("{}/{{{}}}", path, param_name);
111 verify_router(&path, router)?;
112 }
113 None => {}
114 }
115
116 Ok(())
117}
118
119#[test]
120fn verify_backup_api() -> Result<(), Error> {
121
122 let api = &api2::backup::BACKUP_API_ROUTER;
123 verify_router("backup-api", api)?;
124
125 Ok(())
126}
127
128#[test]
129fn verify_reader_api() -> Result<(), Error> {
130
131 let api = &api2::reader::READER_API_ROUTER;
132 verify_router("reader-api", api)?;
133
134 Ok(())
135}
136
137#[test]
138fn verify_root_api() -> Result<(), Error> {
139
140 let api = &api2::ROUTER;
141 verify_router("root", api)?;
142
143 Ok(())
144}