Skip to content

Commit be613f0

Browse files
server: Test some error paths
1 parent 279a36c commit be613f0

2 files changed

Lines changed: 169 additions & 0 deletions

File tree

server/src/item.rs

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,4 +575,92 @@ mod tests {
575575

576576
Ok(())
577577
}
578+
579+
#[tokio::test]
580+
async fn get_secret_invalid_session() -> Result<(), Box<dyn std::error::Error>> {
581+
let (server_conn, client_conn) = crate::tests::create_p2p_connection().await?;
582+
583+
let _server = Service::run_with_connection(
584+
server_conn,
585+
Some(oo7::Secret::from("test-password-long-enough")),
586+
)
587+
.await?;
588+
589+
tokio::time::sleep(tokio::time::Duration::from_millis(50)).await;
590+
591+
let service_api = dbus::api::Service::new(&client_conn).await?;
592+
let (_aes_key, session) = service_api.open_session(None).await?;
593+
let session = Arc::new(session);
594+
595+
let collections = service_api.collections().await?;
596+
let secret = oo7::Secret::text("test-secret");
597+
let dbus_secret = dbus::api::DBusSecret::new(session, secret);
598+
599+
let item = collections[0]
600+
.create_item("Test Item", &[("app", "test")], &dbus_secret, false, None)
601+
.await?;
602+
603+
// Try to get secret with invalid session path
604+
let invalid_session =
605+
oo7::dbus::api::Session::new(&client_conn, "/invalid/session").await?;
606+
let result = item.secret(&invalid_session).await;
607+
608+
assert!(
609+
matches!(
610+
result,
611+
Err(oo7::dbus::Error::Service(
612+
oo7::dbus::ServiceError::NoSession(_)
613+
))
614+
),
615+
"Should be NoSession error"
616+
);
617+
618+
Ok(())
619+
}
620+
621+
#[tokio::test]
622+
async fn set_secret_invalid_session() -> Result<(), Box<dyn std::error::Error>> {
623+
let (server_conn, client_conn) = crate::tests::create_p2p_connection().await?;
624+
625+
let _server = Service::run_with_connection(
626+
server_conn,
627+
Some(oo7::Secret::from("test-password-long-enough")),
628+
)
629+
.await?;
630+
631+
tokio::time::sleep(tokio::time::Duration::from_millis(50)).await;
632+
633+
let service_api = dbus::api::Service::new(&client_conn).await?;
634+
let (_aes_key, session) = service_api.open_session(None).await?;
635+
let session = Arc::new(session);
636+
637+
let collections = service_api.collections().await?;
638+
let secret = oo7::Secret::text("test-secret");
639+
let dbus_secret = dbus::api::DBusSecret::new(Arc::clone(&session), secret);
640+
641+
let item = collections[0]
642+
.create_item("Test Item", &[("app", "test")], &dbus_secret, false, None)
643+
.await?;
644+
645+
let new_secret = oo7::Secret::text("new-secret");
646+
let invalid_dbus_secret = dbus::api::DBusSecret::new(
647+
Arc::new(dbus::api::Session::new(&client_conn, "/invalid/session").await?),
648+
new_secret,
649+
);
650+
651+
let result = item.set_secret(&invalid_dbus_secret).await;
652+
653+
// Should return NoSession error
654+
assert!(
655+
matches!(
656+
result,
657+
Err(oo7::dbus::Error::Service(
658+
oo7::dbus::ServiceError::NoSession(_)
659+
))
660+
),
661+
"Should be NoSession error"
662+
);
663+
664+
Ok(())
665+
}
578666
}

server/src/service.rs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,4 +982,85 @@ mod tests {
982982

983983
Ok(())
984984
}
985+
986+
#[tokio::test]
987+
async fn get_secrets_invalid_session() -> Result<(), Box<dyn std::error::Error>> {
988+
let (server_conn, client_conn) = crate::tests::create_p2p_connection().await?;
989+
990+
let _server = Service::run_with_connection(
991+
server_conn,
992+
Some(Secret::from("test-password-long-enough")),
993+
)
994+
.await?;
995+
996+
tokio::time::sleep(tokio::time::Duration::from_millis(50)).await;
997+
998+
let service_api = dbus::api::Service::new(&client_conn).await?;
999+
let (_aes_key, session) = service_api.open_session(None).await?;
1000+
let session = Arc::new(session);
1001+
1002+
let collections = service_api.collections().await?;
1003+
1004+
// Create an item
1005+
let secret = Secret::text("test-password");
1006+
let dbus_secret = dbus::api::DBusSecret::new(Arc::clone(&session), secret);
1007+
1008+
let item = collections[0]
1009+
.create_item("Test Item", &[("app", "test")], &dbus_secret, false, None)
1010+
.await?;
1011+
1012+
// Try to get secrets with invalid session path
1013+
let invalid_session =
1014+
dbus::api::Session::new(&client_conn, "/invalid/session/path").await?;
1015+
let result = service_api.secrets(&[item], &invalid_session).await;
1016+
1017+
assert!(
1018+
matches!(
1019+
result,
1020+
Err(oo7::dbus::Error::Service(
1021+
oo7::dbus::ServiceError::NoSession(_)
1022+
))
1023+
),
1024+
"Should be NoSession error"
1025+
);
1026+
1027+
Ok(())
1028+
}
1029+
1030+
#[tokio::test]
1031+
async fn set_alias_invalid_collection() -> Result<(), Box<dyn std::error::Error>> {
1032+
let (server_conn, client_conn) = crate::tests::create_p2p_connection().await?;
1033+
1034+
let _server = Service::run_with_connection(
1035+
server_conn,
1036+
Some(Secret::from("test-password-long-enough")),
1037+
)
1038+
.await?;
1039+
1040+
tokio::time::sleep(tokio::time::Duration::from_millis(50)).await;
1041+
1042+
let service_api = dbus::api::Service::new(&client_conn).await?;
1043+
1044+
// Try to set alias for non-existent collection
1045+
let invalid_collection = dbus::api::Collection::new(
1046+
&client_conn,
1047+
"/org/freedesktop/secrets/collection/nonexistent",
1048+
)
1049+
.await?;
1050+
let result = service_api
1051+
.set_alias("test-alias", &invalid_collection)
1052+
.await;
1053+
1054+
assert!(
1055+
matches!(
1056+
result,
1057+
Err(oo7::dbus::Error::Service(
1058+
oo7::dbus::ServiceError::NoSuchObject(_)
1059+
))
1060+
),
1061+
"Should be NoSuchObject error"
1062+
);
1063+
1064+
Ok(())
1065+
}
9851066
}

0 commit comments

Comments
 (0)