1 use anyhow
::{bail, format_err, Error}
;
3 use proxmox_backup
::api2
;
5 use proxmox
::api
::schema
::*;
7 // Simply test if api lookup tables inside Routers and Schemas are
10 fn verify_object_schema(schema
: &ObjectSchema
) -> Result
<(), Error
> {
12 let map
= schema
.properties
;
16 for i
in 1..map
.len() {
18 if map
[i
].0 <= map
[i
-1].0 {
19 for (name
, _
, _
) in map
.iter() {
20 eprintln
!("{}", name
);
22 bail
!("found unsorted property map ({} <= {})", map
[i
].0, map
[i
-1].0);
27 for (_name
, _
, sub_schema
) in map
.iter() {
28 verify_schema(sub_schema
)?
;
34 fn verify_schema(schema
: &Schema
) -> Result
<(), Error
> {
36 Schema
::Object(obj_schema
) => {
37 verify_object_schema(obj_schema
)?
;
39 Schema
::Array(arr_schema
) => {
40 verify_schema(arr_schema
.items
)?
;
50 ) -> Result
<(), Error
>
52 verify_object_schema(info
.parameters
)
53 .map_err(|err
| format_err
!("{} {} parameters: {}", method
, path
, err
))?
;
55 verify_schema(info
.returns
)
56 .map_err(|err
| format_err
!("{} {} returns: {}", method
, path
, err
))?
;
64 ) -> Result
<(), Error
> {
66 if dirmap
.len() >= 1 {
68 for i
in 1..dirmap
.len() {
70 if dirmap
[i
].0 <= dirmap
[i
-1].0 {
71 for (name
, _
) in dirmap
.iter() {
72 eprintln
!("{}/{}", path
, name
);
74 bail
!("found unsorted dirmap at {:?} ({} <= {})", path
, dirmap
[i
].0, dirmap
[i
-1].0);
80 for (name
, router
) in dirmap
.iter() {
81 let sub_path
= format
!("{}/{}", path
, name
);
82 verify_router(&sub_path
, router
)?
;
88 fn verify_router(path
: &str, router
: &Router
) -> Result
<(), Error
> {
90 println
!("Verify {}", path
);
92 if let Some(api_method
) = router
.get
{
93 verify_api_method("GET", path
, api_method
)?
;
95 if let Some(api_method
) = router
.put
{
96 verify_api_method("PUT", path
, api_method
)?
;
98 if let Some(api_method
) = router
.post
{
99 verify_api_method("POST", path
, api_method
)?
;
101 if let Some(api_method
) = router
.delete
{
102 verify_api_method("DELETE", path
, api_method
)?
;
105 match router
.subroute
{
106 Some(SubRoute
::Map(dirmap
)) => {
107 verify_dirmap(path
, dirmap
)?
;
109 Some(SubRoute
::MatchAll { router, param_name }
) => {
110 let path
= format
!("{}/{{{}}}", path
, param_name
);
111 verify_router(&path
, router
)?
;
120 fn verify_backup_api() -> Result
<(), Error
> {
122 let api
= &api2
::backup
::BACKUP_API_ROUTER
;
123 verify_router("backup-api", api
)?
;
129 fn verify_reader_api() -> Result
<(), Error
> {
131 let api
= &api2
::reader
::READER_API_ROUTER
;
132 verify_router("reader-api", api
)?
;
138 fn verify_root_api() -> Result
<(), Error
> {
140 let api
= &api2
::ROUTER
;
141 verify_router("root", api
)?
;
147 fn verify_acl_role_schema() -> Result
<(), Error
> {
149 let list
= match api2
::types
::ACL_ROLE_SCHEMA
{
150 Schema
::String(StringSchema { format: Some(ApiStringFormat::Enum(list)), .. }
) => list
,
154 let map
= &proxmox_backup
::config
::acl
::ROLE_NAMES
;
156 if !map
.contains_key(item
) {
157 bail
!("found role '{}' without description/mapping", item
);
161 for role
in map
.keys() {
162 if !list
.contains(role
) {
163 bail
!("role '{}' missing in ACL_ROLE_SCHEMA enum", role
);