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]
pre_query_non_exist_with_alias()20 fn pre_query_non_exist_with_alias() {
21     let alias = function!().as_bytes();
22     let mut query = AssetMap::new();
23     query.insert_attr(Tag::Alias, alias.to_owned());
24     expect_error_eq(ErrCode::NotFound, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
25 }
26 
27 #[test]
pre_query_with_wrong_auth_type()28 fn pre_query_with_wrong_auth_type() {
29     let function_name = function!().as_bytes();
30     add_default_asset(function_name, function_name).unwrap();
31 
32     let mut query = AssetMap::new();
33     query.insert_attr(Tag::Alias, function_name.to_owned());
34     expect_error_eq(ErrCode::NotFound, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
35     remove_by_alias(function_name).unwrap();
36 }
37 
38 #[test]
pre_query_with_wrong_accessibility()39 fn pre_query_with_wrong_accessibility() {
40     let function_name = function!().as_bytes();
41     add_default_auth_asset(function_name, function_name).unwrap();
42 
43     let mut query = AssetMap::new();
44     query.insert_attr(Tag::Accessibility, Accessibility::DeviceUnlocked);
45     expect_error_eq(ErrCode::NotFound, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
46     remove_by_alias(function_name).unwrap();
47 }
48 
49 #[test]
pre_query_with_unsupported_auth_type()50 fn pre_query_with_unsupported_auth_type() {
51     let function_name = function!().as_bytes();
52     add_default_auth_asset(function_name, function_name).unwrap();
53 
54     let mut query = AssetMap::new();
55     query.insert_attr(Tag::AuthType, AuthType::None);
56     expect_error_eq(ErrCode::InvalidArgument, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
57     remove_by_alias(function_name).unwrap();
58 }
59 
60 #[test]
pre_query_with_wrong_persistent()61 fn pre_query_with_wrong_persistent() {
62     let function_name = function!().as_bytes();
63     add_default_auth_asset(function_name, function_name).unwrap();
64 
65     let mut query = AssetMap::new();
66     query.insert_attr(Tag::IsPersistent, true);
67     expect_error_eq(ErrCode::NotFound, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
68     remove_by_alias(function_name).unwrap();
69 }
70 
71 #[test]
pre_query_with_wrong_sync_type()72 fn pre_query_with_wrong_sync_type() {
73     let function_name = function!().as_bytes();
74     add_default_auth_asset(function_name, function_name).unwrap();
75 
76     let mut query = AssetMap::new();
77     query.insert_attr(Tag::SyncType, SyncType::TrustedDevice);
78     expect_error_eq(ErrCode::NotFound, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
79     remove_by_alias(function_name).unwrap();
80 }
81 
82 #[test]
pre_query_batch_data()83 fn pre_query_batch_data() {
84     let function_name = function!().as_bytes();
85     add_default_auth_asset(function_name, function_name).unwrap();
86 
87     let mut query = AssetMap::new();
88     let challenge = asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap();
89     assert_eq!(CHALLENGE_SIZE, challenge.len());
90 
91     query.insert_attr(Tag::AuthChallenge, challenge);
92     asset_sdk::Manager::build().unwrap().post_query(&query).unwrap();
93 
94     remove_by_alias(function_name).unwrap();
95 }
96 
97 #[test]
pre_query_single_data()98 fn pre_query_single_data() {
99     let function_name = function!().as_bytes();
100     add_default_auth_asset(function_name, function_name).unwrap();
101 
102     let mut query = AssetMap::new();
103     query.insert_attr(Tag::Alias, function_name.to_owned());
104     query.insert_attr(Tag::Accessibility, Accessibility::DevicePowerOn);
105     query.insert_attr(Tag::AuthType, AuthType::Any);
106     query.insert_attr(Tag::RequirePasswordSet, false);
107     let challenge = asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap();
108     assert_eq!(CHALLENGE_SIZE, challenge.len());
109 
110     let mut query = AssetMap::new();
111     query.insert_attr(Tag::AuthChallenge, challenge);
112     asset_sdk::Manager::build().unwrap().post_query(&query).unwrap();
113 
114     remove_by_alias(function_name).unwrap();
115 }
116 
117 #[test]
pre_query_max_times()118 fn pre_query_max_times() {
119     let function_name = function!().as_bytes();
120     add_default_auth_asset(function_name, function_name).unwrap();
121 
122     let query = AssetMap::new();
123     let mut challenges = vec![];
124     for _i in 0..CRYPTO_CAPACITY {
125         let challenge = asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap();
126         assert_eq!(CHALLENGE_SIZE, challenge.len());
127         challenges.push(challenge);
128     }
129     expect_error_eq(ErrCode::LimitExceeded, asset_sdk::Manager::build().unwrap().pre_query(&query).unwrap_err());
130 
131     for challenge in challenges.into_iter() {
132         let mut query = AssetMap::new();
133         query.insert_attr(Tag::AuthChallenge, challenge);
134         asset_sdk::Manager::build().unwrap().post_query(&query).unwrap();
135     }
136     remove_by_alias(function_name).unwrap();
137 }
138