[identity] Add unit tests for account manager inspection
This is possible now we have a get method on the metric, yey!
AUTH-209 #comment
Change-Id: Ic27429ba02d317a62b6879663249057c31c6670e
diff --git a/src/identity/bin/account_manager/src/account_event_emitter.rs b/src/identity/bin/account_manager/src/account_event_emitter.rs
index 51182a3..4a3d701 100644
--- a/src/identity/bin/account_manager/src/account_event_emitter.rs
+++ b/src/identity/bin/account_manager/src/account_event_emitter.rs
@@ -303,20 +303,27 @@
};
let request_fut = async move {
+ assert_eq!(account_event_emitter.inspect.active.get().unwrap(), 0);
assert!(await!(account_event_emitter.add_listener(
listener_1,
options_1,
&AUTH_STATES
))
.is_ok());
+ assert_eq!(account_event_emitter.inspect.active.get().unwrap(), 1);
assert!(await!(account_event_emitter.add_listener(
listener_2,
options_2,
&AUTH_STATES
))
.is_ok());
+ assert_eq!(account_event_emitter.inspect.active.get().unwrap(), 2);
+
+ assert_eq!(account_event_emitter.inspect.events.get().unwrap(), 0);
await!(account_event_emitter.publish(&EVENT_ADDED));
+ assert_eq!(account_event_emitter.inspect.events.get().unwrap(), 1);
await!(account_event_emitter.publish(&EVENT_REMOVED));
+ assert_eq!(account_event_emitter.inspect.events.get().unwrap(), 2);
};
await!(join3(serve_fut_1, serve_fut_2, request_fut));
}
@@ -344,6 +351,7 @@
panic!("Unexpected message received");
};
};
+
let request_fut = async move {
await!(account_event_emitter.publish(&EVENT_ADDED)); // Normal event
{
diff --git a/src/identity/bin/account_manager/src/account_manager.rs b/src/identity/bin/account_manager/src/account_manager.rs
index 58e3b8d..2677f13 100644
--- a/src/identity/bin/account_manager/src/account_manager.rs
+++ b/src/identity/bin/account_manager/src/account_manager.rs
@@ -467,9 +467,9 @@
static ref AUTH_PROVIDER_CONFIG: Vec<AuthProviderConfig> = {vec![]};
}
- fn request_stream_test<TestFn, Fut>(test_object: AccountManager, test_fn: TestFn)
+ fn request_stream_test<TestFn, Fut>(account_manager: AccountManager, test_fn: TestFn)
where
- TestFn: FnOnce(AccountManagerProxy) -> Fut,
+ TestFn: FnOnce(AccountManagerProxy, Arc<AccountManager>) -> Fut,
Fut: Future<Output = Result<(), Error>>,
{
let mut executor = fasync::Executor::new().expect("Failed to create executor");
@@ -479,12 +479,16 @@
fasync::Channel::from_channel(server_chan).unwrap(),
);
+ let account_manager_arc = Arc::new(account_manager);
+ let account_manager_clone = Arc::clone(&account_manager_arc);
fasync::spawn(async move {
- await!(test_object.handle_requests_from_stream(request_stream))
+ await!(account_manager_clone.handle_requests_from_stream(request_stream))
.unwrap_or_else(|err| panic!("Fatal error handling test request: {:?}", err))
});
- executor.run_singlethreaded(test_fn(proxy)).expect("Executor run failed.")
+ executor
+ .run_singlethreaded(test_fn(proxy, account_manager_arc))
+ .expect("Executor run failed.")
}
// Manually contructs an account manager initialized with the supplied set of accounts.
@@ -529,10 +533,9 @@
fn test_new() {
let inspector = Inspector::new().unwrap();
let data_dir = TempDir::new().unwrap();
-
request_stream_test(
AccountManager::new(data_dir.path().into(), &AUTH_PROVIDER_CONFIG, &inspector).unwrap(),
- async move |proxy| {
+ async move |proxy, _| {
assert_eq!(await!(proxy.get_account_ids())?, vec![]);
assert_eq!(await!(proxy.get_account_auth_states())?, (Status::Ok, vec![]));
Ok(())
@@ -543,24 +546,32 @@
#[test]
fn test_initially_empty() {
let data_dir = TempDir::new().unwrap();
- request_stream_test(create_accounts(vec![], data_dir.path()), async move |proxy| {
- assert_eq!(await!(proxy.get_account_ids())?, vec![]);
- assert_eq!(await!(proxy.get_account_auth_states())?, (Status::Ok, vec![]));
- Ok(())
- });
+ request_stream_test(
+ create_accounts(vec![], data_dir.path()),
+ async move |proxy, test_object| {
+ assert_eq!(await!(proxy.get_account_ids())?, vec![]);
+ assert_eq!(await!(proxy.get_account_auth_states())?, (Status::Ok, vec![]));
+ assert_eq!(test_object.accounts_inspect.total.get().unwrap(), 0);
+ assert_eq!(test_object.accounts_inspect.active.get().unwrap(), 0);
+ Ok(())
+ },
+ );
}
#[test]
fn test_remove_missing_account() {
// Manually create an account manager with one account.
let data_dir = TempDir::new().unwrap();
- let test_object = create_accounts(vec![1], data_dir.path());
- request_stream_test(test_object, async move |proxy| {
+ let stored_account_list =
+ StoredAccountList::new(vec![StoredAccountMetadata::new(LocalAccountId::new(1))]);
+ stored_account_list.save(data_dir.path()).unwrap();
+ request_stream_test(read_accounts(data_dir.path()), async move |proxy, test_object| {
// Try to delete a very different account from the one we added.
assert_eq!(
await!(proxy.remove_account(LocalAccountId::new(42).as_mut()))?,
Status::NotFound
);
+ assert_eq!(test_object.accounts_inspect.total.get().unwrap(), 1);
Ok(())
});
}
@@ -574,10 +585,11 @@
]);
stored_account_list.save(data_dir.path()).unwrap();
// Manually create an account manager from an account_list_dir with two pre-populated dirs.
- let account_manager = read_accounts(data_dir.path());
- request_stream_test(account_manager, async move |proxy| {
+ request_stream_test(read_accounts(data_dir.path()), async move |proxy, test_object| {
// Try to remove the first account.
+ assert_eq!(test_object.accounts_inspect.total.get().unwrap(), 2);
assert_eq!(await!(proxy.remove_account(LocalAccountId::new(1).as_mut()))?, Status::Ok);
+ assert_eq!(test_object.accounts_inspect.total.get().unwrap(), 1);
// Verify that the second account is present.
assert_eq!(await!(proxy.get_account_ids())?, fidl_local_id_vec(vec![2]));
@@ -585,9 +597,9 @@
});
// Now create another account manager using the same directory, which should pick up the new
// state from the operations of the first account manager.
- let account_manager = read_accounts(data_dir.path());
- request_stream_test(account_manager, async move |proxy| {
+ request_stream_test(read_accounts(data_dir.path()), async move |proxy, test_object| {
// Verify the only the second account is present.
+ assert_eq!(test_object.accounts_inspect.total.get().unwrap(), 1);
assert_eq!(await!(proxy.get_account_ids())?, fidl_local_id_vec(vec![2]));
Ok(())
});
@@ -604,9 +616,8 @@
};
let data_dir = TempDir::new().unwrap();
- let test_object = create_accounts(vec![1, 2], data_dir.path());
// TODO(dnordstrom): Use run_until_stalled macro instead.
- request_stream_test(test_object, async move |proxy| {
+ request_stream_test(create_accounts(vec![1, 2], data_dir.path()), async move |proxy, _| {
let (client_end, mut stream) =
create_request_stream::<AccountListenerMarker>().unwrap();
let serve_fut = async move {
@@ -664,5 +675,4 @@
Ok(())
});
}
-
}