Skip to content
This repository has been archived by the owner on Jun 6, 2024. It is now read-only.

Commit

Permalink
add rust integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
J-HowHuang committed Mar 31, 2024
1 parent 4c5b7ce commit 6323c6c
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 0 deletions.
82 changes: 82 additions & 0 deletions server/tests/integration.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
use rocket::http::Status;

mod utils;

#[test]
fn test_healthy() {
let (_, [client_1, client_2, client_3])
= utils::launch_server_node_size_3();

let response = client_1.get("/").dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.into_string(), Some("Healthy\n".into()));

let response = client_2.get("/").dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.into_string(), Some("Healthy\n".into()));

let response = client_3.get("/").dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.into_string(), Some("Healthy\n".into()));
}

#[test]
fn test_clear() {
let (_, [client_1, _, _]) = utils::launch_server_node_size_3();

let _ = client_1.get("/s3/test2.txt").dispatch();
let response = client_1.get("/stats").dispatch();
let stats = response.into_string().unwrap();
assert!(stats.contains("test2"));


let response = client_1.post("/clear").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_1.get("/stats").dispatch();
let stats = response.into_string().unwrap();
assert!(!stats.contains("test2"));

}

#[test]
fn test_get_file() {
let (_, [client_1, client_2, client_3]) = utils::launch_server_node_size_3();
let response = client_1.get("/s3/test1.txt").dispatch();
assert_eq!(response.status(), Status::SeeOther);
let response = client_1.get("/s3/test2.txt").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_2.get("/s3/test3.txt").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_2.get("/s3/test4.txt").dispatch();
assert_eq!(response.status(), Status::SeeOther);
let response = client_3.get("/s3/test5.txt").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_3.get("/s3/test6.txt").dispatch();
assert_eq!(response.status(), Status::SeeOther);


let response = client_1.post("/clear").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_2.post("/clear").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_3.post("/clear").dispatch();
assert_eq!(response.status(), Status::Ok);
}

#[test]
fn test_evict() {
let (_, [client_1, _, _]) = utils::launch_server_node_size_3();

let response = client_1.post("/clear").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_1.get("/s3/test6.txt").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_1.get("/s3/test8.txt").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_1.get("/s3/test12.txt").dispatch();
assert_eq!(response.status(), Status::Ok);
let response = client_1.get("/stats").dispatch();
let stats = response.into_string().unwrap();
assert!(!stats.contains("test6"));
assert!(stats.contains("test8"));
}
52 changes: 52 additions & 0 deletions server/tests/test_setup_redis.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#!/bin/bash
# The ports where Redis nodes are running
ports=(6379 6380 6381)

# Loop over each port and flush all databases then perform a hard reset on the cluster
for port in "${ports[@]}"
do
echo "Flushing all databases on port $port..."
redis-cli -p "$port" FLUSHALL
done

for port in "${ports[@]}"
do
echo "Performing a hard reset on the cluster node running on port $port..."
redis-cli -p "$port" CLUSTER RESET HARD
done

echo "All specified Redis nodes have been flushed and had a hard reset."

# Directory to store logs
LOG_DIR="./logs"
mkdir -p "${LOG_DIR}"

# Server root directory
SERVER_ROOT="$(cd "$(dirname "${SERVER_ROOT:-"."}")"; pwd)/$(basename "${SERVER_ROOT:-"."}")"


# Names or keywords to identify your processes
PROCESS_NAMES=("istziio_server_node" "redis-serveredis-serverr")

# Kill existing processes based on the names or keywords
for name in "${PROCESS_NAMES[@]}"; do
pkill -f $name
done

echo "Existing processes killed, if any were running."

# Start Redis instances
redis-server $SERVER_ROOT/redis.conf --port 6379 --cluster-config-file node1.conf&
redis-server $SERVER_ROOT/redis.conf --port 6380 --cluster-config-file node2.conf&
redis-server $SERVER_ROOT/redis.conf --port 6381 --cluster-config-file node3.conf&

echo "Redis servers starting..."

sleep 5

# Creating the cluster
redis-cli --cluster create localhost:6379 localhost:6380 localhost:6381 --cluster-replicas 0 --cluster-yes

docker container stop istziio_test_mock_s3 > /dev/null 2>&1
docker container rm istziio_test_mock_s3 > /dev/null 2>&1
docker run -v $SERVER_ROOT/tests/test_s3_files:/usr/share/nginx/html -p 6333:80 --name istziio_test_mock_s3 -d nginx
29 changes: 29 additions & 0 deletions server/tests/utils.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
use istziio_server_node::server::{ServerConfig, ServerNode};
use rocket::local::blocking::Client;

pub fn get_server_config_mocks3(redis_port: u16) -> ServerConfig {
ServerConfig {
redis_port,
cache_dir: format!("./cache_{}", redis_port),
use_mock_s3_endpoint: Some(String::from("http://0.0.0.0:6333")),
bucket: None,
region_name: None,
access_key: None,
secret_key: None
}
}

pub fn launch_server_node_size_3() -> ([ServerNode; 3], [Client; 3]) {
let config_1 = get_server_config_mocks3(6379);
let config_2 = get_server_config_mocks3(6380);
let config_3 = get_server_config_mocks3(6381);

let node_1 = ServerNode::new(config_1);
let node_2 = ServerNode::new(config_2);
let node_3 = ServerNode::new(config_3);

let client_1 = Client::tracked(node_1.build()).expect("valid rocket instance");
let client_2 = Client::tracked(node_2.build()).expect("valid rocket instance");
let client_3 = Client::tracked(node_3.build()).expect("valid rocket instance");
([node_1, node_2, node_3], [client_1, client_2, client_3])
}

0 comments on commit 6323c6c

Please sign in to comment.