MCPcopy Create free account
hub / github.com/06chaynes/http-cache / put_request_invalidates_cache

Function put_request_invalidates_cache

http-cache-tower/src/test.rs:1181–1226  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1179 Ok(())
1180 }
1181
1182 #[tokio::test]
1183 async fn put_request_invalidates_cache() -> Result<()> {
1184 let cache_dir = tempfile::tempdir()?;
1185 let cache_manager =
1186 CACacheManager::new(cache_dir.path().to_path_buf(), false);
1187 let cache_layer = HttpCacheLayer::new(cache_manager.clone());
1188
1189 let test_service = TestService::new(
1190 StatusCode::OK,
1191 vec![("cache-control", CACHEABLE_PUBLIC)],
1192 TEST_BODY,
1193 );
1194
1195 let mut cached_service = cache_layer.layer(test_service);
1196
1197 // First, cache a GET response
1198 let get_request = Request::builder()
1199 .uri("https://example.com/invalidate-test")
1200 .method("GET")
1201 .body(Full::new(Bytes::new()))?;
1202
1203 let get_response =
1204 cached_service.ready().await?.call(get_request).await?;
1205 assert_eq!(get_response.status(), StatusCode::OK);
1206
1207 // Verify it was cached by checking directly with the cache manager
1208 let cache_key = "GET:https://example.com/invalidate-test";
1209 let cached_data = cache_manager.get(cache_key).await?;
1210 assert!(cached_data.is_some());
1211
1212 // Now make a PUT request which should invalidate the cache
1213 let put_request = Request::builder()
1214 .uri("https://example.com/invalidate-test")
1215 .method("PUT")
1216 .body(Full::new(Bytes::from("updated data")))?;
1217
1218 // PUT should return OK but not be cacheable
1219 let put_response =
1220 cached_service.ready().await?.call(put_request).await?;
1221 assert_eq!(put_response.status(), StatusCode::OK);
1222
1223 // Verify the GET response was invalidated from cache
1224 let cached_data_after = cache_manager.get(cache_key).await?;
1225 assert!(cached_data_after.is_none());
1226
1227 Ok(())
1228 }
1229

Callers

nothing calls this directly

Calls 6

cloneMethod · 0.80
bodyMethod · 0.80
layerMethod · 0.45
methodMethod · 0.45
callMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected