| 197 | |
| 198 | #[mz_ore::test(tokio::test)] |
| 199 | async fn test_read_from_cache() { |
| 200 | let controller = InMemorySecretsController::new(); |
| 201 | let testing_reader = TestingSecretsReader::new(controller.reader()); |
| 202 | let caching_reader = CachingSecretsReader::new(Arc::new(testing_reader.clone())); |
| 203 | |
| 204 | let secret = [42, 42, 42, 42]; |
| 205 | let id = CatalogItemId::User(1); |
| 206 | |
| 207 | // Add a new secret and read it back. |
| 208 | controller |
| 209 | .ensure(CatalogItemId::User(1), &secret[..]) |
| 210 | .await |
| 211 | .expect("success"); |
| 212 | let roundtrip = caching_reader.read(id).await.expect("success"); |
| 213 | |
| 214 | // The secret should be correct. |
| 215 | assert_eq!(roundtrip, secret.to_vec()); |
| 216 | |
| 217 | // Read it a second time, our cache should be populated now. |
| 218 | let roundtrip2 = caching_reader.read(id).await.expect("success"); |
| 219 | assert_eq!(roundtrip2, secret.to_vec()); |
| 220 | |
| 221 | let reads = testing_reader.drain(); |
| 222 | assert_eq!(reads.len(), 1); |
| 223 | |
| 224 | // We should only have one read, as the second should have hit the cache. |
| 225 | assert_eq!(reads[0], id); |
| 226 | } |
| 227 | |
| 228 | #[mz_ore::test(tokio::test)] |
| 229 | async fn test_reading_expired_secret() { |