blob: 780d36634e53cc4fafc8327e0f7abe06f3b111f5 [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 {
anyhow::Error,
fidl_fuchsia_factory::{
AlphaFactoryStoreProviderMarker, CastCredentialsFactoryStoreProviderMarker,
MiscFactoryStoreProviderMarker, PlayReadyFactoryStoreProviderMarker,
WeaveFactoryStoreProviderMarker, WidevineFactoryStoreProviderMarker,
},
fidl_fuchsia_io::{DirectoryMarker, DirectoryProxy},
fuchsia_async as fasync,
std::path::PathBuf,
};
macro_rules! connect_to_factory_store_provider {
($t:ty) => {{
let provider = fuchsia_component::client::connect_to_service::<$t>()
.expect("Failed to connect to service");
let (dir_proxy, dir_server) = fidl::endpoints::create_proxy::<DirectoryMarker>()?;
provider.get_factory_store(dir_server).expect("Failed to get factory store");
dir_proxy
}};
}
async fn read_file_from_proxy<'a>(
dir_proxy: &'a DirectoryProxy,
file_path: &'a str,
) -> Result<Vec<u8>, Error> {
let file =
io_util::open_file(&dir_proxy, &PathBuf::from(file_path), io_util::OPEN_RIGHT_READABLE)?;
io_util::read_file_bytes(&file).await
}
async fn assert_file<'a>(
dir_proxy: &'a DirectoryProxy,
filename: &'a str,
expected_contents: &'a [u8],
) -> Result<(), Error> {
let contents = read_file_from_proxy(&dir_proxy, filename).await?;
assert_eq!(expected_contents, &contents[..]);
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn read_factory_files_from_cast_credentials_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(CastCredentialsFactoryStoreProviderMarker);
assert_file(&dir_proxy, "txt/cast.txt", "a cast file".as_bytes()).await?;
assert_file(&dir_proxy, "cast2.bat", "another one (cast)".as_bytes()).await?;
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn missing_factory_files_from_cast_credentials_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(CastCredentialsFactoryStoreProviderMarker);
read_file_from_proxy(&dir_proxy, "missing.txt").await.unwrap_err();
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn read_factory_files_from_misc_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(MiscFactoryStoreProviderMarker);
assert_file(&dir_proxy, "misc.bin", "a misc file".as_bytes()).await?;
assert_file(&dir_proxy, "misc/misc.bin", "misc from another".as_bytes()).await?;
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn missing_factory_files_from_misc_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(MiscFactoryStoreProviderMarker);
read_file_from_proxy(&dir_proxy, "missing2").await.unwrap_err();
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn read_factory_files_from_playready_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(PlayReadyFactoryStoreProviderMarker);
assert_file(&dir_proxy, "txt/playready.txt", "a playready file".as_bytes()).await?;
assert_file(&dir_proxy, "playready.cfg", "another playready".as_bytes()).await?;
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn missing_factory_files_from_playready_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(PlayReadyFactoryStoreProviderMarker);
read_file_from_proxy(&dir_proxy, "abc").await.unwrap_err();
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn read_factory_files_from_weave_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(WeaveFactoryStoreProviderMarker);
assert_file(&dir_proxy, "weave.txt", "a weave file".as_bytes()).await?;
assert_file(&dir_proxy, "weave2.log", "and yet another weave".as_bytes()).await?;
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn missing_factory_files_from_weave_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(WeaveFactoryStoreProviderMarker);
read_file_from_proxy(&dir_proxy, "defg").await.unwrap_err();
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn read_factory_files_from_alpha_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(AlphaFactoryStoreProviderMarker);
assert_file(&dir_proxy, "alpha.txt", "an alpha file".as_bytes()).await?;
assert_file(&dir_proxy, "alpha2.log", "and yet another alpha".as_bytes()).await?;
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn missing_factory_files_from_alpha_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(AlphaFactoryStoreProviderMarker);
read_file_from_proxy(&dir_proxy, "missing_alpha.txt").await.unwrap_err();
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn read_factory_files_from_widevine_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(WidevineFactoryStoreProviderMarker);
assert_file(&dir_proxy, "widevine.txt", "a widevine file".as_bytes()).await?;
assert_file(&dir_proxy, "widevine2.log", "and yet another wv".as_bytes()).await?;
Ok(())
}
#[fasync::run_singlethreaded(test)]
async fn missing_factory_files_from_widevine_store() -> Result<(), Error> {
let dir_proxy = connect_to_factory_store_provider!(WidevineFactoryStoreProviderMarker);
read_file_from_proxy(&dir_proxy, "defg").await.unwrap_err();
Ok(())
}