/mysql-client-tests/{node/, MySQLDockerfile}: POC dockerizing test env

This commit is contained in:
Dustin Brown
2020-08-26 18:16:06 -07:00
parent 57d5925f73
commit 9b547aaa85
2 changed files with 114 additions and 43 deletions
+70
View File
@@ -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
+44 -43
View File
@@ -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();