Skip to content

Commit 4a1a2b0

Browse files
committed
tests: implement some more tests
1 parent 87a2556 commit 4a1a2b0

File tree

1 file changed

+212
-12
lines changed

1 file changed

+212
-12
lines changed

src/api.rs

Lines changed: 212 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -705,8 +705,13 @@ impl KeyManager {
705705

706706
#[cfg(test)]
707707
mod tests {
708+
use crates::libc;
709+
710+
use std::thread;
711+
use std::time::Duration;
712+
708713
use api::Keyring;
709-
use constants::SpecialKeyring;
714+
use constants::{self, SpecialKeyring};
710715
use keytype::KeyType;
711716
use keytypes;
712717

@@ -774,57 +779,252 @@ mod tests {
774779

775780
#[test]
776781
fn test_invalidate_key() {
777-
unimplemented!()
782+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
783+
784+
// Create the key.
785+
let description = "test:rust-keyutils:invalidate_key";
786+
let payload = "payload";
787+
let key = keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
788+
key.invalidate().unwrap();
789+
790+
let (keys, keyrings) = keyring.read().unwrap();
791+
assert_eq!(keys.len(), 0);
792+
assert_eq!(keyrings.len(), 0);
793+
794+
// Clean up.
795+
keyring.invalidate().unwrap();
778796
}
779797

780798
#[test]
781799
fn test_link_keyring() {
782-
unimplemented!()
800+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
801+
let mut new_keyring = keyring.add_keyring("new_keyring").unwrap();
802+
let new_inner_keyring = keyring.add_keyring("new_inner_keyring").unwrap();
803+
804+
new_keyring.link_keyring(&new_inner_keyring).unwrap();
805+
806+
let (keys, keyrings) = new_keyring.read().unwrap();
807+
assert_eq!(keys.len(), 0);
808+
assert_eq!(keyrings.len(), 1);
809+
assert_eq!(keyrings[0], new_inner_keyring);
810+
811+
// Clean up.
812+
new_inner_keyring.invalidate().unwrap();
813+
new_keyring.invalidate().unwrap();
814+
keyring.invalidate().unwrap();
783815
}
784816

785817
#[test]
786818
fn test_read_keyring() {
787-
unimplemented!()
819+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
820+
821+
let (keys, keyrings) = keyring.read().unwrap();
822+
assert_eq!(keys.len(), 0);
823+
assert_eq!(keyrings.len(), 0);
824+
825+
let key = keyring.add_key::<keytypes::User, _, _>("test:rust-keyutils:read_keyring", "payload".as_bytes()).unwrap();
826+
827+
let (keys, keyrings) = keyring.read().unwrap();
828+
assert_eq!(keys.len(), 1);
829+
assert_eq!(keys[0], key);
830+
assert_eq!(keyrings.len(), 0);
831+
832+
// Clean up.
833+
keyring.unlink_key(&key).unwrap();
834+
keyring.invalidate().unwrap();
788835
}
789836

790837
#[test]
791838
fn test_read_key() {
792-
unimplemented!()
839+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
840+
841+
// Create the key.
842+
let description = "test:rust-keyutils:read_key";
843+
let payload = "payload";
844+
let key = keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
845+
assert_eq!(key.read().unwrap(),
846+
payload.as_bytes().iter().cloned().collect::<Vec<_>>());
847+
848+
// Clean up.
849+
keyring.unlink_key(&key).unwrap();
850+
keyring.invalidate().unwrap();
793851
}
794852

795853
#[test]
796854
fn test_create_keyring() {
797-
unimplemented!()
855+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
856+
let new_keyring = keyring.add_keyring("new_keyring").unwrap();
857+
858+
let (keys, keyrings) = keyring.read().unwrap();
859+
assert_eq!(keys.len(), 0);
860+
assert_eq!(keyrings.len(), 1);
861+
assert_eq!(keyrings[0], new_keyring);
862+
863+
// Clean up.
864+
new_keyring.invalidate().unwrap();
865+
keyring.invalidate().unwrap();
798866
}
799867

800868
#[test]
801869
fn test_chmod_keyring() {
802-
unimplemented!()
870+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
871+
let description = keyring.description().unwrap();
872+
let perms = description.perms;
873+
let new_perms = {
874+
let mut tmp_perms = perms.clone();
875+
let write_bits = constants::POSSESSOR_WRITE | constants::USER_WRITE | constants::GROUP_WRITE | constants::OTHER_WRITE;
876+
tmp_perms.remove(write_bits);
877+
tmp_perms
878+
};
879+
keyring.set_permissions(new_perms).unwrap();
880+
let err = keyring.add_keyring("new_keyring").unwrap_err();
881+
assert_eq!(err.0, libc::EACCES);
882+
883+
keyring.set_permissions(perms).unwrap();
884+
let new_keyring = keyring.add_keyring("new_keyring").unwrap();
885+
886+
// Clean up.
887+
new_keyring.invalidate().unwrap();
888+
keyring.invalidate().unwrap();
803889
}
804890

805891
#[test]
806892
fn test_request_key() {
807-
unimplemented!()
893+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
894+
895+
// Create the key.
896+
let description = "test:rust-keyutils:request_key";
897+
let payload = "payload";
898+
let key = keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
899+
900+
let found_key = keyring.request_key(description).unwrap();
901+
assert_eq!(found_key, key);
902+
903+
// Clean up.
904+
keyring.unlink_key(&key).unwrap();
905+
keyring.invalidate().unwrap();
808906
}
809907

810908
#[test]
811909
fn test_revoke_key() {
812-
unimplemented!()
910+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
911+
912+
// Create the key.
913+
let description = "test:rust-keyutils:revoke_key";
914+
let payload = "payload";
915+
let key = keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
916+
let key_copy = key.clone();
917+
918+
key.revoke().unwrap();
919+
920+
let err = key_copy.read().unwrap_err();
921+
assert_eq!(err.0, libc::EKEYREVOKED);
922+
923+
// Clean up.
924+
keyring.unlink_key(&key_copy).unwrap();
925+
keyring.invalidate().unwrap();
813926
}
814927

815928
#[test]
816929
fn test_search_key() {
817-
unimplemented!()
930+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
931+
let mut new_keyring = keyring.add_keyring("new_keyring").unwrap();
932+
let mut new_inner_keyring = new_keyring.add_keyring("new_inner_keyring").unwrap();
933+
934+
// Create the key.
935+
let description = "test:rust-keyutils:search_key";
936+
let payload = "payload";
937+
let key = new_inner_keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
938+
939+
let found_key = keyring.search_for_key(description).unwrap();
940+
assert_eq!(found_key, key);
941+
942+
// Clean up.
943+
new_inner_keyring.unlink_key(&key).unwrap();
944+
new_inner_keyring.invalidate().unwrap();
945+
new_keyring.invalidate().unwrap();
946+
keyring.invalidate().unwrap();
818947
}
819948

820949
#[test]
821950
fn test_key_timeout() {
822-
unimplemented!()
951+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
952+
953+
// Create the key.
954+
let description = "test:rust-keyutils:key_timeout";
955+
let payload = "payload";
956+
let mut key = keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
957+
958+
// Set the timeout on the key.
959+
let duration = Duration::from_secs(1);
960+
let timeout_duration = duration + duration;
961+
key.set_timeout(duration).unwrap();
962+
963+
// Sleep the timeout away.
964+
thread::sleep(timeout_duration);
965+
966+
// Try to read the key.
967+
let err = key.read().unwrap_err();
968+
assert_eq!(err.0, libc::EKEYEXPIRED);
969+
970+
// Clean up.
971+
keyring.unlink_key(&key).unwrap();
972+
keyring.invalidate().unwrap();
973+
}
974+
975+
#[test]
976+
fn test_unlink_keyring() {
977+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
978+
979+
// Create the keyring.
980+
let description = "test:rust-keyutils:unlink_keyring";
981+
let new_keyring = keyring.add_keyring(description).unwrap();
982+
983+
let (keys, keyrings) = keyring.read().unwrap();
984+
assert_eq!(keys.len(), 0);
985+
assert_eq!(keyrings.len(), 1);
986+
987+
// Unlink the key.
988+
keyring.unlink_keyring(&new_keyring).unwrap();
989+
990+
// Use the keyring.
991+
let err = new_keyring.read().unwrap_err();
992+
assert_eq!(err.0, libc::EACCES);
993+
994+
let (keys, keyrings) = keyring.read().unwrap();
995+
assert_eq!(keys.len(), 0);
996+
assert_eq!(keyrings.len(), 0);
997+
998+
// Clean up.
999+
keyring.invalidate().unwrap();
8231000
}
8241001

8251002
#[test]
8261003
fn test_unlink_key() {
827-
unimplemented!()
1004+
let mut keyring = Keyring::attach_or_create(SpecialKeyring::Thread).unwrap();
1005+
1006+
// Create the key.
1007+
let description = "test:rust-keyutils:unlink_key";
1008+
let payload = "payload";
1009+
let key = keyring.add_key::<keytypes::User, _, _>(description, payload.as_bytes()).unwrap();
1010+
1011+
let (keys, keyrings) = keyring.read().unwrap();
1012+
assert_eq!(keys.len(), 1);
1013+
assert_eq!(keyrings.len(), 0);
1014+
1015+
// Unlink the key.
1016+
keyring.unlink_key(&key).unwrap();
1017+
1018+
// Use the key.
1019+
let err = key.read().unwrap_err();
1020+
assert_eq!(err.0, libc::EACCES);
1021+
1022+
let (keys, keyrings) = keyring.read().unwrap();
1023+
assert_eq!(keys.len(), 0);
1024+
assert_eq!(keyrings.len(), 0);
1025+
1026+
// Clean up.
1027+
keyring.invalidate().unwrap();
8281028
}
8291029

8301030
#[test]

0 commit comments

Comments
 (0)