Select Git revision
Forked from
Dr.Pirmann / CI101Week56Lab
Source project has a limited visibility.
student_tests.sh 3.64 KiB
#!/usr/bin/env bats
# File: student_tests.sh
# Testing the remote shell server implementation
# helper function to start server in background
setup() {
# create a test directory and files
mkdir -p rshell_test
cd rshell_test
echo "test content" > testfile.txt
# start server in background with test port
../dsh -s -p 5555 &
SERVER_PID=$!
sleep 1
}
# helper function to cleanup after each test
teardown() {
# kill server if it's running
if [ -n "$SERVER_PID" ]; then
kill $SERVER_PID 2>/dev/null || true
wait $SERVER_PID 2>/dev/null || true
fi
# cleanup test directory
cd ..
rm -rf rshell_test
}
@test "test_server_startup" {
# check if server process is running
ps -p $SERVER_PID
[ "$?" -eq 0 ]
}
# test server file creation
@test "test_server_file_operations" {
# create a file through client command
echo "touch serverfile.txt" | ../dsh -c -p 5555
# verify file exists on server side
[ -f "serverfile.txt" ]
}
# test server directory operations
@test "test_server_directory_operations" {
# create directory through client
echo "mkdir testdir" | ../dsh -c -p 5555
# verify directory exists on server side
[ -d "testdir" ]
# change into directory and create file
{
echo "cd testdir"
echo "touch inside.txt"
} | ../dsh -c -p 5555
# verify file exists in correct location on server
[ -f "testdir/inside.txt" ]
}
# test server file content modification
@test "test_server_file_modification" {
# create and write to file through client
{
echo "echo 'server content' > server_write.txt"
echo "exit"
} | ../dsh -c -p 5555
# verify file content on server side
[ -f "server_write.txt" ]
grep -q "server content" "server_write.txt"
}
# test server pipe operations
@test "test_server_pipe_operations" {
# create test files on server side
echo "line1\nline2\nline3" > input.txt
# use pipe operation through client
echo "cat input.txt | grep line2 > output.txt" | ../dsh -c -p 5555
# verify result on server side
[ -f "output.txt" ]
grep -q "line2" "output.txt"
}
# test ls command
@test "test_server_ls" {
echo "ls > ls.txt" | ../dsh -c -p 5555
[ -f "ls.txt" ]
grep -q "testfile.txt" "ls.txt"
}
# test server stop command
@test "test_server_stop" {
# tend stop-server command
echo "stop-server" | ../dsh -c -p 5555
# wait
sleep 1
# verify server process is no longer running
! ps -p $SERVER_PID
}
# test server concurrent file access (if extra credit implemented)
# @test "test_server_concurrent_access" {
# # create a test file
# echo "initial" > /tmp/rshell_test/concurrent.txt
# # start two clients modifying the same file
# {
# echo "echo 'client1' >> concurrent.txt"
# echo "exit"
# } | ../dsh -c -p 5555 &
# {
# echo "echo 'client2' >> concurrent.txt"
# echo "exit"
# } | ../dsh -c -p 5555 &
# # wait for both to complete
# wait
# # verify both writes occurred on server side
# grep -q "client1" "/tmp/rshell_test/concurrent.txt"
# grep -q "client2" "/tmp/rshell_test/concurrent.txt"
# }
# test server working directory persistence
@test "test_server_working_directory" {
# create nested directories
mkdir -p dir1/dir2
# change directory and verify through file creation
{
echo "cd dir1/dir2"
echo "pwd > pwd.txt"
} | ../dsh -c -p 5555
# verify pwd.txt exists in correct directory on server
[ -f "dir1/dir2/pwd.txt" ]
grep -q "dir2" "dir1/dir2/pwd.txt"
}