From d3cbb9e2ec2610ba0ff9c3f143a1f26e42ca8c6d Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 30 Jan 2023 21:09:47 +0100 Subject: [PATCH] Create a single rust test binary (#425) Speeds up the linking step, needs way less disk space for test binaries and executes tests significantly faster. Test execution went from 35s -> 29s for me and compilation improved a lot. --- programs/mango-v4/tests/cases/mod.rs | 33 +++++++++++++++++++ .../mango-v4/tests/{ => cases}/test_alt.rs | 12 +------ .../tests/{ => cases}/test_bankrupt_tokens.rs | 13 +------- .../mango-v4/tests/{ => cases}/test_basic.rs | 11 +------ .../tests/{ => cases}/test_benchmark.rs | 8 +---- .../tests/{ => cases}/test_borrow_limits.rs | 9 +---- .../tests/{ => cases}/test_delegate.rs | 12 +------ .../tests/{ => cases}/test_health_compute.rs | 13 +------- .../tests/{ => cases}/test_health_region.rs | 13 +------- .../tests/{ => cases}/test_ix_gate_set.rs | 11 +------ .../tests/{ => cases}/test_liq_perps.rs | 16 +-------- .../tests/{ => cases}/test_liq_tokens.rs | 11 +------ .../tests/{ => cases}/test_margin_trade.rs | 9 +---- .../mango-v4/tests/{ => cases}/test_perp.rs | 15 +-------- .../tests/{ => cases}/test_perp_settle.rs | 11 +------ .../{ => cases}/test_perp_settle_fees.rs | 11 +------ .../{ => cases}/test_position_lifetime.rs | 13 ++------ .../tests/{ => cases}/test_reduce_only.rs | 11 +------ .../mango-v4/tests/{ => cases}/test_serum.rs | 20 ++--------- .../test_token_update_index_and_rate.rs | 12 +------ .../mango-v4/tests/program_test/cookies.rs | 2 +- .../tests/program_test/mango_client.rs | 2 +- programs/mango-v4/tests/program_test/serum.rs | 2 +- .../mango-v4/tests/program_test/solana.rs | 2 +- programs/mango-v4/tests/test_all.rs | 4 +++ 25 files changed, 62 insertions(+), 214 deletions(-) create mode 100644 programs/mango-v4/tests/cases/mod.rs rename programs/mango-v4/tests/{ => cases}/test_alt.rs (89%) rename programs/mango-v4/tests/{ => cases}/test_bankrupt_tokens.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_basic.rs (97%) rename programs/mango-v4/tests/{ => cases}/test_benchmark.rs (62%) rename programs/mango-v4/tests/{ => cases}/test_borrow_limits.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_delegate.rs (93%) rename programs/mango-v4/tests/{ => cases}/test_health_compute.rs (97%) rename programs/mango-v4/tests/{ => cases}/test_health_region.rs (95%) rename programs/mango-v4/tests/{ => cases}/test_ix_gate_set.rs (93%) rename programs/mango-v4/tests/{ => cases}/test_liq_perps.rs (99%) rename programs/mango-v4/tests/{ => cases}/test_liq_tokens.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_margin_trade.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_perp.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_perp_settle.rs (99%) rename programs/mango-v4/tests/{ => cases}/test_perp_settle_fees.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_position_lifetime.rs (97%) rename programs/mango-v4/tests/{ => cases}/test_reduce_only.rs (98%) rename programs/mango-v4/tests/{ => cases}/test_serum.rs (97%) rename programs/mango-v4/tests/{ => cases}/test_token_update_index_and_rate.rs (91%) create mode 100644 programs/mango-v4/tests/test_all.rs diff --git a/programs/mango-v4/tests/cases/mod.rs b/programs/mango-v4/tests/cases/mod.rs new file mode 100644 index 000000000..1c69f8b2a --- /dev/null +++ b/programs/mango-v4/tests/cases/mod.rs @@ -0,0 +1,33 @@ +pub use anchor_lang::prelude::Pubkey; +pub use fixed::types::I80F48; +pub use fixed_macro::types::I80F48; +pub use solana_program_test::*; +pub use solana_sdk::transport::TransportError; + +pub use mango_setup::*; +pub use mango_v4::{error::MangoError, state::*}; +pub use program_test::*; + +pub use super::program_test; + +pub use utils::assert_equal_fixed_f64 as assert_equal; + +mod test_alt; +mod test_bankrupt_tokens; +mod test_basic; +mod test_benchmark; +mod test_borrow_limits; +mod test_delegate; +mod test_health_compute; +mod test_health_region; +mod test_ix_gate_set; +mod test_liq_perps; +mod test_liq_tokens; +mod test_margin_trade; +mod test_perp; +mod test_perp_settle; +mod test_perp_settle_fees; +mod test_position_lifetime; +mod test_reduce_only; +mod test_serum; +mod test_token_update_index_and_rate; diff --git a/programs/mango-v4/tests/test_alt.rs b/programs/mango-v4/tests/cases/test_alt.rs similarity index 89% rename from programs/mango-v4/tests/test_alt.rs rename to programs/mango-v4/tests/cases/test_alt.rs index faa4247c8..9ed302351 100644 --- a/programs/mango-v4/tests/test_alt.rs +++ b/programs/mango-v4/tests/cases/test_alt.rs @@ -1,14 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use solana_program_test::*; -use solana_sdk::pubkey::Pubkey; -use solana_sdk::transport::TransportError; - -use mango_setup::*; -use mango_v4::state::*; -use program_test::*; - -mod program_test; +use super::*; #[tokio::test] async fn test_alt() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_bankrupt_tokens.rs b/programs/mango-v4/tests/cases/test_bankrupt_tokens.rs similarity index 98% rename from programs/mango-v4/tests/test_bankrupt_tokens.rs rename to programs/mango-v4/tests/cases/test_bankrupt_tokens.rs index 26db180f7..b5e0ff2d0 100644 --- a/programs/mango-v4/tests/test_bankrupt_tokens.rs +++ b/programs/mango-v4/tests/cases/test_bankrupt_tokens.rs @@ -1,15 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use fixed::types::I80F48; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_v4::state::*; -use program_test::*; - -use mango_setup::*; - -mod program_test; +use super::*; #[tokio::test] async fn test_bankrupt_tokens_socialize_loss() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_basic.rs b/programs/mango-v4/tests/cases/test_basic.rs similarity index 97% rename from programs/mango-v4/tests/test_basic.rs rename to programs/mango-v4/tests/cases/test_basic.rs index 0fbfffb93..94d42d051 100644 --- a/programs/mango-v4/tests/test_basic.rs +++ b/programs/mango-v4/tests/cases/test_basic.rs @@ -1,13 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use fixed::types::I80F48; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_v4::state::*; -use program_test::*; - -mod program_test; +use super::*; // This is an unspecific happy-case test that just runs a few instructions to check // that they work in principle. It should be split up / renamed. diff --git a/programs/mango-v4/tests/test_benchmark.rs b/programs/mango-v4/tests/cases/test_benchmark.rs similarity index 62% rename from programs/mango-v4/tests/test_benchmark.rs rename to programs/mango-v4/tests/cases/test_benchmark.rs index af7ae39ed..1c5614614 100644 --- a/programs/mango-v4/tests/test_benchmark.rs +++ b/programs/mango-v4/tests/cases/test_benchmark.rs @@ -1,10 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use program_test::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -mod program_test; +use super::*; #[tokio::test] async fn test_benchmark() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_borrow_limits.rs b/programs/mango-v4/tests/cases/test_borrow_limits.rs similarity index 98% rename from programs/mango-v4/tests/test_borrow_limits.rs rename to programs/mango-v4/tests/cases/test_borrow_limits.rs index d9b11739b..45086863d 100644 --- a/programs/mango-v4/tests/test_borrow_limits.rs +++ b/programs/mango-v4/tests/cases/test_borrow_limits.rs @@ -1,11 +1,4 @@ -#![cfg(all(feature = "test-bpf"))] - -use mango_setup::*; -use program_test::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -mod program_test; +use super::*; #[tokio::test] async fn test_bank_utilization_based_borrow_limit() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_delegate.rs b/programs/mango-v4/tests/cases/test_delegate.rs similarity index 93% rename from programs/mango-v4/tests/test_delegate.rs rename to programs/mango-v4/tests/cases/test_delegate.rs index 7ea5056ad..4d8ef16f0 100644 --- a/programs/mango-v4/tests/test_delegate.rs +++ b/programs/mango-v4/tests/cases/test_delegate.rs @@ -1,14 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_v4::state::*; -use program_test::*; - -use mango_setup::*; - -mod program_test; +use super::*; #[tokio::test] async fn test_delegate() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_health_compute.rs b/programs/mango-v4/tests/cases/test_health_compute.rs similarity index 97% rename from programs/mango-v4/tests/test_health_compute.rs rename to programs/mango-v4/tests/cases/test_health_compute.rs index 0e72ac2ed..d6b4ffb2f 100644 --- a/programs/mango-v4/tests/test_health_compute.rs +++ b/programs/mango-v4/tests/cases/test_health_compute.rs @@ -1,15 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use fixed::types::I80F48; -use mango_v4::state::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use program_test::*; - -use mango_setup::*; - -mod program_test; +use super::*; // Try to reach compute limits in health checks by having many different tokens in an account #[tokio::test] diff --git a/programs/mango-v4/tests/test_health_region.rs b/programs/mango-v4/tests/cases/test_health_region.rs similarity index 95% rename from programs/mango-v4/tests/test_health_region.rs rename to programs/mango-v4/tests/cases/test_health_region.rs index f45408ae6..b10c3e133 100644 --- a/programs/mango-v4/tests/test_health_region.rs +++ b/programs/mango-v4/tests/cases/test_health_region.rs @@ -1,15 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_v4::state::MangoAccount; - -use program_test::*; - -use mango_setup::*; - -mod program_test; +use super::*; #[tokio::test] async fn test_health_wrap() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_ix_gate_set.rs b/programs/mango-v4/tests/cases/test_ix_gate_set.rs similarity index 93% rename from programs/mango-v4/tests/test_ix_gate_set.rs rename to programs/mango-v4/tests/cases/test_ix_gate_set.rs index c99bb6697..0319a0370 100644 --- a/programs/mango-v4/tests/test_ix_gate_set.rs +++ b/programs/mango-v4/tests/cases/test_ix_gate_set.rs @@ -1,13 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_v4::state::*; -use program_test::*; - -use mango_setup::*; -mod program_test; +use super::*; #[tokio::test] async fn test_ix_gate_set() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_liq_perps.rs b/programs/mango-v4/tests/cases/test_liq_perps.rs similarity index 99% rename from programs/mango-v4/tests/test_liq_perps.rs rename to programs/mango-v4/tests/cases/test_liq_perps.rs index a4443d219..cf5c8454e 100644 --- a/programs/mango-v4/tests/test_liq_perps.rs +++ b/programs/mango-v4/tests/cases/test_liq_perps.rs @@ -1,18 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use anchor_lang::prelude::Pubkey; -use fixed::types::I80F48; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_v4::state::{PerpMarketIndex, *}; -use program_test::*; - -use mango_setup::*; - -mod program_test; - -use utils::assert_equal_fixed_f64 as assert_equal; +use super::*; #[tokio::test] async fn test_liq_perps_force_cancel() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_liq_tokens.rs b/programs/mango-v4/tests/cases/test_liq_tokens.rs similarity index 98% rename from programs/mango-v4/tests/test_liq_tokens.rs rename to programs/mango-v4/tests/cases/test_liq_tokens.rs index f7309e590..82cbcfc09 100644 --- a/programs/mango-v4/tests/test_liq_tokens.rs +++ b/programs/mango-v4/tests/cases/test_liq_tokens.rs @@ -1,15 +1,6 @@ -#![cfg(feature = "test-bpf")] - -use fixed::types::I80F48; -use solana_program_test::*; -use solana_sdk::transport::TransportError; +use super::*; use mango_v4::instructions::{Serum3OrderType, Serum3SelfTradeBehavior, Serum3Side}; -use program_test::*; - -use mango_setup::*; - -mod program_test; #[tokio::test] async fn test_liq_tokens_force_cancel() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_margin_trade.rs b/programs/mango-v4/tests/cases/test_margin_trade.rs similarity index 98% rename from programs/mango-v4/tests/test_margin_trade.rs rename to programs/mango-v4/tests/cases/test_margin_trade.rs index d51a123f2..284b719c9 100644 --- a/programs/mango-v4/tests/test_margin_trade.rs +++ b/programs/mango-v4/tests/cases/test_margin_trade.rs @@ -1,11 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use program_test::*; -use solana_program_test::*; - -use mango_setup::*; - -mod program_test; +use super::*; // This is an unspecific happy-case test that just runs a few instructions to check // that they work in principle. It should be split up / renamed. diff --git a/programs/mango-v4/tests/test_perp.rs b/programs/mango-v4/tests/cases/test_perp.rs similarity index 98% rename from programs/mango-v4/tests/test_perp.rs rename to programs/mango-v4/tests/cases/test_perp.rs index 9239addc5..fe819cd0d 100644 --- a/programs/mango-v4/tests/test_perp.rs +++ b/programs/mango-v4/tests/cases/test_perp.rs @@ -1,17 +1,4 @@ -#![cfg(all(feature = "test-bpf"))] - -use anchor_lang::prelude::Pubkey; -use fixed::types::I80F48; -use fixed_macro::types::I80F48; -use mango_v4::state::*; -use program_test::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_setup::*; -use utils::assert_equal_fixed_f64 as assert_equal; - -mod program_test; +use super::*; #[tokio::test] async fn test_perp_fixed() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_perp_settle.rs b/programs/mango-v4/tests/cases/test_perp_settle.rs similarity index 99% rename from programs/mango-v4/tests/test_perp_settle.rs rename to programs/mango-v4/tests/cases/test_perp_settle.rs index 95c59532a..85d91e0d6 100644 --- a/programs/mango-v4/tests/test_perp_settle.rs +++ b/programs/mango-v4/tests/cases/test_perp_settle.rs @@ -1,13 +1,4 @@ -#![cfg(all(feature = "test-bpf"))] - -use fixed::types::I80F48; -use mango_setup::*; -use mango_v4::{error::MangoError, state::*}; -use program_test::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -mod program_test; +use super::*; #[tokio::test] async fn test_perp_settle_pnl() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_perp_settle_fees.rs b/programs/mango-v4/tests/cases/test_perp_settle_fees.rs similarity index 98% rename from programs/mango-v4/tests/test_perp_settle_fees.rs rename to programs/mango-v4/tests/cases/test_perp_settle_fees.rs index 291efbb7b..b99c363fa 100644 --- a/programs/mango-v4/tests/test_perp_settle_fees.rs +++ b/programs/mango-v4/tests/cases/test_perp_settle_fees.rs @@ -1,13 +1,4 @@ -#![cfg(all(feature = "test-bpf"))] - -use fixed::types::I80F48; -use mango_setup::*; -use mango_v4::{error::MangoError, state::*}; -use program_test::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -mod program_test; +use super::*; #[tokio::test] async fn test_perp_settle_fees() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_position_lifetime.rs b/programs/mango-v4/tests/cases/test_position_lifetime.rs similarity index 97% rename from programs/mango-v4/tests/test_position_lifetime.rs rename to programs/mango-v4/tests/cases/test_position_lifetime.rs index 2d8cd5b06..de4e0c27e 100644 --- a/programs/mango-v4/tests/test_position_lifetime.rs +++ b/programs/mango-v4/tests/cases/test_position_lifetime.rs @@ -1,17 +1,8 @@ -#![cfg(feature = "test-bpf")] - -use anchor_lang::prelude::*; -use solana_program_test::*; - -use program_test::*; - -use mango_setup::*; - -mod program_test; +use super::*; // Check opening and closing positions #[tokio::test] -async fn test_position_lifetime() -> Result<()> { +async fn test_position_lifetime() -> Result<(), TransportError> { let context = TestContext::new().await; let solana = &context.solana.clone(); diff --git a/programs/mango-v4/tests/test_reduce_only.rs b/programs/mango-v4/tests/cases/test_reduce_only.rs similarity index 98% rename from programs/mango-v4/tests/test_reduce_only.rs rename to programs/mango-v4/tests/cases/test_reduce_only.rs index 175dcad2f..a16055668 100644 --- a/programs/mango-v4/tests/test_reduce_only.rs +++ b/programs/mango-v4/tests/cases/test_reduce_only.rs @@ -1,13 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use fixed::types::I80F48; -use mango_setup::*; -use mango_v4::state::{Bank, MangoAccount, PerpMarket, Side}; -use program_test::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -mod program_test; +use super::*; #[tokio::test] async fn test_reduce_only_token() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/test_serum.rs b/programs/mango-v4/tests/cases/test_serum.rs similarity index 97% rename from programs/mango-v4/tests/test_serum.rs rename to programs/mango-v4/tests/cases/test_serum.rs index 4bdc8bb30..8e1579220 100644 --- a/programs/mango-v4/tests/test_serum.rs +++ b/programs/mango-v4/tests/cases/test_serum.rs @@ -1,18 +1,6 @@ -#![cfg(feature = "test-bpf")] -#![allow(dead_code)] +use super::*; -use solana_program_test::*; -use solana_sdk::{pubkey::Pubkey, transport::TransportError}; - -use mango_v4::instructions::{ - OpenOrdersSlim, Serum3OrderType, Serum3SelfTradeBehavior, Serum3Side, -}; -use mango_v4::state::Serum3Orders; -use program_test::*; - -mod program_test; - -use mango_setup::*; +use mango_v4::instructions::{Serum3OrderType, Serum3SelfTradeBehavior, Serum3Side}; use std::sync::Arc; struct SerumOrderPlacer { @@ -139,10 +127,6 @@ impl SerumOrderPlacer { .unwrap(); orders.clone() } - - async fn open_orders(&self) -> OpenOrdersSlim { - OpenOrdersSlim::from_oo(&self.serum.load_open_orders(self.open_orders).await) - } } #[tokio::test] diff --git a/programs/mango-v4/tests/test_token_update_index_and_rate.rs b/programs/mango-v4/tests/cases/test_token_update_index_and_rate.rs similarity index 91% rename from programs/mango-v4/tests/test_token_update_index_and_rate.rs rename to programs/mango-v4/tests/cases/test_token_update_index_and_rate.rs index 15bb248eb..a9b67687d 100644 --- a/programs/mango-v4/tests/test_token_update_index_and_rate.rs +++ b/programs/mango-v4/tests/cases/test_token_update_index_and_rate.rs @@ -1,14 +1,4 @@ -#![cfg(feature = "test-bpf")] - -use mango_v4::state::*; -use solana_program_test::*; -use solana_sdk::transport::TransportError; - -use mango_setup::*; -use program_test::*; -use utils::assert_equal_fixed_f64 as assert_equal; - -mod program_test; +use super::*; #[tokio::test] async fn test_token_update_index_and_rate() -> Result<(), TransportError> { diff --git a/programs/mango-v4/tests/program_test/cookies.rs b/programs/mango-v4/tests/program_test/cookies.rs index 76f63c150..c97775832 100644 --- a/programs/mango-v4/tests/program_test/cookies.rs +++ b/programs/mango-v4/tests/program_test/cookies.rs @@ -1,6 +1,6 @@ use solana_program::pubkey::*; -use crate::utils::*; +use super::utils::*; #[derive(Debug, Clone, Copy)] pub struct MintCookie { diff --git a/programs/mango-v4/tests/program_test/mango_client.rs b/programs/mango-v4/tests/program_test/mango_client.rs index 0f162392a..50d41ae40 100644 --- a/programs/mango-v4/tests/program_test/mango_client.rs +++ b/programs/mango-v4/tests/program_test/mango_client.rs @@ -2595,7 +2595,7 @@ pub struct PerpCreateMarketInstruction { impl PerpCreateMarketInstruction { pub async fn with_new_book_and_queue( solana: &SolanaCookie, - base: &crate::mango_setup::Token, + base: &super::mango_setup::Token, ) -> Self { PerpCreateMarketInstruction { bids: solana diff --git a/programs/mango-v4/tests/program_test/serum.rs b/programs/mango-v4/tests/program_test/serum.rs index a952914ce..ac487eb99 100644 --- a/programs/mango-v4/tests/program_test/serum.rs +++ b/programs/mango-v4/tests/program_test/serum.rs @@ -6,7 +6,7 @@ use bytemuck::from_bytes; use solana_sdk::pubkey::Pubkey; use solana_sdk::{instruction::Instruction, signature::Signer}; -use crate::*; +use super::*; pub struct ListingKeys { market_key: TestKeypair, diff --git a/programs/mango-v4/tests/program_test/solana.rs b/programs/mango-v4/tests/program_test/solana.rs index 2f0fe25c2..8f9a6db58 100644 --- a/programs/mango-v4/tests/program_test/solana.rs +++ b/programs/mango-v4/tests/program_test/solana.rs @@ -3,7 +3,7 @@ use std::cell::RefCell; use std::sync::{Arc, RwLock}; -use crate::utils::TestKeypair; +use super::utils::TestKeypair; use anchor_lang::AccountDeserialize; use anchor_spl::token::TokenAccount; use solana_program::{program_pack::Pack, rent::*, system_instruction}; diff --git a/programs/mango-v4/tests/test_all.rs b/programs/mango-v4/tests/test_all.rs new file mode 100644 index 000000000..1e9bdcecf --- /dev/null +++ b/programs/mango-v4/tests/test_all.rs @@ -0,0 +1,4 @@ +#![cfg(feature = "test-bpf")] + +mod cases; +pub mod program_test;