Files
wehub-resource-sync 5357c39144
Fuzzer / Run Fuzzer (push) Has been cancelled
Race tests / Go race tests (ubuntu-22.04) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:01:40 +08:00

251 lines
8.5 KiB
Bash
Executable File

#!/usr/bin/env bats
bats_load_library common.bash
bats_load_library compat-common.bash
setup() {
setup_common
cp -Rpf $REPO_DIR bats_repo
cd bats_repo
}
teardown() {
teardown_common
cd ..
rm -rf bats_repo
}
@test "compatibility: dolt version" {
run dolt version
[ "$status" -eq 0 ]
regex='dolt version [0-9]+.[0-9]+.[0-9]+'
[[ "$output" =~ $regex ]] || false
}
@test "compatibility: dolt status" {
expected="On branch $DEFAULT_BRANCH"
run dolt status
[ "$status" -eq 0 ]
[[ "$output" =~ "$expected" ]] || false
[[ "$output" =~ "nothing to commit, working tree clean" ]] || false
}
@test "compatibility: dolt ls" {
run dolt ls
[ "$status" -eq 0 ]
[[ "${lines[0]}" =~ "Tables in working set:" ]] || false
}
@test "compatibility: dolt branch" {
run dolt branch
[ "$status" -eq 0 ]
}
@test "compatibility: dolt diff" {
run dolt diff
[ "$status" -eq 0 ]
}
@test "compatibility: dolt schema show on branch init" {
dolt checkout init
run dolt schema show abc
[ "$status" -eq 0 ]
output=`echo $output | tr '[:upper:]' '[:lower:]'` # lowercase the output
[[ "${output}" =~ "abc @ working" ]] || false
[[ "${output}" =~ "create table \`abc\` (" ]] || false
[[ "${output}" =~ "\`pk\` bigint not null" ]] || false
[[ "${output}" =~ "\`a\` longtext" ]] || false
[[ "${output}" =~ "\`b\` double" ]] || false
[[ "${output}" =~ "\`w\` bigint" ]] || false
[[ "${output}" =~ "\`x\` bigint" ]] || false
[[ "${output}" =~ "primary key (\`pk\`)" ]] || false
}
@test "compatibility: dolt sql 'select * from abc' on branch init" {
dolt checkout init
run dolt sql -q 'select * from abc;'
[ "$status" -eq 0 ]
[[ "${lines[1]}" =~ "| pk | a | b | w | x |" ]] || false
[[ "${lines[2]}" =~ "+----+------+-----+---+---+" ]] || false
[[ "${lines[3]}" =~ "| 0 | asdf | 1.1 | 0 | 0 |" ]] || false
[[ "${lines[4]}" =~ "| 1 | asdf | 1.1 | 0 | 0 |" ]] || false
[[ "${lines[5]}" =~ "| 2 | asdf | 1.1 | 0 | 0 |" ]] || false
}
@test "compatibility: dolt schema show on branch $DEFAULT_BRANCH" {
run dolt schema show abc
[ "$status" -eq 0 ]
output=`echo $output | tr '[:upper:]' '[:lower:]'` # lowercase the output
[[ "${output}" =~ "abc @ working" ]] || false
[[ "${output}" =~ "create table \`abc\` (" ]] || false
[[ "${output}" =~ "\`pk\` bigint not null" ]] || false
[[ "${output}" =~ "\`a\` longtext" ]] || false
[[ "${output}" =~ "\`b\` double" ]] || false
[[ "${output}" =~ "\`x\` bigint" ]] || false
[[ "${output}" =~ "\`y\` bigint" ]] || false
[[ "${output}" =~ "primary key (\`pk\`)" ]] || false
}
@test "compatibility: dolt sql 'select * from abc' on branch $DEFAULT_BRANCH" {
run dolt sql -q 'select * from abc;'
[ "$status" -eq 0 ]
[[ "${lines[1]}" =~ "| pk | a | b | x | y |" ]] || false
[[ "${lines[2]}" =~ "+----+------+-----+---+-----+" ]] || false
[[ "${lines[3]}" =~ "| 0 | asdf | 1.1 | 1 | 121 |" ]] || false
[[ "${lines[4]}" =~ "| 2 | asdf | 1.1 | 0 | 121 |" ]] || false
[[ "${lines[5]}" =~ "| 3 | data | 1.1 | 0 | 121 |" ]] || false
}
@test "compatibility: dolt schema show on branch other" {
dolt checkout other
run dolt schema show abc
[ "$status" -eq 0 ]
echo $output
output=`echo $output | tr '[:upper:]' '[:lower:]'` # lowercase the output
[[ "${output}" =~ "abc @ working" ]] || false
[[ "${output}" =~ "create table \`abc\` (" ]] || false
[[ "${output}" =~ "\`pk\` bigint not null" ]] || false
[[ "${output}" =~ "\`a\` longtext" ]] || false
[[ "${output}" =~ "\`b\` double" ]] || false
[[ "${output}" =~ "\`w\` bigint" ]] || false
[[ "${output}" =~ "\`z\` bigint" ]] || false
[[ "${output}" =~ "primary key (\`pk\`)" ]] || false
}
@test "compatibility: dolt sql 'select * from abc' on branch other" {
dolt checkout other
run dolt sql -q 'select * from abc;'
[ "$status" -eq 0 ]
[[ "${lines[1]}" =~ "| pk | a | b | w | z |" ]] || false
[[ "${lines[2]}" =~ "+----+------+-----+---+-----+" ]] || false
[[ "${lines[3]}" =~ "| 0 | asdf | 1.1 | 1 | 122 |" ]] || false
[[ "${lines[4]}" =~ "| 1 | asdf | 1.1 | 0 | 122 |" ]] || false
[[ "${lines[5]}" =~ "| 4 | data | 1.1 | 0 | 122 |" ]] || false
# This breaks because the newly-created working sets (created on repo load)
# don't match head on either branch because they add a feature version,
# which previous releases of Dolt did not have. This is only a problem in
# the case that someone clones a very, very old repository (2+ years)
# created before Dolt stored working sets in the database.
skip "Breaks working set stomp check"
dolt checkout "$DEFAULT_BRANCH"
}
@test "compatibility: dolt diff other" {
dolt diff other
run dolt diff other
# We can't quote the entire schema here because there was a change
# in collation output at some point in the past
EXPECTED_SCHEMA=$(cat <<'EOF'
`b` double,
- `w` bigint,
- `z` bigint,
+ `x` bigint,
+ `y` bigint,
PRIMARY KEY (`pk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin;
EOF
)
EXPECTED_DATA=$(cat <<'EOF'
+---+----+------+-----+------+------+------+------+
| | pk | a | b | w | z | x | y |
+---+----+------+-----+------+------+------+------+
| < | 0 | asdf | 1.1 | 1 | 122 | NULL | NULL |
| > | 0 | asdf | 1.1 | NULL | NULL | 1 | 121 |
| - | 1 | asdf | 1.1 | 0 | 122 | NULL | NULL |
| + | 2 | asdf | 1.1 | NULL | NULL | 0 | 121 |
| + | 3 | data | 1.1 | NULL | NULL | 0 | 121 |
| - | 4 | data | 1.1 | 0 | 122 | NULL | NULL |
+---+----+------+-----+------+------+------+------+
EOF
)
[ "$status" -eq 0 ]
[[ "$output" =~ "$EXPECTED_SCHEMA" ]] || false
[[ "$output" =~ "$EXPECTED_DATA" ]] || false
}
@test "compatibility: big table" {
run dolt sql -q "SELECT count(*) FROM big;" -r csv
[ "$status" -eq 0 ]
[[ "${lines[1]}" =~ "1000" ]] || false
dolt sql -q "DELETE FROM big WHERE pk IN (71, 331, 881)"
run dolt diff
[ "$status" -eq 0 ]
[[ "$output" =~ "| - | 71 |" ]] || false
[[ "$output" =~ "| - | 331 |" ]] || false
[[ "$output" =~ "| - | 881 |" ]] || false
run dolt sql -q "SELECT count(*) FROM big;" -r csv
[ "$status" -eq 0 ]
[[ "${lines[1]}" =~ "997" ]] || false
dolt sql -q "INSERT INTO big VALUES (1001, 'foo'), (1002, 'bar'), (1003, 'baz');"
run dolt sql -q "SELECT count(*) FROM big;" -r csv
[ "$status" -eq 0 ]
[[ "${lines[1]}" =~ "1000" ]] || false
dolt commit -am "inserted, deleted some rows"
}
@test "compatibility: dolt merge other into $DEFAULT_BRANCH" {
run dolt merge other
[ $status -eq 1 ]
[[ $output =~ "Merge conflict in abc" ]] || false
[[ $output =~ "Automatic merge failed" ]] || false
}
@test "compatibility: dolt table import" {
run dolt table import -c -pk=pk abc2 abc.csv
[ "$status" -eq 0 ]
[[ "$output" =~ "Import completed successfully." ]] || false
dolt sql -q 'drop table abc2'
}
@test "compatibility: dolt merge with check constraints" {
run dolt merge check_merge
[ "$status" -eq 0 ]
}
@test "compatibility: constraint violation readable and resolvable by current build" {
[[ "$DOLT_VERSION" =~ 0\.50 ]] && skip "constraint violation test not run for Dolt version 0.50"
repo="$BATS_TEST_TMPDIR/cv_test_repo_$$"
mkdir -p "$repo" && cd "$repo"
old_dolt init
old_dolt sql <<SQL
CREATE TABLE cv_test (pk INT PRIMARY KEY, u INT UNIQUE);
INSERT INTO cv_test VALUES (3, 20);
SQL
old_dolt add .
old_dolt commit -m "cv_test base"
old_dolt checkout -b cv_branch
old_dolt sql -q "INSERT INTO cv_test VALUES (2, 10);" -r csv
old_dolt add .
old_dolt commit -m "cv_branch: add row (2,10)"
old_dolt checkout main
old_dolt sql -q "INSERT INTO cv_test VALUES (1, 10);" -r csv
old_dolt add .
old_dolt commit -m "main: add row (1,10)"
run old_dolt merge --no-ff cv_branch
cd "$repo"
run dolt sql -q "SELECT from_root_ish, violation_type, pk, u, violation_info FROM dolt_constraint_violations_cv_test ORDER BY pk;" -r csv
[ "$status" -eq 0 ]
[[ "${#lines[@]}" -eq 3 ]] || false
[[ "${lines[0]}" == "from_root_ish,violation_type,pk,u,violation_info" ]] || false
[[ "${lines[1]}" =~ ,unique\ index,1,10, ]] || false
[[ "${lines[2]}" =~ ,unique\ index,2,10, ]] || false
from_root_ish="${lines[1]%%,*}"
[ -n "$from_root_ish" ] || false
[[ "${lines[2]}" == "$from_root_ish"* ]] || false
run dolt sql -q "DELETE FROM dolt_constraint_violations_cv_test;" -r csv
[ "$status" -eq 0 ]
}