Skip to content

Commit

Permalink
test(nodemanager): upgrade_should_retain_the_log_format_flag
Browse files Browse the repository at this point in the history
  • Loading branch information
joshuef authored and jacderida committed May 17, 2024
1 parent 76fad0a commit 8b43ee7
Showing 1 changed file with 151 additions and 0 deletions.
151 changes: 151 additions & 0 deletions sn_node_manager/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -544,6 +544,7 @@ mod tests {
use mockall::{mock, predicate::*};
use predicates::prelude::*;
use service_manager::ServiceInstallCtx;
use sn_logging::LogFormat;
use sn_service_management::{
error::{Error as ServiceControlError, Result as ServiceControlResult},
node::{NodeService, NodeServiceData},
Expand Down Expand Up @@ -2233,6 +2234,156 @@ mod tests {
Ok(())
}

#[tokio::test]
async fn upgrade_should_retain_the_log_format_flag() -> Result<()> {
let current_version = "0.1.0";
let target_version = "0.2.0";

let tmp_data_dir = assert_fs::TempDir::new()?;
let current_install_dir = tmp_data_dir.child("safenode_install");
current_install_dir.create_dir_all()?;

let current_node_bin = current_install_dir.child("safenode");
current_node_bin.write_binary(b"fake safenode binary")?;
let target_node_bin = tmp_data_dir.child("safenode");
target_node_bin.write_binary(b"fake safenode binary")?;

let mut mock_service_control = MockServiceControl::new();
let mut mock_rpc_client = MockRpcClient::new();

// before binary upgrade
mock_service_control
.expect_is_service_process_running()
.with(eq(1000))
.times(1)
.returning(|_| true);
mock_service_control
.expect_stop()
.with(eq("safenode1"), eq(false))
.times(1)
.returning(|_, _| Ok(()));

// after binary upgrade
mock_service_control
.expect_uninstall()
.with(eq("safenode1"), eq(false))
.times(1)
.returning(|_, _| Ok(()));
mock_service_control
.expect_install()
.with(
eq(ServiceInstallCtx {
args: vec![
OsString::from("--rpc"),
OsString::from("127.0.0.1:8081"),
OsString::from("--root-dir"),
OsString::from("/var/safenode-manager/services/safenode1"),
OsString::from("--log-output-dest"),
OsString::from("/var/log/safenode/safenode1"),
OsString::from("--log-format"),
OsString::from("json"),
],
contents: None,
environment: None,
label: "safenode1".parse()?,
program: current_node_bin.to_path_buf(),
username: Some("safe".to_string()),
working_directory: None,
}),
eq(false),
)
.times(1)
.returning(|_, _| Ok(()));

// after service restart
mock_service_control
.expect_start()
.with(eq("safenode1"), eq(false))
.times(1)
.returning(|_, _| Ok(()));
mock_service_control
.expect_wait()
.with(eq(3000))
.times(1)
.returning(|_| ());
mock_service_control
.expect_get_process_pid()
.with(eq(current_node_bin.to_path_buf().clone()))
.times(1)
.returning(|_| Ok(100));
mock_rpc_client.expect_node_info().times(1).returning(|| {
Ok(NodeInfo {
pid: 2000,
peer_id: PeerId::from_str("12D3KooWS2tpXGGTmg2AHFiDh57yPQnat49YHnyqoggzXZWpqkCR")?,
data_path: PathBuf::from("/var/safenode-manager/services/safenode1"),
log_path: PathBuf::from("/var/log/safenode/safenode1"),
version: target_version.to_string(),
uptime: std::time::Duration::from_secs(1), // the service was just started
})
});
mock_rpc_client
.expect_network_info()
.times(1)
.returning(|| {
Ok(NetworkInfo {
connected_peers: Vec::new(),
listeners: Vec::new(),
})
});

let mut service_data = NodeServiceData {
connected_peers: None,
data_dir_path: PathBuf::from("/var/safenode-manager/services/safenode1"),
genesis: false,
home_network: false,
listen_addr: None,
local: false,
log_dir_path: PathBuf::from("/var/log/safenode/safenode1"),
log_format: Some(LogFormat::Json),
metrics_port: None,
node_port: None,
number: 1,
peer_id: Some(PeerId::from_str(
"12D3KooWS2tpXGGTmg2AHFiDh57yPQnat49YHnyqoggzXZWpqkCR",
)?),
pid: Some(1000),
reward_balance: Some(NanoTokens::zero()),
rpc_socket_addr: SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8081),
safenode_path: current_node_bin.to_path_buf(),
service_name: "safenode1".to_string(),
status: ServiceStatus::Running,
upnp: false,
user: Some("safe".to_string()),
user_mode: false,
version: current_version.to_string(),
};
let service = NodeService::new(&mut service_data, Box::new(mock_rpc_client));
let mut service_manager = ServiceManager::new(
service,
Box::new(mock_service_control),
VerbosityLevel::Normal,
);

service_manager
.upgrade(UpgradeOptions {
bootstrap_peers: Vec::new(),
env_variables: None,
force: false,
start_service: true,
target_bin_path: target_node_bin.to_path_buf(),
target_version: Version::parse(target_version).unwrap(),
})
.await?;

assert!(service_manager.service.service_data.log_format.is_some());
assert_eq!(
service_manager.service.service_data.log_format,
Some(LogFormat::Json)
);

Ok(())
}

#[tokio::test]
async fn upgrade_should_retain_the_home_network_flag() -> Result<()> {
let current_version = "0.1.0";
Expand Down

0 comments on commit 8b43ee7

Please sign in to comment.