@@ -137,6 +137,7 @@ pub fn set_buffer(
137137 }
138138}
139139
140+ #[ cfg( not( test) ) ]
140141extern "C" {
141142 fn proxy_get_header_map_pairs (
142143 map_type : MapType ,
@@ -145,6 +146,15 @@ extern "C" {
145146 ) -> Status ;
146147}
147148
149+ #[ cfg( test) ]
150+ fn proxy_get_header_map_pairs (
151+ map_type : MapType ,
152+ return_map_data : * mut * mut u8 ,
153+ return_map_size : * mut usize ,
154+ ) -> Status {
155+ alloc_tests:: proxy_get_header_map_pairs ( map_type, return_map_data, return_map_size)
156+ }
157+
148158pub fn get_map ( map_type : MapType ) -> Result < Vec < ( String , String ) > , Status > {
149159 unsafe {
150160 let mut return_data: * mut u8 = null_mut ( ) ;
@@ -1147,6 +1157,78 @@ pub fn increment_metric(metric_id: u32, offset: i64) -> Result<(), Status> {
11471157 }
11481158}
11491159
1160+ #[ cfg( test) ]
1161+ mod alloc_tests {
1162+ use crate :: types:: * ;
1163+
1164+ use mockalloc:: Mockalloc ;
1165+ use std:: alloc:: { alloc, Layout , System } ;
1166+
1167+ #[ global_allocator]
1168+ static ALLOCATOR : Mockalloc < System > = Mockalloc ( System ) ;
1169+
1170+ // mock extern call
1171+ pub fn proxy_get_header_map_pairs (
1172+ _map_type : MapType ,
1173+ return_map_data : * mut * mut u8 ,
1174+ return_map_size : * mut usize ,
1175+ ) -> Status {
1176+ let layout = Layout :: array :: < u8 > ( SERIALIZED_MAP . len ( ) ) . unwrap ( ) ;
1177+ unsafe {
1178+ * return_map_data = alloc ( layout) ;
1179+ * return_map_size = SERIALIZED_MAP . len ( ) ;
1180+ std:: ptr:: copy (
1181+ SERIALIZED_MAP . as_ptr ( ) ,
1182+ * return_map_data,
1183+ SERIALIZED_MAP . len ( ) ,
1184+ ) ;
1185+ }
1186+ Status :: Ok
1187+ }
1188+
1189+ #[ rustfmt:: skip]
1190+ static SERIALIZED_MAP : & [ u8 ] = & [
1191+ // num entries
1192+ 4 , 0 , 0 , 0 ,
1193+ // len (":method", "GET")
1194+ 7 , 0 , 0 , 0 , 3 , 0 , 0 , 0 ,
1195+ // len (":path", "/bytes/1")
1196+ 5 , 0 , 0 , 0 , 8 , 0 , 0 , 0 ,
1197+ // len (":authority", "httpbin.org")
1198+ 10 , 0 , 0 , 0 , 11 , 0 , 0 , 0 ,
1199+ // len ("Powered-By", "proxy-wasm")
1200+ 10 , 0 , 0 , 0 , 10 , 0 , 0 , 0 ,
1201+ // ":method"
1202+ 58 , 109 , 101 , 116 , 104 , 111 , 100 , 0 ,
1203+ // "GET"
1204+ 71 , 69 , 84 , 0 ,
1205+ // ":path"
1206+ 58 , 112 , 97 , 116 , 104 , 0 ,
1207+ // "/bytes/1"
1208+ 47 , 98 , 121 , 116 , 101 , 115 , 47 , 49 , 0 ,
1209+ // ":authority"
1210+ 58 , 97 , 117 , 116 , 104 , 111 , 114 , 105 , 116 , 121 , 0 ,
1211+ // "httpbin.org"
1212+ 104 , 116 , 116 , 112 , 98 , 105 , 110 , 46 , 111 , 114 , 103 , 0 ,
1213+ // "Powered-By"
1214+ 80 , 111 , 119 , 101 , 114 , 101 , 100 , 45 , 66 , 121 , 0 ,
1215+ // "proxy-wasm"
1216+ 112 , 114 , 111 , 120 , 121 , 45 , 119 , 97 , 115 , 109 , 0 ,
1217+ ] ;
1218+
1219+ #[ mockalloc:: test]
1220+ fn get_map_no_leaks ( ) {
1221+ let result = super :: get_map ( MapType :: HttpRequestHeaders ) ;
1222+ assert ! ( result. is_ok( ) ) ;
1223+ }
1224+
1225+ #[ mockalloc:: test]
1226+ fn get_map_bytes_no_leaks ( ) {
1227+ let result = super :: get_map_bytes ( MapType :: HttpRequestHeaders ) ;
1228+ assert ! ( result. is_ok( ) ) ;
1229+ }
1230+ }
1231+
11501232mod utils {
11511233 use crate :: types:: Bytes ;
11521234 use std:: convert:: TryFrom ;
0 commit comments