// Copyright (C) 2024 Huawei Device Co., Ltd.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Add SecurityLevel enum definition for testing purposes
#[cfg(test)]
mod ut_config {
use super::*;
use crate::wrapper::ffi::SecurityLevel;
use std::fmt;
impl fmt::Debug for SecurityLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "SecurityLevel")
}
}
// @tc.name: ut_open_config_new
// @tc.desc: Test creating a new OpenConfig instance
// @tc.precon: NA
// @tc.step: 1. Call OpenConfig::new with a test path
// 2. Verify the default version is set to 1
// 3. Verify a default callback is set
// @tc.expect: OpenConfig instance is created with correct default values
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_config_new_001() {
let config = OpenConfig::new("test_path");
assert_eq!(config.version, 1);
assert!(matches!(config.callback.as_ref(), _ as &DefaultCallback));
}
// @tc.name: ut_open_config_security_level
// @tc.desc: Test setting security level
// @tc.precon: NA
// @tc.step: 1. Create a new OpenConfig instance
// 2. Set security level to SecurityLevel::S1
// 3. Verify the security level was set
// @tc.expect: Security level is successfully set
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_config_security_level_001() {
let mut config = OpenConfig::new("test_path");
config.security_level(SecurityLevel::S1);
// We can't directly access the inner value, so we test the builder pattern works
assert!(true);
}
// @tc.name: ut_open_config_encrypt_status
// @tc.desc: Test setting encrypt status
// @tc.precon: NA
// @tc.step: 1. Create a new OpenConfig instance
// 2. Set encrypt status to true
// 3. Verify the encrypt status was set
// @tc.expect: Encrypt status is successfully set
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_config_encrypt_status_001() {
let mut config = OpenConfig::new("test_path");
config.encrypt_status(true);
// We can't directly access the inner value, so we test the builder pattern works
assert!(true);
}
// @tc.name: ut_open_config_bundle_name
// @tc.desc: Test setting bundle name
// @tc.precon: NA
// @tc.step: 1. Create a new OpenConfig instance
// 2. Set bundle name to "test_bundle"
// 3. Verify the bundle name was set
// @tc.expect: Bundle name is successfully set
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_config_bundle_name_001() {
let mut config = OpenConfig::new("test_path");
config.bundle_name("test_bundle");
// We can't directly access the inner value, so we test the builder pattern works
assert!(true);
}
// @tc.name: ut_open_config_version
// @tc.desc: Test setting version
// @tc.precon: NA
// @tc.step: 1. Create a new OpenConfig instance
// 2. Set version to 5
// 3. Verify the version was set
// @tc.expect: Version is successfully set to 5
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_config_version_001() {
let mut config = OpenConfig::new("test_path");
config.version(5);
assert_eq!(config.version, 5);
}
// @tc.name: ut_open_config_version_edge
// @tc.desc: Test setting version with edge values
// @tc.precon: NA
// @tc.step: 1. Create a new OpenConfig instance
// 2. Set version to i32::MAX
// 3. Verify the version was set
// 4. Set version to i32::MIN
// 5. Verify the version was set
// @tc.expect: Version is successfully set to edge values
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 2
#[test]
fn ut_open_config_version_edge_001() {
let mut config = OpenConfig::new("test_path");
config.version(i32::MAX);
assert_eq!(config.version, i32::MAX);
config.version(i32::MIN);
assert_eq!(config.version, i32::MIN);
}
// @tc.name: ut_open_config_callback
// @tc.desc: Test setting custom callback
// @tc.precon: NA
// @tc.step: 1. Create a new OpenConfig instance
// 2. Set a custom callback
// 3. Verify the callback was set
// @tc.expect: Custom callback is successfully set
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_config_callback_001() {
let mut config = OpenConfig::new("test_path");
struct TestCallback;
impl OpenCallback for TestCallback {}
config.callback(Box::new(TestCallback));
// Verify the callback type changed from DefaultCallback
assert!(!matches!(config.callback.as_ref(), _ as &DefaultCallback));
}
// @tc.name: ut_open_callback_default
// @tc.desc: Test default OpenCallback implementations
// @tc.precon: NA
// @tc.step: 1. Create a DefaultCallback instance
// 2. Call all callback methods
// 3. Verify they all return 0
// @tc.expect: All default callback methods return 0
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 1
#[test]
fn ut_open_callback_default_001() {
let mut callback = DefaultCallback;
let mut mock_rdb = crate::database::RdbStore { inner: None };
assert_eq!(callback.on_create(&mut mock_rdb), 0);
assert_eq!(callback.on_upgrade(&mut mock_rdb, 1, 2), 0);
assert_eq!(callback.on_downgrade(&mut mock_rdb, 2, 1), 0);
assert_eq!(callback.on_open(&mut mock_rdb), 0);
assert_eq!(callback.on_corrupt("test.db"), 0);
}
// @tc.name: ut_open_config_empty_path
// @tc.desc: Test creating OpenConfig with empty path
// @tc.precon: NA
// @tc.step: 1. Call OpenConfig::new with empty string
// 2. Verify instance creation
// @tc.expect: OpenConfig instance is created without panic
// @tc.type: FUNC
// @tc.require: issueNumber
// @tc.level: Level 2
#[test]
fn ut_open_config_empty_path_001() {
let config = OpenConfig::new("");
assert_eq!(config.version, 1);
}
}