@@ -39,3 +39,107 @@ impl InMemoryKeyRepository {
3939 }
4040 }
4141}
42+
43+ #[ cfg( test) ]
44+ mod tests {
45+
46+ mod the_in_memory_key_repository_should {
47+ use std:: time:: Duration ;
48+
49+ use crate :: authentication:: {
50+ key:: { repository:: in_memory:: InMemoryKeyRepository , Key } ,
51+ PeerKey ,
52+ } ;
53+
54+ #[ tokio:: test]
55+ async fn insert_a_new_peer_key ( ) {
56+ let repository = InMemoryKeyRepository :: default ( ) ;
57+
58+ let new_peer_key = PeerKey {
59+ key : Key :: new ( "YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ" ) . unwrap ( ) ,
60+ valid_until : Some ( Duration :: new ( 9999 , 0 ) ) ,
61+ } ;
62+
63+ repository. insert ( & new_peer_key) . await ;
64+
65+ let peer_key = repository. get ( & new_peer_key. key ) . await ;
66+
67+ assert_eq ! ( peer_key, Some ( new_peer_key) ) ;
68+ }
69+
70+ #[ tokio:: test]
71+ async fn remove_a_new_peer_key ( ) {
72+ let repository = InMemoryKeyRepository :: default ( ) ;
73+
74+ let new_peer_key = PeerKey {
75+ key : Key :: new ( "YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ" ) . unwrap ( ) ,
76+ valid_until : Some ( Duration :: new ( 9999 , 0 ) ) ,
77+ } ;
78+
79+ repository. insert ( & new_peer_key) . await ;
80+
81+ repository. remove ( & new_peer_key. key ) . await ;
82+
83+ let peer_key = repository. get ( & new_peer_key. key ) . await ;
84+
85+ assert_eq ! ( peer_key, None ) ;
86+ }
87+
88+ #[ tokio:: test]
89+ async fn get_a_new_peer_key_by_its_internal_key ( ) {
90+ let repository = InMemoryKeyRepository :: default ( ) ;
91+
92+ let expected_peer_key = PeerKey {
93+ key : Key :: new ( "YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ" ) . unwrap ( ) ,
94+ valid_until : Some ( Duration :: new ( 9999 , 0 ) ) ,
95+ } ;
96+
97+ repository. insert ( & expected_peer_key) . await ;
98+
99+ let peer_key = repository. get ( & expected_peer_key. key ) . await ;
100+
101+ assert_eq ! ( peer_key, Some ( expected_peer_key) ) ;
102+ }
103+
104+ #[ tokio:: test]
105+ async fn clear_all_peer_keys ( ) {
106+ let repository = InMemoryKeyRepository :: default ( ) ;
107+
108+ let new_peer_key = PeerKey {
109+ key : Key :: new ( "YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ" ) . unwrap ( ) ,
110+ valid_until : Some ( Duration :: new ( 9999 , 0 ) ) ,
111+ } ;
112+
113+ repository. insert ( & new_peer_key) . await ;
114+
115+ repository. clear ( ) . await ;
116+
117+ let peer_key = repository. get ( & new_peer_key. key ) . await ;
118+
119+ assert_eq ! ( peer_key, None ) ;
120+ }
121+
122+ #[ tokio:: test]
123+ async fn reset_the_peer_keys_with_a_new_list_of_keys ( ) {
124+ let repository = InMemoryKeyRepository :: default ( ) ;
125+
126+ let old_peer_key = PeerKey {
127+ key : Key :: new ( "YZSl4lMZupRuOpSRC3krIKR5BPB14nrJ" ) . unwrap ( ) ,
128+ valid_until : Some ( Duration :: new ( 9999 , 0 ) ) ,
129+ } ;
130+
131+ repository. insert ( & old_peer_key) . await ;
132+
133+ let new_peer_key = PeerKey {
134+ key : Key :: new ( "kqdVKHlKKWXzAideqI5gvjBP4jdbe5dW" ) . unwrap ( ) ,
135+ valid_until : Some ( Duration :: new ( 9999 , 0 ) ) ,
136+ } ;
137+
138+ repository. reset_with ( vec ! [ new_peer_key. clone( ) ] ) . await ;
139+
140+ let peer_key = repository. get ( & new_peer_key. key ) . await ;
141+
142+ assert_eq ! ( peer_key, Some ( new_peer_key) ) ;
143+ }
144+ }
145+ }
0 commit comments