()
| 1047 | .insert_header("content-type", "text/plain") |
| 1048 | .insert_header("etag", "\"12345\"") |
| 1049 | .set_body_bytes(TEST_BODY), |
| 1050 | ) |
| 1051 | .expect(1); |
| 1052 | |
| 1053 | // Mock HEAD request - should return same headers but no body |
| 1054 | let m_head = Mock::given(method("HEAD")) |
| 1055 | .respond_with( |
| 1056 | ResponseTemplate::new(200) |
| 1057 | .insert_header("cache-control", CACHEABLE_PUBLIC) |
| 1058 | .insert_header("content-type", "text/plain") |
| 1059 | .insert_header("etag", "\"12345\"") |
| 1060 | .insert_header("content-length", "4"), |
| 1061 | ) |
| 1062 | .expect(1); |
| 1063 | |
| 1064 | let mock_guard_get = mock_server.register_as_scoped(m_get).await; |
| 1065 | let url = format!("{}/", mock_server.uri()); |
| 1066 | let manager = create_cache_manager(); |
| 1067 | |
| 1068 | let client = ClientBuilder::new(Client::new()) |
| 1069 | .with(Cache(HttpCache { |
| 1070 | mode: CacheMode::Default, |
| 1071 | manager: manager.clone(), |
| 1072 | options: Default::default(), |
| 1073 | })) |
| 1074 | .build(); |
| 1075 | |
| 1076 | // First, cache a GET response |
| 1077 | let get_res = client.get(url.clone()).send().await?; |
| 1078 | assert_eq!(get_res.status(), 200); |
| 1079 | assert_eq!(get_res.bytes().await?, TEST_BODY); |
| 1080 | |
| 1081 | drop(mock_guard_get); |
| 1082 | let _mock_guard_head = mock_server.register_as_scoped(m_head).await; |
| 1083 | |
| 1084 | // HEAD request should be able to use cached GET response metadata |
| 1085 | // but still make a HEAD request to verify headers |
| 1086 | let head_res = client.head(url.clone()).send().await?; |
| 1087 | assert_eq!(head_res.status(), 200); |
| 1088 | assert_eq!(head_res.headers().get("etag").unwrap(), "\"12345\""); |
| 1089 | |
| 1090 | // Verify both GET and HEAD cache entries exist |
| 1091 | let get_data = |
| 1092 | CacheManager::get(&manager, &format!("GET:{}", url_parse(&url)?)) |
| 1093 | .await?; |
| 1094 | assert!(get_data.is_some()); |
| 1095 | |
| 1096 | let head_data = |
| 1097 | CacheManager::get(&manager, &format!("HEAD:{}", url_parse(&url)?)) |
| 1098 | .await?; |
| 1099 | assert!(head_data.is_some()); |
| 1100 | |
| 1101 | Ok(()) |
| 1102 | } |
nothing calls this directly
no test coverage detected