mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-07 03:05:59 -05:00
/mysql-client-tests/{node/, MySQLDockerfile}: POC dockerizing test env
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
FROM ubuntu:18.04
|
||||
COPY . /mysql-client-tests
|
||||
|
||||
# install python
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt update -y
|
||||
RUN apt install -y software-properties-common
|
||||
|
||||
RUN add-apt-repository ppa:deadsnakes/ppa -y
|
||||
RUN apt install python3.8 -y
|
||||
RUN python3 -V
|
||||
|
||||
# install pip
|
||||
RUN apt-get -y install python3-pip
|
||||
|
||||
# install curl
|
||||
RUN apt-get -y install curl
|
||||
|
||||
# install mysql connector and pymsql
|
||||
RUN pip3 install mysql-connector-python
|
||||
RUN pip3 install PyMySQL
|
||||
|
||||
# install java
|
||||
# Install OpenJDK-8
|
||||
RUN apt-get update && \
|
||||
apt-get install -y openjdk-8-jdk && \
|
||||
apt-get install -y ant && \
|
||||
apt-get clean;
|
||||
|
||||
# Fix certificate issues
|
||||
RUN apt-get update && \
|
||||
apt-get install ca-certificates-java && \
|
||||
apt-get clean && \
|
||||
update-ca-certificates -f;
|
||||
|
||||
# Setup JAVA_HOME -- useful for docker commandline
|
||||
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
|
||||
RUN export JAVA_HOME
|
||||
|
||||
# install mysql connector java
|
||||
RUN curl -L -o /mysql-client-tests/java/mysql-connector-java-8.0.21.jar \
|
||||
https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.21/mysql-connector-java-8.0.21.jar
|
||||
|
||||
# install node and npm
|
||||
RUN apt update
|
||||
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash -
|
||||
RUN cat /etc/apt/sources.list.d/nodesource.list
|
||||
RUN apt -y install nodejs
|
||||
|
||||
# install bats
|
||||
RUN apt-get update
|
||||
RUN apt-get install bats
|
||||
|
||||
# install dolt TODO build from source
|
||||
RUN curl -L https://github.com/liquidata-inc/dolt/releases/latest/download/install.sh | bash
|
||||
RUN dolt version
|
||||
|
||||
# setup dolt config
|
||||
RUN dolt config --global --add metrics.disabled true
|
||||
RUN dolt config --global --add metrics.host localhost
|
||||
RUN dolt config --global --add user.name mysql-test-runner
|
||||
RUN dolt config --global --add user.email mysql-test-runner@liquidata.co
|
||||
|
||||
# install node deps
|
||||
WORKDIR /mysql-client-tests/node
|
||||
RUN npm install
|
||||
|
||||
# run tests
|
||||
WORKDIR /mysql-client-tests
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
let mysql = require('mysql');
|
||||
const mysql = require('mysql');
|
||||
|
||||
var args = process.argv.slice(2);
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
var user = args[0];
|
||||
var port = args[1];
|
||||
var db = args[2];
|
||||
const user = args[0];
|
||||
const port = args[1];
|
||||
const db = args[2];
|
||||
|
||||
var config = {
|
||||
const config = {
|
||||
host: '127.0.0.1',
|
||||
user: user,
|
||||
port: port,
|
||||
@@ -15,7 +15,8 @@ var config = {
|
||||
|
||||
class Database {
|
||||
constructor( config ) {
|
||||
this.connection = mysql.createConnection( config );
|
||||
this.connection = mysql.createConnection( config );
|
||||
this.connection.connect();
|
||||
}
|
||||
|
||||
query( sql, args ) {
|
||||
@@ -23,33 +24,31 @@ class Database {
|
||||
this.connection.query( sql, args, ( err, rows ) => {
|
||||
if ( err )
|
||||
return reject( err );
|
||||
resolve( rows );
|
||||
return resolve( rows );
|
||||
} );
|
||||
} );
|
||||
}
|
||||
close() {
|
||||
return new Promise( ( resolve, reject ) => {
|
||||
this.connection.end( err => {
|
||||
if ( err )
|
||||
return reject( err );
|
||||
process.exit(0);
|
||||
resolve();
|
||||
} );
|
||||
} );
|
||||
this.connection.end(err => {
|
||||
if (err) {
|
||||
console.error(err)
|
||||
} else {
|
||||
console.log("db connection closed")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function main() {
|
||||
var queries = [
|
||||
"create table test (pk int, value int, primary key(pk))",
|
||||
"describe test",
|
||||
"select * from test",
|
||||
"insert into test (pk, value) values (0,0)",
|
||||
"select * from test"
|
||||
const queries = [
|
||||
"create table test (pk int, value int, primary key(pk))",
|
||||
"describe test",
|
||||
"select * from test",
|
||||
"insert into test (pk, value) values (0,0)",
|
||||
"select * from test"
|
||||
];
|
||||
|
||||
var results = [
|
||||
const results = [
|
||||
{
|
||||
fieldCount: 0,
|
||||
affectedRows: 0,
|
||||
@@ -87,27 +86,29 @@ async function main() {
|
||||
[ { pk: 0, value: 0 } ]
|
||||
];
|
||||
|
||||
var database = new Database(config);
|
||||
const database = new Database(config);
|
||||
|
||||
var i;
|
||||
for (i = 0; i < queries.length; i++) {
|
||||
var query = queries[i];
|
||||
var expected = results[i];
|
||||
await database.query(query).then( rows => {
|
||||
var result = JSON.parse(JSON.stringify(rows))
|
||||
if ( JSON.stringify(result) !== JSON.stringify(expected) ) {
|
||||
console.log("Query:");
|
||||
console.log(query);
|
||||
console.log("Results:");
|
||||
console.log(result);
|
||||
console.log("Expected:");
|
||||
console.log(expected);
|
||||
process.exit(1)
|
||||
}
|
||||
});
|
||||
}
|
||||
await Promise.all(queries.map((query, idx) => {
|
||||
const expected = results[idx];
|
||||
return database.query(query).then(rows => {
|
||||
const resultStr = JSON.stringify(rows);
|
||||
const result = JSON.parse(resultStr);
|
||||
if (resultStr !== JSON.stringify(expected) ) {
|
||||
console.log("Query:", query);
|
||||
console.log("Results:", result);
|
||||
console.log("Expected:", expected);
|
||||
throw new Error("Query failed")
|
||||
} else {
|
||||
console.log("Query succeeded:", query)
|
||||
}
|
||||
}).catch(err => {
|
||||
console.error(err)
|
||||
process.exit(1);
|
||||
});
|
||||
}));
|
||||
|
||||
database.close()
|
||||
database.close()
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
Reference in New Issue
Block a user