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 if !parent.as_os_str().is_empty() && !parent.exists() {
23 relay_log::debug!("creating directory for spooling file: {}", parent.display());
24 DirBuilder::new()
25 .recursive(true)
26 .create(&parent)
27 .await
28 .unwrap();
29 }
30 }
31
32 let options = SqliteConnectOptions::new()
33 .filename(&path)
34 .journal_mode(SqliteJournalMode::Wal)
35 .create_if_missing(true);
36
37 let db = SqlitePoolOptions::new()
38 .connect_with(options)
39 .await
40 .unwrap();
41
42 if run_migrations {
43 sqlx::migrate!("../migrations").run(&db).await.unwrap();
44 }
45
46 db
47 }
48
49 pub fn request_meta() -> RequestMeta {
50 let dsn = "https://a94ae32be2584e0bbd7a4cbb95971fee:@sentry.io/42"
51 .parse()
52 .unwrap();
53
54 RequestMeta::new(dsn)
55 }
56
57 pub fn mock_envelope(received_at: DateTime<Utc>) -> Box<Envelope> {
58 let event_id = EventId::new();
59 let mut envelope = Envelope::from_request(Some(event_id), request_meta());
60
61 let dsc = DynamicSamplingContext {
62 trace_id: "67e5504410b1426f9247bb680e5fe0c8".parse().unwrap(),
63 public_key: ProjectKey::parse("b81ae32be2584e0bbd7a4cbb95971fe1").unwrap(),
64 release: Some("1.1.1".to_owned()),
65 user: Default::default(),
66 replay_id: None,
67 environment: None,
68 transaction: Some("transaction1".into()),
69 sample_rate: None,
70 sampled: Some(true),
71 other: BTreeMap::new(),
72 };
73
74 envelope.set_dsc(dsc);
75 envelope.set_received_at(received_at);
76
77 envelope.add_item(Item::new(ItemType::Transaction));
78
79 envelope
80 }
81
82 #[allow(clippy::vec_box)]
83 pub fn mock_envelopes(count: usize) -> Vec<Box<Envelope>> {
84 let now = Utc::now();
85 (0..count)
86 .map(|i| mock_envelope(now - chrono::Duration::seconds((count - i) as i64)))
87 .collect()
88 }
89}