| 339 | |
| 340 | #[mz_ore::test(tokio::test)] |
| 341 | async fn test_invalidate() { |
| 342 | let controller = InMemorySecretsController::new(); |
| 343 | let testing_reader = TestingSecretsReader::new(controller.reader()); |
| 344 | let caching_reader = CachingSecretsReader::new(Arc::new(testing_reader.clone())); |
| 345 | |
| 346 | let secret = [42, 42, 42, 42]; |
| 347 | let id = CatalogItemId::User(1); |
| 348 | |
| 349 | controller.ensure(id, &secret).await.expect("success"); |
| 350 | caching_reader.read(id).await.expect("success"); |
| 351 | |
| 352 | caching_reader.read(id).await.expect("success"); |
| 353 | let reads = testing_reader.drain(); |
| 354 | assert_eq!(reads.len(), 1); |
| 355 | |
| 356 | assert!(caching_reader.invalidate(id)); |
| 357 | |
| 358 | caching_reader.read(id).await.expect("success"); |
| 359 | let reads = testing_reader.drain(); |
| 360 | assert_eq!(reads.len(), 1); |
| 361 | assert_eq!(reads[0], id); |
| 362 | |
| 363 | assert!(!caching_reader.invalidate(CatalogItemId::User(999))); |
| 364 | } |
| 365 | |
| 366 | /// A "secrets controller" that logs all of the actions it takes and allows us to inject |
| 367 | /// failures. Used to test the implementation of our caching secrets controller. |