Skip to content

Commit

Permalink
Adding network_name as a field in event_log. It is fetched from `/sta… (
Browse files Browse the repository at this point in the history
#248)

* Adding network_name as a field in event_log. It is fetched from `/status` endpoint of the node to which sidecar connects to.

---------

Co-authored-by: Jakub Zajkowski <[email protected]>
  • Loading branch information
zajko and Jakub Zajkowski authored Feb 29, 2024
1 parent 980c976 commit 4406583
Show file tree
Hide file tree
Showing 23 changed files with 769 additions and 454 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Once you create the configuration file and are ready to run the Sidecar service,

### Node Connections

The Sidecar can connect to Casper nodes with versions greater or equal to `1.5.2`.
The Sidecar can connect to Casper nodes with versions greater or equal to `2.0.0`.

The `node_connections` option configures the node (or multiple nodes) to which the Sidecar will connect and the parameters under which it will operate with that node. Connecting to multiple nodes requires multiple `[[sse_server.connections]]` sections.

Expand Down
2 changes: 1 addition & 1 deletion USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ id:21821471
The Sidecar can connect simultaneously to nodes with different build versions, which send messages with different API versions. There is also the rare possibility of nodes changing API versions and not being in sync with other connected nodes. Although this situation would be rare, clients should be able to parse messages with different API versions.
>**Note**: The Sidecar can connect to Casper nodes with versions greater or equal to `1.5.2`.
>**Note**: The Sidecar can connect to Casper nodes with versions greater or equal to `2.0.0`.
### The Version of Sidecar Events
Expand Down
265 changes: 141 additions & 124 deletions event_sidecar/src/database/postgresql_database/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,25 @@ use crate::{
utils::tests::build_postgres_database,
};
use casper_types::testing::TestRng;
use sea_query::{Asterisk, Expr, PostgresQueryBuilder, Query};
use sea_query::{PostgresQueryBuilder, Query};
use sqlx::Row;

use super::PostgreSqlDatabase;

#[tokio::test]
async fn should_save_and_retrieve_a_u32max_id() {
let context = build_postgres_database().await.unwrap();
let db = &context.db;
let sql = tables::event_log::create_insert_stmt(1, "source", u32::MAX, "event key", "1.5.3")
.expect("Error creating event_log insert SQL")
.to_string(PostgresQueryBuilder);
let sql = tables::event_log::create_insert_stmt(
1,
"source",
u32::MAX,
"event key",
"2.0.3",
"network-1",
)
.expect("Error creating event_log insert SQL")
.to_string(PostgresQueryBuilder);
let _ = db.fetch_one(&sql).await;
let sql = Query::select()
.column(tables::event_log::EventLog::EventId)
Expand Down Expand Up @@ -191,27 +200,24 @@ async fn should_save_block_added_with_correct_event_type_id() {
let block_added = BlockAdded::random(&mut test_rng);

assert!(db
.save_block_added(block_added, 1, "127.0.0.1".to_string(), "1.1.1".to_string())
.save_block_added(
block_added,
1,
"127.0.0.1".to_string(),
"2.0.1".to_string(),
"network-1".to_string()
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.column(tables::event_log::EventLog::ApiVersion)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let row = db.fetch_one(&sql).await;
let event_type_id = row
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");
let api_version = row
.try_get::<String, usize>(1)
.expect("Error getting api_version from row");

assert_eq!(event_type_id, EventTypeId::BlockAdded as i16);
assert_eq!(api_version, "1.1.1".to_string());
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::BlockAdded as i16,
"2.0.1",
"network-1",
)
.await;
}

#[tokio::test]
Expand All @@ -228,28 +234,19 @@ async fn should_save_transaction_accepted_with_correct_event_type_id() {
transaction_accepted,
1,
"127.0.0.1".to_string(),
"1.5.5".to_string()
"2.0.5".to_string(),
"network-2".to_string()
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.column(tables::event_log::EventLog::ApiVersion)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let row = db.fetch_one(&sql).await;
let event_type_id = row
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");
let api_version = row
.try_get::<String, usize>(1)
.expect("Error getting api_version from row");

assert_eq!(event_type_id, EventTypeId::TransactionAccepted as i16);
assert_eq!(api_version, "1.5.5".to_string());
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::TransactionAccepted as i16,
"2.0.5",
"network-2",
)
.await;
}

#[tokio::test]
Expand All @@ -266,24 +263,20 @@ async fn should_save_transaction_processed_with_correct_event_type_id() {
transaction_processed,
1,
"127.0.0.1".to_string(),
"1.1.1".to_string()
"2.0.3".to_string(),
"network-3".to_string(),
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let event_type_id = db
.fetch_one(&sql)
.await
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");

assert_eq!(event_type_id, EventTypeId::TransactionProcessed as i16)
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::TransactionProcessed as i16,
"2.0.3",
"network-3",
)
.await;
}

#[tokio::test]
Expand All @@ -300,24 +293,20 @@ async fn should_save_transaction_expired_with_correct_event_type_id() {
transaction_expired,
1,
"127.0.0.1".to_string(),
"1.1.1".to_string()
"2.0.4".to_string(),
"network-4".to_string(),
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let event_type_id = db
.fetch_one(&sql)
.await
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");

assert_eq!(event_type_id, EventTypeId::TransactionExpired as i16)
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::TransactionExpired as i16,
"2.0.4",
"network-4",
)
.await;
}

#[tokio::test]
Expand All @@ -330,23 +319,24 @@ async fn should_save_fault_with_correct_event_type_id() {
let fault = Fault::random(&mut test_rng);

assert!(db
.save_fault(fault, 1, "127.0.0.1".to_string(), "1.1.1".to_string())
.save_fault(
fault,
1,
"127.0.0.1".to_string(),
"2.0.5".to_string(),
"network-5".to_string()
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let event_type_id = db
.fetch_one(&sql)
.await
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");

assert_eq!(event_type_id, EventTypeId::Fault as i16)
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::Fault as i16,
"2.0.5",
"network-5",
)
.await;
}

#[tokio::test]
Expand All @@ -363,24 +353,20 @@ async fn should_save_finality_signature_with_correct_event_type_id() {
finality_signature,
1,
"127.0.0.1".to_string(),
"1.1.1".to_string()
"2.0.5".to_string(),
"network-5".to_string(),
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let event_type_id = db
.fetch_one(&sql)
.await
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");

assert_eq!(event_type_id, EventTypeId::FinalitySignature as i16)
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::FinalitySignature as i16,
"2.0.5",
"network-5",
)
.await;
}

#[tokio::test]
Expand All @@ -393,44 +379,46 @@ async fn should_save_step_with_correct_event_type_id() {
let step = Step::random(&mut test_rng);

assert!(db
.save_step(step, 1, "127.0.0.1".to_string(), "1.1.1".to_string())
.save_step(
step,
1,
"127.0.0.1".to_string(),
"2.0.6".to_string(),
"network-6".to_string()
)
.await
.is_ok());

let sql = Query::select()
.column(tables::event_log::EventLog::EventTypeId)
.from(tables::event_log::EventLog::Table)
.limit(1)
.to_string(PostgresQueryBuilder);

let event_type_id = db
.fetch_one(&sql)
.await
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");

assert_eq!(event_type_id, EventTypeId::Step as i16)
verify_event_log_entry(
db,
"127.0.0.1",
EventTypeId::Step as i16,
"2.0.6",
"network-6",
)
.await;
}

#[tokio::test]
async fn should_save_and_retrieve_a_shutdown() {
let test_context = build_postgres_database().await.unwrap();
let db = &test_context.db;
assert!(db
.save_shutdown(15, "xyz".to_string(), "1.1.1".to_string())
.save_shutdown(
15,
"xyz".to_string(),
"2.0.7".to_string(),
"network-7".to_string()
)
.await
.is_ok());

let sql = Query::select()
.expr(Expr::col(Asterisk))
.from(tables::shutdown::Shutdown::Table)
.to_string(PostgresQueryBuilder);
let row = db.fetch_one(&sql).await;

assert_eq!(
row.get::<String, &str>("event_source_address"),
"xyz".to_string()
);
verify_event_log_entry(
db,
"xyz",
EventTypeId::Shutdown as i16,
"2.0.7",
"network-7",
)
.await;
}

#[tokio::test]
Expand All @@ -447,3 +435,32 @@ async fn get_number_of_events_should_return_1_when_event_stored() {
)
.await;
}

async fn verify_event_log_entry(
db: &PostgreSqlDatabase,
expected_event_source_address: &str,
expected_event_type_id: i16,
expected_api_version: &str,
expected_network_name: &str,
) {
let sql = crate::database::tests::fetch_event_log_data_query().to_string(PostgresQueryBuilder);

let row = db.fetch_one(&sql).await;
let event_type_id = row
.try_get::<i16, usize>(0)
.expect("Error getting event_type_id from row");
let api_version = row
.try_get::<String, usize>(1)
.expect("Error getting api_version from row");
let network_name = row
.try_get::<String, usize>(2)
.expect("Error getting network_name from row");
let event_source_address = row.get::<String, usize>(3);
assert_eq!(event_type_id, expected_event_type_id);
assert_eq!(api_version, expected_api_version.to_string());
assert_eq!(network_name, expected_network_name.to_string());
assert_eq!(
event_source_address,
expected_event_source_address.to_string()
);
}
Loading

0 comments on commit 4406583

Please sign in to comment.