blob: 422b3044b0d24a03ef5843316af315b2bdbeab17 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#[cfg(test)]
use {
crate::config::default_settings::DefaultSetting, crate::registry::device_storage::testing::*,
crate::switchboard::base::SettingType, crate::EnvironmentBuilder, crate::ServiceConfiguration,
fidl_fuchsia_settings::*, std::collections::HashSet,
};
const ENV_NAME: &str = "settings_service_configuration_test_environment";
pub fn get_test_settings_types() -> HashSet<SettingType> {
return vec![SettingType::Accessibility, SettingType::Privacy].into_iter().collect();
}
#[fuchsia_async::run_until_stalled(test)]
async fn test_no_configuration_provided() {
let factory = InMemoryStorageFactory::create();
let default_configuration = ServiceConfiguration::with_services(get_test_settings_types());
// Don't load a real configuration, use the default configuration.
let configuration =
DefaultSetting::new(default_configuration, Some("not_a_real_path.json".to_string()))
.get_default_value();
let env = EnvironmentBuilder::new(factory)
.configuration(configuration)
.spawn_and_get_nested_environment(ENV_NAME)
.await
.unwrap();
// No ServiceConfiguration provided, we should be able to connect to the service and make a watch call without issue.
let service = env.connect_to_service::<AccessibilityMarker>().expect("Connected to service");
service.watch().await.expect("watch completed").ok();
service.watch2().await.expect("watch completed");
}
#[fuchsia_async::run_until_stalled(test)]
async fn test_default_configuration_provided() {
let factory = InMemoryStorageFactory::create();
let default_configuration = ServiceConfiguration::with_services(get_test_settings_types());
// Load test configuration, which only has Accessibility, default will not be used.
let configuration = DefaultSetting::new(
default_configuration,
Some("/config/data/service_configuration.json".to_string()),
)
.get_default_value();
let env = EnvironmentBuilder::new(factory)
.configuration(configuration)
.spawn_and_get_nested_environment(ENV_NAME)
.await
.unwrap();
env.connect_to_service::<AccessibilityMarker>().expect("Connected to service");
let privacy_service = env.connect_to_service::<PrivacyMarker>().unwrap();
// Any calls to the privacy service should fail since the service isn't included in the configuration.
privacy_service.watch().await.expect_err("watch completed");
privacy_service.watch2().await.expect_err("watch completed");
}