move db and anvil functions to their proper places
This commit is contained in:
parent
6b5437be2c
commit
2b1829a882
@ -1,12 +1,17 @@
|
||||
// TODO: option to spawn in a dedicated thread?
|
||||
// TODO: option to subscribe to another anvil and copy blocks
|
||||
|
||||
use ethers::utils::{Anvil, AnvilInstance};
|
||||
use ethers::{
|
||||
signers::LocalWallet,
|
||||
utils::{Anvil, AnvilInstance},
|
||||
};
|
||||
use tracing::info;
|
||||
use web3_proxy::rpcs::provider::EthersHttpProvider;
|
||||
|
||||
/// on drop, the anvil instance will be shut down
|
||||
pub struct TestAnvil {
|
||||
pub instance: AnvilInstance,
|
||||
pub provider: EthersHttpProvider,
|
||||
}
|
||||
|
||||
impl TestAnvil {
|
||||
@ -19,6 +24,13 @@ impl TestAnvil {
|
||||
// .fork("https://polygon.llamarpc.com@44300000")
|
||||
.spawn();
|
||||
|
||||
Self { instance }
|
||||
let provider = EthersHttpProvider::try_from(instance.endpoint()).unwrap();
|
||||
|
||||
Self { instance, provider }
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn wallet(&self, id: usize) -> LocalWallet {
|
||||
self.instance.keys()[id].clone().into()
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,9 @@
|
||||
use super::{anvil::TestAnvil, mysql::TestMysql};
|
||||
use ethers::{
|
||||
prelude::{Http, Provider},
|
||||
signers::LocalWallet,
|
||||
types::Address,
|
||||
};
|
||||
use hashbrown::HashMap;
|
||||
use migration::sea_orm::DatabaseConnection;
|
||||
use parking_lot::Mutex;
|
||||
use serde_json::json;
|
||||
use std::{
|
||||
@ -30,15 +28,6 @@ use web3_proxy::{
|
||||
};
|
||||
|
||||
pub struct TestApp {
|
||||
/// anvil shuts down when this guard is dropped.
|
||||
pub anvil: TestAnvil,
|
||||
|
||||
/// connection to anvil.
|
||||
pub anvil_provider: Provider<Http>,
|
||||
|
||||
/// keep track of the database so it can be stopped on drop
|
||||
pub db: Option<TestMysql>,
|
||||
|
||||
/// spawn handle for the proxy.
|
||||
pub proxy_handle: Mutex<Option<JoinHandle<anyhow::Result<()>>>>,
|
||||
|
||||
@ -53,7 +42,7 @@ pub struct TestApp {
|
||||
}
|
||||
|
||||
impl TestApp {
|
||||
pub async fn spawn(anvil: TestAnvil, db: Option<TestMysql>) -> Self {
|
||||
pub async fn spawn(anvil: &TestAnvil, db: Option<&TestMysql>) -> Self {
|
||||
let chain_id = anvil.instance.chain_id();
|
||||
let num_workers = 2;
|
||||
|
||||
@ -62,9 +51,7 @@ impl TestApp {
|
||||
|
||||
info!(%path);
|
||||
|
||||
let anvil_provider = Provider::<Http>::try_from(anvil.instance.endpoint()).unwrap();
|
||||
|
||||
let db_url = db.as_ref().map(|x| x.url.clone());
|
||||
let db_url = db.map(|x| x.url.clone());
|
||||
|
||||
// make a test TopConfig
|
||||
// TODO: test influx
|
||||
@ -138,9 +125,6 @@ impl TestApp {
|
||||
let proxy_provider = Provider::<Http>::try_from(proxy_endpoint).unwrap();
|
||||
|
||||
Self {
|
||||
anvil,
|
||||
anvil_provider,
|
||||
db,
|
||||
proxy_handle: Mutex::new(Some(handle)),
|
||||
proxy_provider,
|
||||
flush_stat_buffer_sender,
|
||||
@ -148,11 +132,6 @@ impl TestApp {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn db_conn(&self) -> &DatabaseConnection {
|
||||
self.db.as_ref().unwrap().conn()
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub async fn flush_stats(&self) -> anyhow::Result<FlushedStats> {
|
||||
let (tx, rx) = oneshot::channel();
|
||||
@ -180,11 +159,6 @@ impl TestApp {
|
||||
handle.await.unwrap().unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn wallet(&self, id: usize) -> LocalWallet {
|
||||
self.anvil.instance.keys()[id].clone().into()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for TestApp {
|
||||
|
@ -5,12 +5,15 @@ use tracing::info;
|
||||
use web3_proxy::frontend::users::authentication::{LoginPostResponse, PostLogin};
|
||||
use web3_proxy::sub_commands::ChangeAdminStatusSubCommand;
|
||||
|
||||
use super::mysql::TestMysql;
|
||||
|
||||
/// Helper function to create admin
|
||||
|
||||
/// Create user as admin
|
||||
#[allow(unused)]
|
||||
pub async fn create_user_as_admin(
|
||||
x: &TestApp,
|
||||
db: &TestMysql,
|
||||
r: &reqwest::Client,
|
||||
admin_wallet: &LocalWallet,
|
||||
) -> LoginPostResponse {
|
||||
@ -65,7 +68,7 @@ pub async fn create_user_as_admin(
|
||||
|
||||
info!("Changing the status of the admin_wallet to be an admin");
|
||||
// Pass on the database into it ...
|
||||
admin_status_changer.main(x.db_conn()).await.unwrap();
|
||||
admin_status_changer.main(db.conn()).await.unwrap();
|
||||
|
||||
// Now log him in again, because he was just signed out
|
||||
// Login the admin again, because he was just signed out
|
||||
|
@ -9,6 +9,8 @@ use tracing::info;
|
||||
use web3_proxy::errors::Web3ProxyResult;
|
||||
use web3_proxy::frontend::users::authentication::{LoginPostResponse, PostLogin};
|
||||
|
||||
use super::mysql::TestMysql;
|
||||
|
||||
/// Helper function to create an "ordinary" user
|
||||
#[allow(unused)]
|
||||
pub async fn create_user(
|
||||
@ -55,10 +57,11 @@ pub async fn create_user(
|
||||
#[allow(unused)]
|
||||
pub async fn set_user_tier(
|
||||
x: &TestApp,
|
||||
db: &TestMysql,
|
||||
user: user::Model,
|
||||
tier_name: &str,
|
||||
) -> Web3ProxyResult<user_tier::Model> {
|
||||
let db_conn = x.db_conn();
|
||||
let db_conn = db.conn();
|
||||
|
||||
let ut = user_tier::Entity::find()
|
||||
.filter(user_tier::Column::Title.like(tier_name))
|
||||
|
@ -21,7 +21,7 @@ async fn test_admin_imitate_user() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
todo!();
|
||||
}
|
||||
@ -35,7 +35,7 @@ async fn test_admin_grant_credits() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(3))
|
||||
@ -43,12 +43,12 @@ async fn test_admin_grant_credits() {
|
||||
.unwrap();
|
||||
|
||||
// Setup variables that will be used
|
||||
let user_wallet = x.wallet(0);
|
||||
let admin_wallet = x.wallet(1);
|
||||
let user_wallet = a.wallet(0);
|
||||
let admin_wallet = a.wallet(1);
|
||||
info!(?admin_wallet);
|
||||
|
||||
let user_login_response = create_user(&x, &r, &user_wallet, None).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
info!(?admin_login_response);
|
||||
|
||||
let increase_balance_response = admin_increase_balance(
|
||||
@ -75,10 +75,10 @@ async fn test_admin_grant_credits() {
|
||||
#[ignore = "under construction"]
|
||||
#[test_log::test(tokio::test)]
|
||||
async fn test_admin_change_user_tier() {
|
||||
let anvil = TestAnvil::spawn(31337).await;
|
||||
let a = TestAnvil::spawn(31337).await;
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(anvil, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
todo!();
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ async fn it_migrates_the_db() {
|
||||
let a = TestAnvil::spawn(31337).await;
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
// we call flush stats more to be sure it works than because we expect it to save any stats
|
||||
x.flush_stats().await.unwrap();
|
||||
@ -26,9 +26,9 @@ async fn it_migrates_the_db() {
|
||||
async fn it_starts_and_stops() {
|
||||
let a = TestAnvil::spawn(31337).await;
|
||||
|
||||
let x = TestApp::spawn(a, None).await;
|
||||
let x = TestApp::spawn(&a, None).await;
|
||||
|
||||
let anvil_provider = &x.anvil_provider;
|
||||
let anvil_provider = &a.provider;
|
||||
let proxy_provider = &x.proxy_provider;
|
||||
|
||||
let anvil_result = anvil_provider
|
||||
|
@ -19,7 +19,7 @@ async fn test_sum_credits_used() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(3))
|
||||
@ -27,11 +27,11 @@ async fn test_sum_credits_used() {
|
||||
.unwrap();
|
||||
|
||||
// create wallets for users
|
||||
let user_wallet = x.wallet(0);
|
||||
let admin_wallet = x.wallet(1);
|
||||
let user_wallet = a.wallet(0);
|
||||
let admin_wallet = a.wallet(1);
|
||||
|
||||
// log in to create users
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
let user_login_response = create_user(&x, &r, &user_wallet, None).await;
|
||||
|
||||
info!("starting balance");
|
||||
|
@ -42,11 +42,11 @@ async fn test_log_in_and_out() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::new();
|
||||
|
||||
let w = x.wallet(0);
|
||||
let w = a.wallet(0);
|
||||
|
||||
let login_get_url = format!("{}user/login/{:?}", x.proxy_provider.url(), w.address());
|
||||
let login_message = r.get(login_get_url).send().await.unwrap();
|
||||
@ -103,18 +103,18 @@ async fn test_admin_balance_increase() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let user_wallet = x.wallet(0);
|
||||
let admin_wallet = x.wallet(1);
|
||||
let user_wallet = a.wallet(0);
|
||||
let admin_wallet = a.wallet(1);
|
||||
|
||||
// Create three users, one referrer, one admin who bumps both their balances
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
let user_login_response = create_user(&x, &r, &user_wallet, None).await;
|
||||
|
||||
// Bump both user's wallet to $20
|
||||
@ -156,18 +156,18 @@ async fn test_user_balance_decreases() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let user_wallet = x.wallet(0);
|
||||
let admin_wallet = x.wallet(1);
|
||||
let user_wallet = a.wallet(0);
|
||||
let admin_wallet = a.wallet(1);
|
||||
|
||||
// Create three users, one referrer, one admin who bumps both their balances
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
let user_login_response = create_user(&x, &r, &user_wallet, None).await;
|
||||
|
||||
// Get the rpc keys for this user
|
||||
@ -264,20 +264,20 @@ async fn test_referral_bonus_non_concurrent() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let user_wallet = x.wallet(0);
|
||||
let referrer_wallet = x.wallet(1);
|
||||
let admin_wallet = x.wallet(2);
|
||||
let user_wallet = a.wallet(0);
|
||||
let referrer_wallet = a.wallet(1);
|
||||
let admin_wallet = a.wallet(2);
|
||||
|
||||
// Create three users, one referrer, one admin who bumps both their balances
|
||||
let referrer_login_response = create_user(&x, &r, &referrer_wallet, None).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
// Get the first user's referral link
|
||||
let referral_link = get_referral_code(&x, &r, &referrer_login_response).await;
|
||||
|
||||
@ -413,20 +413,20 @@ async fn test_referral_bonus_concurrent_referrer_only() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let user_wallet = x.wallet(0);
|
||||
let referrer_wallet = x.wallet(1);
|
||||
let admin_wallet = x.wallet(2);
|
||||
let user_wallet = a.wallet(0);
|
||||
let referrer_wallet = a.wallet(1);
|
||||
let admin_wallet = a.wallet(2);
|
||||
|
||||
// Create three users, one referrer, one admin who bumps both their balances
|
||||
let referrer_login_response = create_user(&x, &r, &referrer_wallet, None).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
// Get the first user's referral link
|
||||
let referral_link = get_referral_code(&x, &r, &referrer_login_response).await;
|
||||
|
||||
@ -573,20 +573,20 @@ async fn test_referral_bonus_concurrent_referrer_and_user() {
|
||||
|
||||
let db = TestMysql::spawn().await;
|
||||
|
||||
let x = TestApp::spawn(a, Some(db)).await;
|
||||
let x = TestApp::spawn(&a, Some(&db)).await;
|
||||
|
||||
let r = reqwest::Client::builder()
|
||||
.timeout(Duration::from_secs(20))
|
||||
.build()
|
||||
.unwrap();
|
||||
|
||||
let user_wallet = x.wallet(0);
|
||||
let referrer_wallet = x.wallet(1);
|
||||
let admin_wallet = x.wallet(2);
|
||||
let user_wallet = a.wallet(0);
|
||||
let referrer_wallet = a.wallet(1);
|
||||
let admin_wallet = a.wallet(2);
|
||||
|
||||
// Create three users, one referrer, one admin who bumps both their balances
|
||||
let referrer_login_response = create_user(&x, &r, &referrer_wallet, None).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &r, &admin_wallet).await;
|
||||
let admin_login_response = create_user_as_admin(&x, &db, &r, &admin_wallet).await;
|
||||
// Get the first user's referral link
|
||||
let referral_link = get_referral_code(&x, &r, &referrer_login_response).await;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user