Skip to content

Commit 99a1562

Browse files
committed
added tests for allowed/not allowed keys in analytics query
1 parent e5f0ea9 commit 99a1562

File tree

2 files changed

+207
-7
lines changed

2 files changed

+207
-7
lines changed

sentry/src/routes/analytics.rs

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,4 +1282,210 @@ mod test {
12821282
// Err(ResponseError::BadRequest(err_msg))
12831283
// ));
12841284
}
1285+
1286+
1287+
#[tokio::test]
1288+
async fn test_allowed_keys_for_guest() {
1289+
let app_guard = setup_dummy_app().await;
1290+
let app = Arc::new(app_guard.app);
1291+
1292+
let allowed_keys = GET_ANALYTICS_ALLOWED_KEYS.clone();
1293+
let base_datehour = DateHour::from_ymdh(2022, 1, 17, 14);
1294+
1295+
1296+
// Test for each allowed key
1297+
// Country
1298+
{
1299+
let query = AnalyticsQuery {
1300+
limit: 1000,
1301+
event_type: CLICK,
1302+
metric: Metric::Count,
1303+
segment_by: None,
1304+
time: Time {
1305+
timeframe: Timeframe::Day,
1306+
start: base_datehour - 1,
1307+
end: None,
1308+
},
1309+
chains: vec![GANACHE_1337.chain_id],
1310+
country: Some("Bulgaria".to_string()),
1311+
..Default::default()
1312+
};
1313+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await;
1314+
assert!(res.is_ok());
1315+
}
1316+
// Ad Slot Type
1317+
{
1318+
let query = AnalyticsQuery {
1319+
limit: 1000,
1320+
event_type: CLICK,
1321+
metric: Metric::Count,
1322+
segment_by: None,
1323+
time: Time {
1324+
timeframe: Timeframe::Day,
1325+
start: base_datehour - 1,
1326+
end: None,
1327+
},
1328+
chains: vec![GANACHE_1337.chain_id],
1329+
ad_slot_type: Some("legacy_300x100".to_string()),
1330+
..Default::default()
1331+
};
1332+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await;
1333+
assert!(res.is_ok());
1334+
}
1335+
// Test each not allowed key
1336+
// CampaignId
1337+
{
1338+
let query = AnalyticsQuery {
1339+
limit: 1000,
1340+
event_type: CLICK,
1341+
metric: Metric::Count,
1342+
segment_by: None,
1343+
time: Time {
1344+
timeframe: Timeframe::Day,
1345+
start: base_datehour - 1,
1346+
end: None,
1347+
},
1348+
chains: vec![GANACHE_1337.chain_id],
1349+
campaign_id: Some(DUMMY_CAMPAIGN.id),
1350+
..Default::default()
1351+
};
1352+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should be an error");
1353+
assert_eq!(
1354+
ResponseError::Forbidden("Disallowed query key `campaignId`".into()),
1355+
res,
1356+
);
1357+
}
1358+
// AdUnit
1359+
{
1360+
let query = AnalyticsQuery {
1361+
limit: 1000,
1362+
event_type: CLICK,
1363+
metric: Metric::Count,
1364+
segment_by: None,
1365+
time: Time {
1366+
timeframe: Timeframe::Day,
1367+
start: base_datehour - 1,
1368+
end: None,
1369+
},
1370+
chains: vec![GANACHE_1337.chain_id],
1371+
ad_unit: Some(DUMMY_IPFS[0]),
1372+
..Default::default()
1373+
};
1374+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should be an error");
1375+
assert_eq!(
1376+
ResponseError::Forbidden("Disallowed query key `adUnit`".into()),
1377+
res,
1378+
);
1379+
}
1380+
// AdSlot
1381+
{
1382+
let query = AnalyticsQuery {
1383+
limit: 1000,
1384+
event_type: CLICK,
1385+
metric: Metric::Count,
1386+
segment_by: None,
1387+
time: Time {
1388+
timeframe: Timeframe::Day,
1389+
start: base_datehour - 1,
1390+
end: None,
1391+
},
1392+
chains: vec![GANACHE_1337.chain_id],
1393+
ad_slot: Some(DUMMY_IPFS[1]),
1394+
..Default::default()
1395+
};
1396+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should be an error");
1397+
assert_eq!(
1398+
ResponseError::Forbidden("Disallowed query key `adSlot`".into()),
1399+
res,
1400+
);
1401+
}
1402+
// Advertiser
1403+
{
1404+
let query = AnalyticsQuery {
1405+
limit: 1000,
1406+
event_type: CLICK,
1407+
metric: Metric::Count,
1408+
segment_by: None,
1409+
time: Time {
1410+
timeframe: Timeframe::Day,
1411+
start: base_datehour - 1,
1412+
end: None,
1413+
},
1414+
chains: vec![GANACHE_1337.chain_id],
1415+
advertiser: Some(*ADVERTISER),
1416+
..Default::default()
1417+
};
1418+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should throw an error");
1419+
assert_eq!(
1420+
ResponseError::Forbidden("Disallowed query key `advertiser`".into()),
1421+
res,
1422+
);
1423+
}
1424+
// Publisher
1425+
{
1426+
let query = AnalyticsQuery {
1427+
limit: 1000,
1428+
event_type: CLICK,
1429+
metric: Metric::Count,
1430+
segment_by: None,
1431+
time: Time {
1432+
timeframe: Timeframe::Day,
1433+
start: base_datehour - 1,
1434+
end: None,
1435+
},
1436+
chains: vec![GANACHE_1337.chain_id],
1437+
publisher: Some(*PUBLISHER),
1438+
..Default::default()
1439+
};
1440+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should throw an error");
1441+
assert_eq!(
1442+
ResponseError::Forbidden("Disallowed query key `publisher`".into()),
1443+
res,
1444+
);
1445+
}
1446+
// Hostname
1447+
{
1448+
let query = AnalyticsQuery {
1449+
limit: 1000,
1450+
event_type: CLICK,
1451+
metric: Metric::Count,
1452+
segment_by: None,
1453+
time: Time {
1454+
timeframe: Timeframe::Day,
1455+
start: base_datehour - 1,
1456+
end: None,
1457+
},
1458+
chains: vec![GANACHE_1337.chain_id],
1459+
hostname: Some("localhost".to_string()),
1460+
..Default::default()
1461+
};
1462+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should throw an error");
1463+
assert_eq!(
1464+
ResponseError::Forbidden("Disallowed query key `hostname`".into()),
1465+
res,
1466+
);
1467+
}
1468+
// OsName
1469+
{
1470+
let query = AnalyticsQuery {
1471+
limit: 1000,
1472+
event_type: CLICK,
1473+
metric: Metric::Count,
1474+
segment_by: None,
1475+
time: Time {
1476+
timeframe: Timeframe::Day,
1477+
start: base_datehour - 1,
1478+
end: None,
1479+
},
1480+
chains: vec![GANACHE_1337.chain_id],
1481+
os_name: Some(OperatingSystem::map_os("Windows")),
1482+
..Default::default()
1483+
};
1484+
let res = get_analytics(Extension(app.clone()), None, Extension(allowed_keys.clone()), None, Qs(query)).await.expect_err("should throw an error");
1485+
assert_eq!(
1486+
ResponseError::Forbidden("Disallowed query key `osName`".into()),
1487+
res,
1488+
);
1489+
}
1490+
}
12851491
}

sentry/src/routes/routers.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ mod test {
227227
body::Body,
228228
http::{Request, StatusCode},
229229
};
230-
use primitives::test_util::{ADVERTISER, FOLLOWER, IDS, LEADER, PUBLISHER};
230+
use primitives::{test_util::{ADVERTISER, FOLLOWER, IDS, LEADER, PUBLISHER}};
231231
use tower::Service;
232232

233233
#[tokio::test]
@@ -377,10 +377,4 @@ mod test {
377377
assert_eq!(StatusCode::OK, response.status());
378378
}
379379
}
380-
381-
#[tokio::test]
382-
async fn guest_route_allowed_key_tests() {
383-
// TODO: Test each allowed key
384-
// TODO: Test each not allowed key
385-
}
386380
}

0 commit comments

Comments
 (0)