@@ -705,8 +705,13 @@ impl KeyManager {
705
705
706
706
#[ cfg( test) ]
707
707
mod tests {
708
+ use crates:: libc;
709
+
710
+ use std:: thread;
711
+ use std:: time:: Duration ;
712
+
708
713
use api:: Keyring ;
709
- use constants:: SpecialKeyring ;
714
+ use constants:: { self , SpecialKeyring } ;
710
715
use keytype:: KeyType ;
711
716
use keytypes;
712
717
@@ -774,57 +779,252 @@ mod tests {
774
779
775
780
#[ test]
776
781
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 ( ) ;
778
796
}
779
797
780
798
#[ test]
781
799
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 ( ) ;
783
815
}
784
816
785
817
#[ test]
786
818
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 ( ) ;
788
835
}
789
836
790
837
#[ test]
791
838
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 ( ) ;
793
851
}
794
852
795
853
#[ test]
796
854
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 ( ) ;
798
866
}
799
867
800
868
#[ test]
801
869
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 ( ) ;
803
889
}
804
890
805
891
#[ test]
806
892
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 ( ) ;
808
906
}
809
907
810
908
#[ test]
811
909
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 ( ) ;
813
926
}
814
927
815
928
#[ test]
816
929
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 ( ) ;
818
947
}
819
948
820
949
#[ test]
821
950
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 ( ) ;
823
1000
}
824
1001
825
1002
#[ test]
826
1003
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 ( ) ;
828
1028
}
829
1029
830
1030
#[ test]
0 commit comments