Skip to content

Commit c8df855

Browse files
committed
add tests for rust SecretsProvider
1 parent 1628f87 commit c8df855

File tree

2 files changed

+44
-2
lines changed

2 files changed

+44
-2
lines changed

rust/src/secretsprovider.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ impl SecretsProvider {
7676
}
7777

7878
/// Retrieve data for the given key, if it exists
79-
pub fn get_data<S: BnStrCompatible>(&self, key: S) -> Option<BnString> {
79+
pub fn get_data<S: BnStrCompatible>(&self, key: S) -> BnString {
8080
let key = key.into_bytes_with_nul();
8181
let result = unsafe {
8282
BNGetSecretsProviderData(self.as_raw(), key.as_ref().as_ptr() as *const ffi::c_char)
8383
};
84-
(!result.is_null()).then(|| unsafe { BnString::from_raw(result) })
84+
unsafe { BnString::from_raw(result) }
8585
}
8686

8787
/// Store data with the given key

rust/tests/secretsprovider.rs

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use binaryninja::headless::Session;
2+
use binaryninja::secretsprovider::{SecretsProvider, SecretsProviderCallback};
3+
use rstest::*;
4+
5+
#[fixture]
6+
fn session() -> Session {
7+
Session::new().expect("Failed to initialize session")
8+
}
9+
10+
#[rstest]
11+
fn list_secrets_provider(_session: Session) {
12+
let providers = SecretsProvider::all();
13+
for _provider in &providers {}
14+
}
15+
16+
struct MySecretsProvider {}
17+
18+
impl SecretsProviderCallback for MySecretsProvider {
19+
fn has_data(&mut self, key: &str) -> bool {
20+
key == "my_key"
21+
}
22+
23+
fn get_data(&mut self, key: &str) -> String {
24+
if key == "my_key" { "my_value" } else { "" }.to_string()
25+
}
26+
27+
fn store_data(&mut self, _key: &str, _data: &str) -> bool {
28+
false
29+
}
30+
31+
fn delete_data(&mut self, _key: &str) -> bool {
32+
false
33+
}
34+
}
35+
36+
#[rstest]
37+
fn custom_secrets_provider(_session: Session) {
38+
let my_provider = SecretsProvider::new("MySecretsProvider", MySecretsProvider {});
39+
assert!(my_provider.has_data("my_key"));
40+
assert!(!my_provider.has_data("not_my_key"));
41+
assert_eq!(my_provider.get_data("my_key").as_str(), "my_value");
42+
}

0 commit comments

Comments
 (0)