1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 use crate::common::*;
17 use asset_sdk::*;
18 
19 #[test]
remove_invalid_alias()20 fn remove_invalid_alias() {
21     let mut query = AssetMap::new();
22     query.insert_attr(Tag::Alias, vec![]);
23     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
24 
25     query.insert_attr(Tag::Alias, vec![0; MAX_ALIAS_SIZE + 1]);
26     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
27 }
28 
29 #[test]
remove_invalid_accessibility()30 fn remove_invalid_accessibility() {
31     let mut query = AssetMap::new();
32 
33     query.insert_attr(Tag::Accessibility, (Accessibility::DeviceUnlocked as u32) + 1);
34     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
35 }
36 
37 #[test]
remove_invalid_auth_type()38 fn remove_invalid_auth_type() {
39     let mut query = AssetMap::new();
40     query.insert_attr(Tag::AuthType, (AuthType::None as u32) + 1);
41     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
42 
43     query.insert_attr(Tag::AuthType, (AuthType::Any as u32) + 1);
44     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
45 }
46 
47 #[test]
remove_invalid_sync_type()48 fn remove_invalid_sync_type() {
49     let mut query = AssetMap::new();
50     let sync_type = SyncType::ThisDevice as u32 | SyncType::TrustedDevice as u32 | SyncType::TrustedAccount as u32;
51     query.insert_attr(Tag::SyncType, sync_type + 1);
52     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
53 }
54 
55 #[test]
remove_invalid_label()56 fn remove_invalid_label() {
57     let labels = &[CRITICAL_LABEL_ATTRS, NORMAL_LABEL_ATTRS].concat();
58     for &label in labels {
59         let mut query = AssetMap::new();
60         query.insert_attr(label, vec![]);
61         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
62 
63         query.insert_attr(label, vec![0; MAX_LABEL_SIZE + 1]);
64         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
65     }
66 }
67 
68 #[test]
remove_bool_tag_with_unmatched_type()69 fn remove_bool_tag_with_unmatched_type() {
70     let tags = [Tag::RequirePasswordSet, Tag::IsPersistent];
71     for tag in tags {
72         let mut query = AssetMap::new();
73         query.insert_attr(tag, vec![]);
74         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
75 
76         query.insert_attr(tag, 0);
77         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
78     }
79 }
80 
81 #[test]
remove_bytes_tag_with_unmatched_type()82 fn remove_bytes_tag_with_unmatched_type() {
83     let mut tags_bytes = [CRITICAL_LABEL_ATTRS, NORMAL_LABEL_ATTRS].concat();
84     tags_bytes.extend(&[Tag::Alias]);
85     for tag in tags_bytes {
86         let mut query = AssetMap::new();
87         query.insert_attr(tag, 0);
88         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
89 
90         query.insert_attr(tag, true);
91         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
92     }
93 }
94 
95 #[test]
remove_number_tag_with_unmatched_type()96 fn remove_number_tag_with_unmatched_type() {
97     let tags_bytes = [Tag::Accessibility, Tag::AuthType, Tag::SyncType];
98     for tag in tags_bytes {
99         let mut query = AssetMap::new();
100         query.insert_attr(tag, vec![]);
101         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
102 
103         query.insert_attr(tag, true);
104         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
105     }
106 }
107 
108 #[test]
remove_unsupported_tags()109 fn remove_unsupported_tags() {
110     let tags_bytes = [Tag::Secret, Tag::AuthChallenge, Tag::AuthToken];
111     for tag in tags_bytes {
112         let mut query = AssetMap::new();
113         query.insert_attr(tag, vec![0; MIN_ARRAY_SIZE + 1]);
114         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
115     }
116 
117     let tags_num = [
118         Tag::AuthValidityPeriod,
119         Tag::ConflictResolution,
120         Tag::ReturnLimit,
121         Tag::ReturnOffset,
122         Tag::ReturnOrderedBy,
123         Tag::ReturnType,
124     ];
125     for tag in tags_num {
126         let mut query = AssetMap::new();
127         query.insert_attr(tag, 1);
128         expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().remove(&query).unwrap_err());
129     }
130 }
131