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]
add_all_tags()20 fn add_all_tags() {
21 let alias = function!().as_bytes();
22 add_all_tags_asset(alias).unwrap();
23
24 let res = query_attr_by_alias(alias).unwrap();
25 assert_eq!(1, res.len());
26 assert_eq!(14, res[0].len());
27 assert_eq!(alias, *res[0].get_bytes_attr(&Tag::Alias).unwrap());
28 assert_eq!(NORMAL_LABEL1, *res[0].get_bytes_attr(&Tag::DataLabelNormal1).unwrap());
29 assert_eq!(NORMAL_LABEL2, *res[0].get_bytes_attr(&Tag::DataLabelNormal2).unwrap());
30 assert_eq!(NORMAL_LABEL3, *res[0].get_bytes_attr(&Tag::DataLabelNormal3).unwrap());
31 assert_eq!(NORMAL_LABEL4, *res[0].get_bytes_attr(&Tag::DataLabelNormal4).unwrap());
32 assert_eq!(CRITICAL_LABEL1, *res[0].get_bytes_attr(&Tag::DataLabelCritical1).unwrap());
33 assert_eq!(CRITICAL_LABEL2, *res[0].get_bytes_attr(&Tag::DataLabelCritical2).unwrap());
34 assert_eq!(CRITICAL_LABEL3, *res[0].get_bytes_attr(&Tag::DataLabelCritical3).unwrap());
35 assert_eq!(CRITICAL_LABEL4, *res[0].get_bytes_attr(&Tag::DataLabelCritical4).unwrap());
36 assert_eq!(Accessibility::DevicePowerOn, res[0].get_enum_attr::<Accessibility>(&Tag::Accessibility).unwrap());
37 assert_eq!(AuthType::Any, res[0].get_enum_attr::<AuthType>(&Tag::AuthType).unwrap());
38 assert_eq!(SyncType::ThisDevice, res[0].get_enum_attr::<SyncType>(&Tag::SyncType).unwrap());
39 assert!(!res[0].get_bool_attr(&Tag::IsPersistent).unwrap());
40 assert!(!res[0].get_bool_attr(&Tag::RequirePasswordSet).unwrap());
41
42 remove_by_alias(alias).unwrap();
43 }
44
45 #[test]
add_required_tags()46 fn add_required_tags() {
47 let func_name = function!().as_bytes();
48 let mut attrs = AssetMap::new();
49 attrs.insert_attr(Tag::Alias, func_name.to_owned());
50 attrs.insert_attr(Tag::Secret, func_name.to_owned());
51 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
52 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
53
54 let res = query_all_by_alias(func_name).unwrap();
55 assert_eq!(1, res.len());
56 assert_eq!(7, res[0].len());
57 assert_eq!(func_name, *res[0].get_bytes_attr(&Tag::Alias).unwrap());
58 assert_eq!(func_name, *res[0].get_bytes_attr(&Tag::Secret).unwrap());
59 assert_eq!(Accessibility::DevicePowerOn, res[0].get_enum_attr::<Accessibility>(&Tag::Accessibility).unwrap());
60 assert_eq!(AuthType::None, res[0].get_enum_attr::<AuthType>(&Tag::AuthType).unwrap());
61 assert_eq!(SyncType::Never, res[0].get_enum_attr::<SyncType>(&Tag::SyncType).unwrap());
62 assert!(!res[0].get_bool_attr(&Tag::IsPersistent).unwrap());
63 assert!(!res[0].get_bool_attr(&Tag::RequirePasswordSet).unwrap());
64 remove_by_alias(func_name).unwrap();
65 }
66
67 #[test]
add_english_secret()68 fn add_english_secret() {
69 let func_name = function!();
70 let mut attrs = AssetMap::new();
71 attrs.insert_attr(Tag::Alias, func_name.as_bytes().to_owned());
72 attrs.insert_attr(Tag::Secret, func_name.as_bytes().to_owned());
73 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
74 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
75
76 let res = query_all_by_alias(func_name.as_bytes()).unwrap();
77 assert_eq!(1, res.len());
78 let bytes = res[0].get_bytes_attr(&Tag::Secret).unwrap();
79 assert_eq!(func_name, String::from_utf8(bytes.to_owned()).unwrap());
80 remove_by_alias(func_name.as_bytes()).unwrap();
81 }
82
83 #[test]
add_chinese_secret()84 fn add_chinese_secret() {
85 let alias = "Здравствуйте";
86 let secret = "中文";
87 let mut attrs = AssetMap::new();
88 attrs.insert_attr(Tag::Alias, alias.as_bytes().to_owned());
89 attrs.insert_attr(Tag::Secret, secret.as_bytes().to_owned());
90 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
91 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
92
93 let res = query_all_by_alias(alias.as_bytes()).unwrap();
94 assert_eq!(1, res.len());
95 let bytes = res[0].get_bytes_attr(&Tag::Secret).unwrap();
96 assert_eq!(secret, String::from_utf8(bytes.to_owned()).unwrap());
97 let bytes = res[0].get_bytes_attr(&Tag::Alias).unwrap();
98 assert_eq!(alias, String::from_utf8(bytes.to_owned()).unwrap());
99 remove_by_alias(alias.as_bytes()).unwrap();
100 }
101
102 #[test]
add_same_alias_throw_error()103 fn add_same_alias_throw_error() {
104 let function_name = function!().as_bytes();
105
106 // step1. insert data
107 let mut attrs = AssetMap::new();
108 attrs.insert_attr(Tag::Alias, function_name.to_owned());
109 attrs.insert_attr(Tag::Secret, function_name.to_owned());
110 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
111 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
112
113 // step2. insert data with the same alias, default resolution: throw error
114 expect_error_eq(ErrCode::Duplicated, asset_sdk::Manager::build().unwrap().add(&attrs).unwrap_err());
115
116 // step3. insert data with the same alias, specified resolution: throw error
117 attrs.insert_attr(Tag::ConflictResolution, ConflictResolution::ThrowError);
118 expect_error_eq(ErrCode::Duplicated, asset_sdk::Manager::build().unwrap().add(&attrs).unwrap_err());
119
120 remove_by_alias(function_name).unwrap();
121 }
122
123 #[test]
add_same_alias_overwrite()124 fn add_same_alias_overwrite() {
125 let function_name = function!().as_bytes();
126
127 // step1. insert data
128 let mut attrs = AssetMap::new();
129 attrs.insert_attr(Tag::Alias, function_name.to_owned());
130 attrs.insert_attr(Tag::Secret, function_name.to_owned());
131 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
132 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
133
134 // step2. query data with no label
135 let res = query_attr_by_alias(function_name).unwrap();
136 assert_eq!(1, res.len());
137 assert!(res[0].get(&Tag::DataLabelCritical1).is_none());
138
139 // step3. insert data with the same alias, specified resolution: overwrite
140 let critical_label = "add_same_alias_overwrite".as_bytes();
141 attrs.insert_attr(Tag::DataLabelCritical1, critical_label.to_owned());
142 attrs.insert_attr(Tag::ConflictResolution, ConflictResolution::Overwrite);
143 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
144 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
145
146 // step4. query new data with critical label
147 let res = query_attr_by_alias(function_name).unwrap();
148 assert_eq!(1, res.len());
149 assert_eq!(critical_label, *res[0].get_bytes_attr(&Tag::DataLabelCritical1).unwrap());
150
151 remove_by_alias(function_name).unwrap();
152 }
153
154 #[test]
add_multiple_sync_types()155 fn add_multiple_sync_types() {
156 let function_name = function!().as_bytes();
157 let sync_type = (SyncType::ThisDevice as u32) | (SyncType::TrustedDevice as u32);
158 let mut attrs = AssetMap::new();
159 attrs.insert_attr(Tag::Alias, function_name.to_owned());
160 attrs.insert_attr(Tag::Secret, function_name.to_owned());
161 attrs.insert_attr(Tag::SyncType, sync_type);
162 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
163 asset_sdk::Manager::build().unwrap().add(&attrs).unwrap();
164
165 let res = query_attr_by_alias(function_name).unwrap();
166 assert_eq!(1, res.len());
167 assert_eq!(sync_type, res[0].get_num_attr(&Tag::SyncType).unwrap());
168 remove_by_alias(function_name).unwrap();
169 }
170
171 #[test]
add_is_persistent_auth_wrong()172 fn add_is_persistent_auth_wrong() {
173 let function_name = function!().as_bytes();
174 let mut attrs = AssetMap::new();
175 attrs.insert_attr(Tag::Alias, function_name.to_owned());
176 attrs.insert_attr(Tag::Secret, function_name.to_owned());
177 attrs.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
178 attrs.insert_attr(Tag::IsPersistent, true);
179 expect_error_eq(ErrCode::PermissionDenied, asset_sdk::Manager::build().unwrap().add(&attrs).unwrap_err());
180
181 attrs.insert_attr(Tag::IsPersistent, false);
182 expect_error_eq(ErrCode::PermissionDenied, asset_sdk::Manager::build().unwrap().add(&attrs).unwrap_err());
183 }
184