Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add a testcase to support release workflow #657

Merged
merged 1 commit into from
Jan 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/integration-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,9 @@ jobs:
# TODO: until we have more comprehensive cli parsers, we will need to run tests separately.
cargo test sdk_tests -- --nocapture
working-directory: rust/integration-tests

# Run all Tests
- name: Run Sanity Tests
run: |
cargo test regression_tests -- --nocapture
working-directory: rust/integration-tests
Empty file.
3 changes: 1 addition & 2 deletions rust/integration-tests/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ use testcontainers::{

mod diff_test_helper;
mod models;
mod scenarios_tests;
#[cfg(test)]
mod sanity_test;
mod sdk_tests;

use std::time::Duration;
Expand Down
157 changes: 157 additions & 0 deletions rust/integration-tests/src/sanity_test/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
mod sanity_tests;

use crate::sdk_tests::run_processor_test;
use aptos_indexer_testing_framework::sdk_test_context::SdkTestContext;
use diesel::PgConnection;
use sdk_processor::processors::{
account_transactions_processor::AccountTransactionsProcessor, ans_processor::AnsProcessor,
default_processor::DefaultProcessor, events_processor::EventsProcessor,
fungible_asset_processor::FungibleAssetProcessor, objects_processor::ObjectsProcessor,
stake_processor::StakeProcessor, token_v2_processor::TokenV2Processor,
user_transaction_processor::UserTransactionProcessor,
};
use serde_json::Value;
use std::collections::HashMap;

/// Wrapper for the different processors to run the tests
#[allow(dead_code)]
pub enum ProcessorWrapper {
EventsProcessor(EventsProcessor),
FungibleAssetProcessor(FungibleAssetProcessor),
AnsProcessor(AnsProcessor),
DefaultProcessor(DefaultProcessor),
ObjectsProcessor(ObjectsProcessor),
StakeProcessor(StakeProcessor),
UserTransactionProcessor(UserTransactionProcessor),
TokenV2Processor(TokenV2Processor),
AccountTransactionsProcessor(AccountTransactionsProcessor),
}

#[allow(dead_code)]
impl ProcessorWrapper {
async fn run<F>(
self,
test_context: &mut SdkTestContext,
db_values_fn: F,
db_url: String,
diff_flag: bool,
output_path: String,
) -> anyhow::Result<HashMap<String, Value>>
where
F: Fn(&mut PgConnection, Vec<i64>) -> anyhow::Result<HashMap<String, Value>>
+ Send
+ Sync
+ 'static,
{
match self {
ProcessorWrapper::EventsProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::FungibleAssetProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::AnsProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::DefaultProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::ObjectsProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::StakeProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::UserTransactionProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::TokenV2Processor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
ProcessorWrapper::AccountTransactionsProcessor(processor) => {
run_processor_test(
test_context,
processor,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
None,
)
.await
},
}
}
}
218 changes: 218 additions & 0 deletions rust/integration-tests/src/sanity_test/sanity_tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
#[allow(clippy::needless_return)]
#[cfg(test)]
mod tests {
use crate::{
diff_test_helper::{
account_transaction_processor::load_data as load_acc_txn_data,
ans_processor::load_data as load_ans_data,
default_processor::load_data as load_default_data,
event_processor::load_data as load_event_data,
fungible_asset_processor::load_data as load_fungible_asset_data,
objects_processor::load_data as load_object_data,
stake_processor::load_data as load_stake_data,
token_v2_processor::load_data as load_token_v2_data,
user_transaction_processor::load_data as load_ut_data,
},
sanity_test::ProcessorWrapper,
sdk_tests::{
account_transaction_processor_tests::setup_acc_txn_processor_config,
ans_processor_tests::setup_ans_processor_config,
default_processor_tests::setup_default_processor_config,
events_processor_tests::setup_events_processor_config,
fungible_asset_processor_tests::setup_fa_processor_config,
objects_processor_tests::setup_objects_processor_config, setup_test_environment,
stake_processor_tests::setup_stake_processor_config,
token_v2_processor_tests::setup_token_v2_processor_config,
user_transaction_processor_tests::setup_user_txn_processor_config,
},
};
use aptos_indexer_test_transactions::{
ALL_IMPORTED_MAINNET_TXNS, ALL_IMPORTED_TESTNET_TXNS, ALL_SCRIPTED_TRANSACTIONS,
};
use aptos_indexer_testing_framework::{
cli_parser::get_test_config, database::TestDatabase, sdk_test_context::SdkTestContext,
};
use diesel::pg::PgConnection;
use sdk_processor::processors::{
account_transactions_processor::AccountTransactionsProcessor, ans_processor::AnsProcessor,
default_processor::DefaultProcessor, events_processor::EventsProcessor,
fungible_asset_processor::FungibleAssetProcessor, objects_processor::ObjectsProcessor,
stake_processor::StakeProcessor, token_v2_processor::TokenV2Processor,
user_transaction_processor::UserTransactionProcessor,
};
use serde_json::Value;
use std::collections::HashMap;

const DEFAULT_OUTPUT_FOLDER: &str = "expected_db_output_files";

#[tokio::test]
async fn test_all_testnet_txns_for_all_processors() {
let (diff_flag, custom_output_path) = get_test_config();
let output_path = custom_output_path
.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string() + "/imported_testnet_txns");

let (db, test_context) = setup_test_environment(ALL_IMPORTED_TESTNET_TXNS).await;
let db_url = db.get_db_url();

run_processors_with_test_context(test_context, db_url, diff_flag, output_path).await;
}

#[tokio::test]
async fn test_all_mainnet_txns_for_all_processors() {
let (diff_flag, custom_output_path) = get_test_config();
let output_path = custom_output_path
.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string() + "/imported_testnet_txns");

let (db, test_context) = setup_test_environment(ALL_IMPORTED_MAINNET_TXNS).await;
let db_url = db.get_db_url();

run_processors_with_test_context(test_context, db_url, diff_flag, output_path).await;
}

#[tokio::test]
async fn test_all_scripted_txns_for_all_processors() {
let (diff_flag, custom_output_path) = get_test_config();
let output_path = custom_output_path
.unwrap_or_else(|| DEFAULT_OUTPUT_FOLDER.to_string() + "/imported_testnet_txns");

let (db, test_context) = setup_test_environment(ALL_SCRIPTED_TRANSACTIONS).await;
let db_url = db.get_db_url();

run_processors_with_test_context(test_context, db_url, diff_flag, output_path).await;
}

async fn run_processors_with_test_context(
mut test_context: SdkTestContext,
db_url: String,
diff_flag: bool,
output_path: String,
) {
let processors_map: HashMap<String, ProcessorWrapper> = [
(
"events_processor".to_string(),
ProcessorWrapper::EventsProcessor(
EventsProcessor::new(setup_events_processor_config(&test_context, &db_url).0)
.await
.expect("Failed to create EventsProcessor"),
),
),
(
"fungible_asset_processor".to_string(),
ProcessorWrapper::FungibleAssetProcessor(
FungibleAssetProcessor::new(
setup_fa_processor_config(&test_context, &db_url).0,
)
.await
.expect("Failed to create FungibleAssetProcessor"),
),
),
(
"ans_processor".to_string(),
ProcessorWrapper::AnsProcessor(
AnsProcessor::new(setup_ans_processor_config(&test_context, &db_url).0)
.await
.expect("Failed to create AnsProcessor"),
),
),
(
"default_processor".to_string(),
ProcessorWrapper::DefaultProcessor(
DefaultProcessor::new(setup_default_processor_config(&test_context, &db_url).0)
.await
.expect("Failed to create DefaultProcessor"),
),
),
(
"objects_processor".to_string(),
ProcessorWrapper::ObjectsProcessor(
ObjectsProcessor::new(setup_objects_processor_config(&test_context, &db_url).0)
.await
.expect("Failed to create ObjectsProcessor"),
),
),
(
"stake_processor".to_string(),
ProcessorWrapper::StakeProcessor(
StakeProcessor::new(setup_stake_processor_config(&test_context, &db_url).0)
.await
.expect("Failed to create StakeProcessor"),
),
),
(
"user_transactions_processor".to_string(),
ProcessorWrapper::UserTransactionProcessor(
UserTransactionProcessor::new(
setup_user_txn_processor_config(&test_context, &db_url).0,
)
.await
.expect("Failed to create UserTransactionProcessor"),
),
),
(
"token_v2_processor".to_string(),
ProcessorWrapper::TokenV2Processor(
TokenV2Processor::new(
setup_token_v2_processor_config(&test_context, &db_url).0,
)
.await
.expect("Failed to create TokenV2Processor"),
),
),
(
"account_transactions_processor".to_string(),
ProcessorWrapper::AccountTransactionsProcessor(
AccountTransactionsProcessor::new(
setup_acc_txn_processor_config(&test_context, &db_url).0,
)
.await
.expect("Failed to create AccountTransactionProcessor"),
),
),
]
.into_iter()
.collect();

// Loop through all processors and run tests
for (processor_name, processor) in processors_map {
let db_values_fn = get_db_values_fn_for_processor(&processor_name);

match processor
.run(
&mut test_context,
db_values_fn,
db_url.clone(),
diff_flag,
output_path.clone(),
)
.await
{
Ok(_) => {
println!("Processor ran successfully for {}", processor_name);
},
Err(e) => {
panic!(
"Error running processor test for {} with error: {}",
processor_name, e
);
},
}
}
}

fn get_db_values_fn_for_processor(
processor_name: &str,
) -> fn(&mut PgConnection, Vec<i64>) -> anyhow::Result<HashMap<String, Value>> {
match processor_name {
"events_processor" => load_event_data,
"fungible_asset_processor" => load_fungible_asset_data,
"ans_processor" => load_ans_data,
"default_processor" => load_default_data,
"objects_processor" => load_object_data,
"stake_processor" => load_stake_data,
"user_transactions_processor" => load_ut_data,
"token_v2_processor" => load_token_v2_data,
"account_transactions_processor" => load_acc_txn_data,
_ => panic!("Unknown processor: {}", processor_name),
}
}
}
Loading
Loading