Skip to content

Commit 90a7a2b

Browse files
committed
fix grpcserver test.go 2
1 parent 4572aa6 commit 90a7a2b

File tree

2 files changed

+138
-2
lines changed

2 files changed

+138
-2
lines changed

controller/internal/grpcserver/test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package grpcserver_test
1+
package grpcserver
22

33
import (
44
"context"
55
"testing"
66

7-
"github.com/moevm/grpc_server/internal/grpcserver"
87
"github.com/moevm/grpc_server/internal/manager"
98
pb "github.com/moevm/grpc_server/pkg/proto/file_service"
109
"github.com/stretchr/testify/assert"
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
#!/bin/bash
2+
set -eo pipefail
3+
4+
COL_RED="\e[31;1m"
5+
COL_GREEN="\e[32;1m"
6+
COL_LBLUE="\e[96;1m"
7+
COL_RESET="\e[0m"
8+
9+
CONTROLLER_LOGFILE="controller.log"
10+
WORKER_NAMES=("worker1" "worker2")
11+
INIT_DURATION=2
12+
13+
always_log="$1"
14+
user=$(id -un)
15+
group=$(id -gn)
16+
manager_pid=
17+
fail=
18+
19+
# ensure grpcurl is installer
20+
echo -e "${COL_LBLUE}Installing grpcurl if not installed yet...${COL_RESET}"
21+
go install github.com/fullstorydev/grpcurl/cmd/[email protected]
22+
23+
main() {
24+
setup
25+
build
26+
run_grpcserver
27+
run_workers
28+
send_tasks
29+
check_results
30+
}
31+
32+
setup() {
33+
echo -e "${COL_LBLUE}Setting up socket directory...${COL_RESET}"
34+
sudo mkdir -p /run/controller/
35+
sudo chown ${user}:${group} /run/controller/
36+
}
37+
38+
build() {
39+
echo -e "${COL_LBLUE}Building worker...${COL_RESET}"
40+
docker compose build
41+
42+
echo -e "${COL_LBLUE}Building manager...${COL_RESET}"
43+
cd controller && bazel build //cmd/grpc_server:grpc_server && cd ..
44+
}
45+
46+
run_grpcserver() {
47+
echo -e "${COL_LBLUE}Running grpcserver...${COL_RESET}"
48+
cd controller
49+
bazel run //cmd/grpc_server:grpc_server &> ${CONTROLLER_LOGFILE} &
50+
manager_pid=$!
51+
52+
echo -e "${COL_LBLUE}Waiting ${INIT_DURATION} seconds for manager to initialize...${COL_RESET}"
53+
sleep ${INIT_DURATION}
54+
}
55+
56+
run_worker() {
57+
local worker=$1
58+
echo -e "${COL_LBLUE}Starting ${worker}...${COL_RESET}"
59+
docker run \
60+
--user "$(id -u):$(id -g)" \
61+
-d \
62+
--rm \
63+
-v "/run/controller:/run/controller" \
64+
-e "METRICS_GATEWAY_ADDRESS=metrics" \
65+
-e "METRICS_GATEWAY_PORT=9091" \
66+
-e "METRICS_WORKER_NAME=${worker}" \
67+
--name "${worker}" \
68+
"grpc_server-worker"
69+
}
70+
71+
run_workers() {
72+
for worker in "${WORKER_NAMES[@]}"; do
73+
run_worker "${worker}"
74+
done
75+
}
76+
77+
send_tasks() {
78+
grpcurl --plaintext -use-reflection -d '{"file_type": "text", "content": "SGVsbG8sIFdvcmxkIQ=="}' localhost:50051 FileService.UploadFile # "Hello, World!" in base64
79+
grpcurl --plaintext -use-reflection -d '{"file_type": "text", "content": "R29vZGJ5ZQ=="}' localhost:50051 FileService.UploadFile # "Goodbye" in base64
80+
grpcurl --plaintext -use-reflection -d '{"file_type": "text", "content": "U2FtcGxlIHRleHQ="}' localhost:50051 FileService.UploadFile # "Sample text" in base64
81+
}
82+
83+
check_results() {
84+
for worker in "${WORKER_NAMES[@]}"; do
85+
check_worker "${worker}"
86+
done
87+
88+
check_manager_exit_code
89+
show_failure_details
90+
}
91+
92+
check_worker() {
93+
local worker=$1
94+
if docker logs "${worker}" | grep -qE '\[error\]'; then
95+
echo -e "${COL_RED}* ${worker}: Error logs detected${COL_RESET}"
96+
fail=1
97+
else
98+
echo -e "${COL_GREEN}* ${worker}: OK${COL_RESET}"
99+
fi
100+
}
101+
102+
check_manager_exit_code() {
103+
if [[ ${manager_exit_code} -ne 0 ]]; then
104+
echo -e "${COL_RED}* Manager: Bad exit code (${manager_exit_code})${COL_RESET}"
105+
fail=1
106+
else
107+
echo -e "${COL_GREEN}* Manager: OK${COL_RESET}"
108+
fi
109+
}
110+
111+
show_failure_details() {
112+
[[ -z ${always_log} ]] && [[ -z ${fail} ]] && return
113+
114+
echo -e "\n${COL_RED}=== TEST FAILED ===${COL_RESET}"
115+
docker ps -a
116+
for worker in "${WORKER_NAMES[@]}"; do
117+
echo -e "\nLogs for ${worker}:"
118+
docker logs "${worker}"
119+
done
120+
121+
echo -e "\nLogs for manager:"
122+
cat ${CONTROLLER_LOGFILE}
123+
124+
echo -e "======================="
125+
}
126+
127+
cleanup() {
128+
echo -e "${COL_LBLUE}Cleaning up...${COL_RESET}"
129+
sudo rm -rf /run/controller
130+
docker container rm -f worker1 worker2 > /dev/null
131+
rm -f ${CONTROLLER_LOGFILE} bazel-* MODULE.bazel.lock
132+
kill ${manager_pid}
133+
}
134+
135+
trap cleanup EXIT
136+
main
137+
exit "${fail:-0}"

0 commit comments

Comments
 (0)