mirror of
https://github.com/dolthub/dolt.git
synced 2026-04-22 19:43:51 -05:00
84915c99cd
The issue was that start_sql_server_with_args appends --port after --config, but the config file was resetting to defaults. Fixed by: 1. Calling definePORT to get an available port 2. Including the port in the config file under listener.port 3. Using start_sql_server_with_args_no_port which expects PORT to be set All 6 branch-activity tests now pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
164 lines
5.4 KiB
Bash
164 lines
5.4 KiB
Bash
#!/usr/bin/env bats
|
|
load $BATS_TEST_DIRNAME/helper/common.bash
|
|
load $BATS_TEST_DIRNAME/helper/query-server-common.bash
|
|
|
|
setup() {
|
|
setup_no_dolt_init
|
|
|
|
# Create first database
|
|
mkdir repo1
|
|
cd repo1
|
|
dolt init
|
|
dolt sql -q "CREATE TABLE test (id INT PRIMARY KEY, name VARCHAR(50));"
|
|
dolt sql -q "INSERT INTO test VALUES (1, 'Alice'), (2, 'Bob');"
|
|
dolt commit -Am "Initial commit"
|
|
dolt branch feature1
|
|
dolt branch feature2
|
|
dolt branch feature3
|
|
|
|
cd ../
|
|
|
|
# Create second database for multi-database testing
|
|
mkdir repo2
|
|
cd repo2
|
|
dolt init
|
|
dolt sql -q "CREATE TABLE items (id INT PRIMARY KEY, description VARCHAR(100));"
|
|
dolt sql -q "INSERT INTO items VALUES (100, 'Widget A'), (200, 'Widget B');"
|
|
dolt commit -Am "Initial commit"
|
|
dolt branch dev
|
|
dolt branch staging
|
|
|
|
cd ../
|
|
|
|
# Define port and create complete config file
|
|
# Can't use start_sql_server_with_config because it hardcodes behavior.autocommit: false
|
|
# and we can't override it without duplicate YAML keys
|
|
PORT=$( definePORT )
|
|
cat > server.yaml <<EOF
|
|
listener:
|
|
port: $PORT
|
|
|
|
behavior:
|
|
branch_activity_tracking: true
|
|
EOF
|
|
|
|
start_sql_server_with_args_no_port "--config" "server.yaml"
|
|
}
|
|
|
|
teardown() {
|
|
stop_sql_server 1
|
|
teardown_common
|
|
}
|
|
|
|
# Helper function to start an idle dolt sql connection on a specific branch, always on the repo1 database
|
|
start_idle_connection() {
|
|
local branch=$1
|
|
[ -n "$branch" ] || fail "Expected non-empty string, got empty"
|
|
|
|
# Do nothing connection. These will be killed by the server shutting down.
|
|
dolt --use-db "repo1/$branch" sql -q "SELECT SLEEP(60)" &
|
|
}
|
|
|
|
@test "branch-activity: last_read set for connections" {
|
|
cd repo1
|
|
|
|
# Start idle connections on different branches to simulate active clients. Don't include main, as it is used
|
|
# by the query of the table and should be included there.
|
|
start_idle_connection "feature1"
|
|
start_idle_connection "feature2"
|
|
|
|
# Wait a moment for connections to establish
|
|
sleep 1
|
|
|
|
# Now test that branch activity table shows the activity
|
|
run dolt sql -q "SELECT branch FROM dolt_branch_activity where last_read IS NOT NULL"
|
|
[ $status -eq 0 ]
|
|
[[ "$output" =~ "main" ]] || false
|
|
[[ "$output" =~ "feature1" ]] || false
|
|
[[ "$output" =~ "feature2" ]] || false
|
|
[[ ! "$output" =~ "feature3" ]] || false
|
|
}
|
|
|
|
|
|
@test "branch-activity: active session counts" {
|
|
cd repo1
|
|
|
|
# Start idle connections on different branches to simulate active clients
|
|
start_idle_connection "main"
|
|
start_idle_connection "feature1"
|
|
start_idle_connection "feature2"
|
|
start_idle_connection "feature2"
|
|
start_idle_connection "feature2" # 3 active sessions on this branch.
|
|
|
|
# Wait a moment for connections to establish
|
|
sleep 1
|
|
|
|
run dolt sql -r csv -q "SELECT branch,active_sessions FROM dolt_branch_activity where last_read IS NOT NULL"
|
|
[ $status -eq 0 ]
|
|
[[ "$output" =~ "main,2" ]] || false # main has 1 idle + 1 from this query
|
|
[[ "$output" =~ "feature1,1" ]] || false
|
|
[[ "$output" =~ "feature2,3" ]] || false
|
|
}
|
|
|
|
@test "branch-activity: empty commit updates last_write" {
|
|
cd repo1
|
|
|
|
# verify no last_write initially
|
|
run dolt sql -q "SELECT branch FROM dolt_branch_activity where last_write IS NOT NULL"
|
|
[[ ! "$output" =~ "main" ]] || false
|
|
|
|
dolt commit -m "empty commit" --allow-empty
|
|
|
|
run dolt sql -q "SELECT branch FROM dolt_branch_activity where last_write IS NOT NULL"
|
|
[[ "$output" =~ "main" ]] || false
|
|
}
|
|
|
|
@test "branch-activity: data-changing commit updates last_write" {
|
|
cd repo1
|
|
|
|
# verify no last_write initially
|
|
run dolt sql -q "SELECT branch FROM dolt_branch_activity where last_write IS NOT NULL"
|
|
[[ ! "$output" =~ "main" ]] || false
|
|
|
|
dolt sql -q "INSERT INTO test VALUES (3, 'Charlie');"
|
|
|
|
run dolt sql -q "SELECT branch FROM dolt_branch_activity where last_write IS NOT NULL"
|
|
[[ "$output" =~ "main" ]] || false
|
|
}
|
|
|
|
@test "branch-activity: database isolation - activity in one database doesn't affect another" {
|
|
# Start with repo1, should result in read on feature1
|
|
start_idle_connection "feature1"
|
|
# Same for repo2, should result in read on dev
|
|
dolt --use-db "repo2/dev" sql -q "SELECT SLEEP(60)" &
|
|
sleep 1
|
|
|
|
run dolt --use-db repo1 sql -q "SELECT branch FROM dolt_branch_activity WHERE last_read IS NOT NULL"
|
|
[ $status -eq 0 ]
|
|
[[ "$output" =~ "main" ]] || false
|
|
[[ "$output" =~ "feature1" ]] || false
|
|
[[ ! "$output" =~ "dev" ]] || false # dev should not appear (it's in repo2)
|
|
[[ ! "$output" =~ "staging" ]] || false # staging should not appear (it's in repo2, and has had no activity)
|
|
|
|
run dolt --use-db repo2 sql -q "SELECT branch FROM dolt_branch_activity WHERE last_read IS NOT NULL"
|
|
[ $status -eq 0 ]
|
|
[[ "$output" =~ "main" ]] || false
|
|
[[ "$output" =~ "dev" ]] || false
|
|
[[ ! "$output" =~ "staging" ]] || false # staging should have no activity
|
|
[[ ! "$output" =~ "feature1" ]] || false # feature1 should not appear (it's in repo1)
|
|
}
|
|
|
|
@test "branch-activity: error when tracking disabled" {
|
|
# Stop the server that has tracking enabled
|
|
stop_sql_server 1
|
|
|
|
# Start a new server without branch activity tracking (default config)
|
|
start_sql_server
|
|
|
|
cd repo1
|
|
# Attempt to query dolt_branch_activity should result in an error
|
|
run dolt sql -q "SELECT * FROM dolt_branch_activity"
|
|
[ $status -eq 1 ]
|
|
[[ "$output" =~ "branch activity tracking is not enabled" ]] || false
|
|
}
|