|
2 | 2 | # SPDX-License-Identifier: Apache-2.0 |
3 | 3 |
|
4 | 4 | #!/bin/bash |
5 | | -set +e |
| 5 | + |
| 6 | +set -euo pipefail |
6 | 7 | set -x |
7 | 8 |
|
8 | | -# Constants |
9 | 9 | WORKPATH=$(dirname "$PWD") |
10 | | -LOG_PATH="$WORKPATH/tests" |
11 | | -MAX_ATTEMPTS=30 |
12 | | -SLEEP_TIME=2 |
13 | | - |
14 | | -# Function to start NebulaGraph services |
15 | | -start_service() { |
16 | | - echo "Starting NebulaGraph services..." |
17 | | - cd $WORKPATH/comps/third_parties/nebula/deployment/docker_compose/ |
18 | | - docker compose up -d |
19 | | - |
20 | 10 |
|
21 | | - echo "Waiting for services to become healthy..." |
22 | | - for ((i=1; i<=MAX_ATTEMPTS; i++)); do |
23 | | - HEALTHY_COUNT=$(docker compose ps --filter "status=healthy" | wc -l) |
24 | | - TOTAL_COUNT=$(docker compose ps | wc -l) |
25 | | - |
26 | | - echo "Attempt $i/$MAX_ATTEMPTS: $HEALTHY_COUNT out of $TOTAL_COUNT services are healthy" |
27 | | - |
28 | | - if [ $HEALTHY_COUNT -eq $TOTAL_COUNT ]; then |
29 | | - echo "All services are healthy!" |
30 | | - break |
31 | | - fi |
| 11 | +stop_services() { |
| 12 | + echo "Stopping and cleaning up any existing Nebula services..." |
| 13 | + cd $WORKPATH |
| 14 | + cd comps/third_parties/nebula/deployment/docker_compose |
| 15 | + docker compose -f docker-compose.yaml down -v || true |
| 16 | + echo "Cleanup complete." |
| 17 | +} |
32 | 18 |
|
33 | | - sleep $SLEEP_TIME |
34 | | - echo "Still waiting... ($i/$MAX_ATTEMPTS attempts)" |
| 19 | +start_services() { |
| 20 | + echo "Starting Nebula services..." |
| 21 | + cd $WORKPATH |
| 22 | + cd comps/third_parties/nebula/deployment/docker_compose |
| 23 | + docker compose -f docker-compose.yaml up -d |
| 24 | + |
| 25 | + echo "Waiting for services to become healthy..." |
| 26 | + local services=("metad0" "metad1" "metad2" "storaged0" "storaged1" "storaged2" "graphd") |
| 27 | + |
| 28 | + for svc in "${services[@]}"; do |
| 29 | + local container_id |
| 30 | + cd $WORKPATH |
| 31 | + cd comps/third_parties/nebula/deployment/docker_compose |
| 32 | + container_id=$(docker compose -f docker-compose.yaml ps -q "$svc") |
| 33 | + echo -n "Waiting for $svc to be healthy" |
| 34 | + until [ "$(docker inspect -f '{{.State.Health.Status}}' "$container_id")" == "healthy" ]; do |
| 35 | + echo -n "." |
| 36 | + sleep 2 |
35 | 37 | done |
| 38 | + echo "Start services complete" |
| 39 | + done |
36 | 40 |
|
37 | | - if [ $i -eq $MAX_ATTEMPTS ]; then |
38 | | - echo "Services did not become healthy within timeout period" |
39 | | - echo "Current service statuses:" |
40 | | - docker compose ps |
41 | | - exit 1 |
42 | | - fi |
| 41 | + echo "All services are healthy." |
43 | 42 | } |
44 | 43 |
|
45 | | -# Function to validate database operations |
46 | | -validate_database() { |
47 | | - GRAPHD_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker compose ps -q graphd)) |
48 | | - |
49 | | - if [ -z "$GRAPHD_IP" ]; then |
50 | | - echo "Could not determine graphd IP address" |
51 | | - exit 1 |
52 | | - fi |
53 | | - |
54 | | - echo "Using graphd IP: $GRAPHD_IP" |
55 | | - |
56 | | - echo "[ test create ] creating space..." |
57 | | - query="CREATE SPACE my_space(partition_num=10, replica_factor=1, vid_type=FIXED_STRING(32)); USE my_space; CREATE TAG person(name string, age int);" |
58 | | - |
59 | | - create_response=$(docker compose exec console nebula-console -addr "$GRAPHD_IP" -port 9669 -u root -p nebula -e "$query" 2>&1) |
| 44 | +run_query() { |
| 45 | + local query="$1" |
| 46 | + local network_name="$2" |
60 | 47 |
|
61 | | - if [[ $? -eq 0 ]]; then |
62 | | - echo "[ test create ] create space succeed" |
63 | | - else |
64 | | - echo "[ test create ] create space failed" |
65 | | - exit 1 |
66 | | - fi |
67 | | - |
68 | | - sleep $SLEEP_TIME |
69 | | - |
70 | | - echo "[ test insert ] inserting data..." |
71 | | - query="USE my_space; INSERT VERTEX person(name, age) VALUES 'person1':('Alice', 30); INSERT VERTEX person(name, age) VALUES 'person2':('Bob', 25);" |
72 | | - |
73 | | - insert_response=$(docker compose exec console nebula-console -addr "$GRAPHD_IP" -port 9669 -u root -p nebula -e "$query" 2>&1) |
74 | | - |
75 | | - if [[ $? -eq 0 ]]; then |
76 | | - echo "[ test insert ] insert data succeed" |
77 | | - else |
78 | | - echo "[ test insert ] insert data failed" |
79 | | - exit 1 |
80 | | - fi |
81 | | - |
82 | | - sleep $SLEEP_TIME |
83 | | - |
84 | | - echo "[ test search ] searching data..." |
85 | | - query="USE my_space; MATCH (p:person) RETURN p;" |
86 | | - |
87 | | - search_response=$(docker compose exec console nebula-console -addr "$GRAPHD_IP" -port 9669 -u root -p nebula -e "$query" 2>&1) |
88 | | - |
89 | | - if [[ $? -eq 0 ]]; then |
90 | | - echo "[ test search ] search data succeed" |
91 | | - else |
92 | | - echo "[ test search ] search data failed" |
93 | | - exit 1 |
94 | | - fi |
| 48 | + docker run --rm --network "$network_name" docker.io/vesoft/nebula-console:v3.5 \ |
| 49 | + -addr graphd -port 9669 -u root -p nebula -e "$query" |
95 | 50 | } |
96 | 51 |
|
97 | | -# Function to stop services |
98 | | -stop_service() { |
99 | | - echo "Stopping NebulaGraph services..." |
100 | | - docker compose down --remove-orphans |
| 52 | +validate_database() { |
| 53 | + echo "Running validation queries..." |
| 54 | + |
| 55 | + # Get network name from graphd container |
| 56 | + local container_id |
| 57 | + cd $WORKPATH |
| 58 | + cd comps/third_parties/nebula/deployment/docker_compose |
| 59 | + container_id=$(docker compose -f docker-compose.yaml ps -q graphd) |
| 60 | + local network_name |
| 61 | + network_name=$(docker inspect "$container_id" \ |
| 62 | + --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}}{{end}}') |
| 63 | + |
| 64 | + if [ -z "$network_name" ]; then |
| 65 | + echo "Could not detect the Docker network from container." |
| 66 | + exit 1 |
| 67 | + fi |
| 68 | + |
| 69 | + echo "[Step 1] Creating space..." |
| 70 | + run_query "CREATE SPACE my_space(partition_num=10, replica_factor=1, vid_type=FIXED_STRING(32));" "$network_name" |
| 71 | + echo "[Step 1] Space created successfully." |
| 72 | + sleep 2 |
| 73 | + |
| 74 | + echo "[Step 2] Creating tag..." |
| 75 | + run_query "USE my_space; CREATE TAG person(name string, age int);" "$network_name" |
| 76 | + echo "[Step 2] Tag created successfully." |
| 77 | + sleep 2 |
| 78 | + |
| 79 | + echo "[Step 3] Inserting data..." |
| 80 | + run_query "USE my_space; INSERT VERTEX person(name, age) VALUES 'person1':('Alice', 30), 'person2':('Bob', 25);" "$network_name" |
| 81 | + echo "[Step 3] Data inserted successfully." |
| 82 | + sleep 2 |
| 83 | + |
| 84 | + echo "[Step 4] Querying data..." |
| 85 | + run_query "USE my_space; MATCH (p:person) RETURN p;" "$network_name" |
| 86 | + echo "[Step 4] Data queried successfully." |
| 87 | + |
| 88 | + echo "All tests successful." |
101 | 89 | } |
102 | 90 |
|
103 | | -# Main function |
104 | | -main() { |
105 | | - stop_service |
106 | | - start_service |
107 | | - validate_database |
108 | | - stop_service |
109 | | -} |
| 91 | +# Main flow |
| 92 | + |
| 93 | +stop_services |
| 94 | +start_services |
| 95 | +validate_database |
| 96 | +stop_services |
110 | 97 |
|
111 | | -# Run main function |
112 | | -main "$@" |
| 98 | +echo "Test script completed successfully." |
0 commit comments