419 lines
13 KiB
YAML
419 lines
13 KiB
YAML
parallel: true
|
|
tests:
|
|
- name: users and grants replicate
|
|
skip: "cluster replication / MySQL grants not yet supported in Doltgres"
|
|
multi_repos:
|
|
- name: server1
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server2_cluster"}}/{database}
|
|
bootstrap_role: primary
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server1_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server1
|
|
- name: server2
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server1_cluster"}}/{database}
|
|
bootstrap_role: standby
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server2_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server2
|
|
connections:
|
|
- on: server1
|
|
queries:
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 10"
|
|
- exec: 'create database repo1'
|
|
- exec: "use repo1"
|
|
- exec: 'create table vals (i int primary key)'
|
|
- exec: 'insert into vals values (0),(1),(2),(3),(4)'
|
|
- exec: 'create user aaron with password ''aaronspassword'''
|
|
- exec: 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO aaron'
|
|
- exec: 'insert into vals values (5),(6),(7),(8),(9)'
|
|
- on: server1
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: 'insert into vals values (10),(11),(12),(13),(14)'
|
|
- on: server2
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- query: 'select count(*) as count from vals'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["15"]]
|
|
- name: branch control replicates
|
|
skip: "cluster replication / MySQL grants not yet supported in Doltgres"
|
|
multi_repos:
|
|
- name: server1
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server2_cluster"}}/{database}
|
|
bootstrap_role: primary
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server1_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server1
|
|
- name: server2
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server1_cluster"}}/{database}
|
|
bootstrap_role: standby
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server2_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server2
|
|
connections:
|
|
- on: server1
|
|
queries:
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 10"
|
|
- exec: 'create database repo1'
|
|
- exec: "use repo1"
|
|
- exec: 'create table vals (i int primary key)'
|
|
- exec: 'insert into vals values (0),(1),(2),(3),(4)'
|
|
- exec: 'create user aaron with password ''aaronspassword'''
|
|
- exec: 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO aaron'
|
|
- exec: 'create user brian with password ''brianpassword'''
|
|
- exec: 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO brian'
|
|
- exec: 'delete from dolt_branch_control'
|
|
- exec: 'insert into dolt_branch_control values (''repo1'', ''main'', ''aaron'', ''%'', ''admin'')'
|
|
- on: server1
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: 'insert into vals values (5),(6),(7),(8),(9)'
|
|
- exec: 'insert into vals values (10),(11),(12),(13),(14)'
|
|
# Assert brian cannot write to `main` on server1
|
|
- on: server1
|
|
user: 'brian'
|
|
password: 'brianpassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: 'insert into vals values (15),(16),(17),(18),(19)'
|
|
error_match: 'does not have the correct permissions on branch `main`'
|
|
# Failover to `server2` so we can assert brian is restricted there as well.
|
|
- on: server1
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: "select dolt_assume_cluster_role('standby', 2)"
|
|
- on: server2
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: "select dolt_assume_cluster_role('primary', 2)"
|
|
# Assert aaron can write to main on server2 and brian cannot.
|
|
- on: server2
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- query: 'select count(*) as count from vals'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["15"]]
|
|
- exec: 'insert into vals values (20),(21),(22),(23),(24)'
|
|
- on: server2
|
|
user: 'brian'
|
|
password: 'brianpassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- query: 'select count(*) as count from vals'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["20"]]
|
|
- exec: 'insert into vals values (25),(26),(27),(28),(29)'
|
|
error_match: 'does not have the correct permissions on branch `main`'
|
|
# Now we are going to grant brian permission, and fail back over to server1,
|
|
# and ensure brian can write to the branch there.
|
|
- on: server2
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: 'insert into dolt_branch_control values (''repo1'', ''main'', ''brian'', ''%'', ''write'')'
|
|
- exec: 'insert into vals values (30)'
|
|
- on: server2
|
|
queries:
|
|
- exec: "select dolt_assume_cluster_role('standby', 3)"
|
|
- on: server1
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: "select dolt_assume_cluster_role('primary', 3)"
|
|
# Here brian should be allowed to write now.
|
|
- on: server1
|
|
user: 'brian'
|
|
password: 'brianpassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- exec: 'insert into vals values (31)'
|
|
- name: branch control block on write replication
|
|
skip: "cluster replication / MySQL grants not yet supported in Doltgres"
|
|
multi_repos:
|
|
- name: server1
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server2_cluster"}}/{database}
|
|
bootstrap_role: primary
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server1_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server1
|
|
- name: server2
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server1_cluster"}}/{database}
|
|
bootstrap_role: standby
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server2_cluster"}}
|
|
- name: nocluster.yaml
|
|
contents: |
|
|
log_level: trace
|
|
server:
|
|
args: ["--config", "nocluster.yaml"]
|
|
dynamic_port: server2
|
|
connections:
|
|
- on: server1
|
|
queries:
|
|
- exec: 'create user aaron with password ''aaronspassword'''
|
|
- exec: 'create database repo1'
|
|
- exec: 'use repo1'
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 2"
|
|
- exec: 'delete from dolt_branch_control'
|
|
- query: 'show warnings'
|
|
result:
|
|
columns: ["Level", "Code", "Message"]
|
|
rows: [["Warning", "3024", "Timed out replication of commit to 1 out of 1 replicas."]]
|
|
- exec: 'insert into dolt_branch_control values (''repo1'', ''main'', ''aaron'', ''%'', ''admin'')'
|
|
- on: server2
|
|
restart_server:
|
|
args: ["--config", "server.yaml"]
|
|
- on: server1
|
|
restart_server: {}
|
|
- on: server1
|
|
queries:
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 10"
|
|
- exec: 'use repo1'
|
|
- exec: 'delete from dolt_branch_control'
|
|
- query: 'show warnings'
|
|
result:
|
|
columns: ["Level", "Code", "Message"]
|
|
rows: []
|
|
- on: server2
|
|
queries:
|
|
- query: 'show warnings'
|
|
result:
|
|
columns: ["Level", "Code", "Message"]
|
|
rows: []
|
|
- name: users and grants block on write replication
|
|
skip: "cluster replication / MySQL grants not yet supported in Doltgres"
|
|
multi_repos:
|
|
- name: server1
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server2_cluster"}}/{database}
|
|
bootstrap_role: primary
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server1_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server1
|
|
- name: server2
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby
|
|
remote_url_template: http://localhost:{{get_port "server1_cluster"}}/{database}
|
|
bootstrap_role: standby
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server2_cluster"}}
|
|
- name: nocluster.yaml
|
|
contents: |
|
|
log_level: trace
|
|
server:
|
|
args: ["--config", "nocluster.yaml"]
|
|
dynamic_port: server2
|
|
connections:
|
|
- on: server1
|
|
queries:
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 2"
|
|
- exec: 'create user aaron with password ''aaronspassword'''
|
|
- query: 'show warnings'
|
|
result:
|
|
columns: ["Level", "Code", "Message"]
|
|
rows: [["Warning", "3024", "Timed out replication of commit to 1 out of 1 replicas."]]
|
|
- on: server2
|
|
restart_server:
|
|
args: ["--config", "server.yaml"]
|
|
- on: server1
|
|
restart_server: {}
|
|
- on: server1
|
|
queries:
|
|
# Because we run in parallel, do not be too agressive about the timeout...
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 10"
|
|
- exec: 'create user brian with password ''brianspassword'''
|
|
- query: 'show warnings'
|
|
result:
|
|
columns: ["Level", "Code", "Message"]
|
|
rows: []
|
|
- on: server2
|
|
user: 'brian'
|
|
password: 'brianspassword'
|
|
queries:
|
|
- query: "show warnings"
|
|
result:
|
|
columns: ["Level", "Code", "Message"]
|
|
rows: []
|
|
- name: users and grants and branch control replicate to multiple standbys
|
|
skip: "cluster replication / MySQL grants not yet supported in Doltgres"
|
|
multi_repos:
|
|
- name: server1
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby1
|
|
remote_url_template: http://localhost:{{get_port "server2_cluster"}}/{database}
|
|
- name: standby2
|
|
remote_url_template: http://localhost:{{get_port "server3_cluster"}}/{database}
|
|
bootstrap_role: primary
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server1_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server1
|
|
- name: server2
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby1
|
|
remote_url_template: http://localhost:{{get_port "server1_cluster"}}/{database}
|
|
- name: standby2
|
|
remote_url_template: http://localhost:{{get_port "server3_cluster"}}/{database}
|
|
bootstrap_role: standby
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server2_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server2
|
|
- name: server3
|
|
with_files:
|
|
- name: server.yaml
|
|
contents: |
|
|
log_level: trace
|
|
cluster:
|
|
standby_remotes:
|
|
- name: standby1
|
|
remote_url_template: http://localhost:{{get_port "server1_cluster"}}/{database}
|
|
- name: standby2
|
|
remote_url_template: http://localhost:{{get_port "server2_cluster"}}/{database}
|
|
bootstrap_role: standby
|
|
bootstrap_epoch: 1
|
|
remotesapi:
|
|
port: {{get_port "server3_cluster"}}
|
|
server:
|
|
args: ["--config", "server.yaml"]
|
|
dynamic_port: server3
|
|
connections:
|
|
- on: server1
|
|
queries:
|
|
- exec: "SET dolt_cluster_ack_writes_timeout_secs = 10"
|
|
- exec: 'create database repo1'
|
|
- exec: "use repo1"
|
|
- exec: 'create table vals (i int primary key)'
|
|
- exec: 'insert into vals values (0),(1),(2),(3),(4)'
|
|
- exec: 'create user aaron with password ''aaronspassword'''
|
|
- exec: 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO aaron'
|
|
- exec: 'create user brian with password ''brianpassword'''
|
|
- exec: 'GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO brian'
|
|
- exec: 'delete from dolt_branch_control'
|
|
- exec: 'insert into dolt_branch_control values (''repo1'', ''main'', ''aaron'', ''%'', ''admin'')'
|
|
- on: server2
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- query: 'select count(*) as count from vals'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["5"]]
|
|
- query: 'select count(*) as count from dolt_branch_control'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["1"]]
|
|
- on: server3
|
|
user: 'aaron'
|
|
password: 'aaronspassword'
|
|
queries:
|
|
- exec: "use repo1"
|
|
- query: 'select count(*) as count from vals'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["5"]]
|
|
- query: 'select count(*) as count from dolt_branch_control'
|
|
result:
|
|
columns: ["count"]
|
|
rows: [["1"]]
|