relay_server/services/buffer/
testutils.rs1#[cfg(test)]
2pub mod utils {
3 use chrono::{DateTime, Utc};
4 use relay_base_schema::project::ProjectKey;
5 use relay_event_schema::protocol::EventId;
6 use relay_sampling::DynamicSamplingContext;
7 use sqlx::sqlite::{SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions};
8 use sqlx::{Pool, Sqlite};
9 use std::collections::BTreeMap;
10 use tokio::fs::DirBuilder;
11 use uuid::Uuid;
12
13 use crate::Envelope;
14 use crate::envelope::{Item, ItemType};
15 use crate::extractors::RequestMeta;
16
17 pub async fn setup_db(run_migrations: bool) -> Pool<Sqlite> {
19 let path = std::env::temp_dir().join(Uuid::new_v4().to_string());
20
21 if let Some(parent) = path.parent()
22 && !parent.as_os_str().is_empty()
23 && !parent.exists()
24 {
25 relay_log::debug!("creating directory for spooling file: {}", parent.display());
26 DirBuilder::new()
27 .recursive(true)
28 .create(&parent)
29 .await
30 .unwrap();
31 }
32
33 let options = SqliteConnectOptions::new()
34 .filename(&path)
35 .journal_mode(SqliteJournalMode::Wal)
36 .create_if_missing(true);
37
38 let db = SqlitePoolOptions::new()
39 .connect_with(options)
40 .await
41 .unwrap();
42
43 if run_migrations {
44 sqlx::migrate!("../migrations").run(&db).await.unwrap();
45 }
46
47 db
48 }
49
50 pub fn request_meta() -> RequestMeta {
51 let dsn = "https://a94ae32be2584e0bbd7a4cbb95971fee:@sentry.io/42"
52 .parse()
53 .unwrap();
54
55 RequestMeta::new(dsn)
56 }
57
58 pub fn mock_envelope(received_at: DateTime<Utc>) -> Box<Envelope> {
59 let event_id = EventId::new();
60 let mut envelope = Envelope::from_request(Some(event_id), request_meta());
61
62 let dsc = DynamicSamplingContext {
63 trace_id: "67e5504410b1426f9247bb680e5fe0c8".parse().unwrap(),
64 public_key: ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(),
65 release: Some("1.1.1".to_owned()),
66 user: Default::default(),
67 replay_id: None,
68 environment: None,
69 transaction: Some("transaction1".into()),
70 sample_rate: None,
71 sampled: Some(true),
72 other: BTreeMap::new(),
73 };
74
75 envelope.set_dsc(dsc);
76 envelope.set_received_at(received_at);
77
78 envelope.add_item(Item::new(ItemType::Transaction));
79
80 envelope
81 }
82
83 #[allow(clippy::vec_box)]
84 pub fn mock_envelopes(count: usize) -> Vec<Box<Envelope>> {
85 let now = Utc::now();
86 (0..count)
87 .map(|i| mock_envelope(now - chrono::Duration::seconds((count - i) as i64)))
88 .collect()
89 }
90}