Merge pull request #5986 from dolthub/steph/dolt-5622

create rust mysql client integration test
This commit is contained in:
stephanie
2023-05-23 16:20:39 -07:00
committed by GitHub
6 changed files with 73 additions and 1 deletions

View File

@@ -13,7 +13,7 @@ concurrency:
jobs:
mysql_client_integrations_job:
runs-on: ubuntu-22.04
timeout-minutes: 30
timeout-minutes: 45
name: Run tests
steps:
- name: Checkout

View File

@@ -117,6 +117,10 @@ RUN gem install bundler -v 2.1.4 && bundle install
RUN Rscript -e 'install.packages(c("DBI", "RMySQL", "RMariaDB"), \
repos = c(RSPM="https://packagemanager.rstudio.com/cran/__linux__/focal/latest"))'
# install rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y
ENV PATH="/root/.cargo/bin:${PATH}"
# install postgres and psql
RUN service postgresql start
@@ -136,5 +140,9 @@ RUN go build -o /usr/local/bin/dolt ./cmd/dolt
COPY mysql-client-tests /mysql-client-tests
COPY mysql-client-tests/mysql-client-tests-entrypoint.sh /mysql-client-tests/entrypoint.sh
# install rust dependencies
WORKDIR /mysql-client-tests/rust
RUN cargo build --config net.git-fetch-with-cli=true
WORKDIR /mysql-client-tests
ENTRYPOINT ["/mysql-client-tests/entrypoint.sh"]

View File

@@ -162,4 +162,8 @@ EOF" -m "postgres"
Rscript $BATS_TEST_DIRNAME/r/rmariadb-test.r $USER $PORT $REPO_NAME
}
@test "rust mysql.connector client" {
cd $BATS_TEST_DIRNAME/rust
cargo run --bin mysql_connector_test $USER $PORT $REPO_NAME
}

View File

@@ -0,0 +1,12 @@
[package]
name = "mysql_connector_test"
version = "0.0.1"
edition = "2018"
[dependencies]
mysql = "*"
[[bin]]
name = "mysql_connector_test"
path = "src/mysql_connector_test.rs"

View File

@@ -0,0 +1,2 @@
[toolchain]
channel = "stable"

View File

@@ -0,0 +1,46 @@
use mysql::Row;
use mysql::prelude::*;
use std::env;
use std::process::exit;
fn main() {
let args: Vec<String> = env::args().collect();
let user = &args[1];
let port = &args[2];
let db = &args[3];
let url = format!("mysql://{}@127.0.0.1:{}/{}", user, port, db);
let connection_opts = mysql::Opts::from_url(&url).unwrap();
let pool = mysql::Pool::new(connection_opts).unwrap();
let mut conn = pool.get_conn().unwrap();
let queries: Vec<(&str, usize)> = [
("create table test (pk int, `value` int, primary key(pk))", 0),
("describe test", 2),
("insert into test (pk, `value`) values (0,0)", 0),
("select * from test", 1),
("call dolt_add('-A');", 1),
("call dolt_commit('-m', 'my commit')", 1),
("call dolt_checkout('-b', 'mybranch')", 1),
("insert into test (pk, `value`) values (1,1)", 0),
("call dolt_commit('-a', '-m', 'my commit2')", 1),
("call dolt_checkout('main')", 1),
("call dolt_merge('mybranch')", 1),
("select COUNT(*) FROM dolt_log", 1)
].to_vec();
for (query, expected) in queries.into_iter() {
let result = conn.query(query);
let response : Vec<Row> = result.expect("Error: bad response");
println!("{:?}", response);
if response.len() != expected {
println!("LENGTH: {}", response.len());
println!("QUERY: {}", query);
println!("EXPECTED: {}", expected);
println!("RESULT: {:?}", response);
exit(1)
}
}
exit(0)
}