integratyion tests WIP

This commit is contained in:
Jan Prochazka
2021-05-27 09:12:21 +02:00
parent 08fc3ffce4
commit 0413075af6
10 changed files with 1824 additions and 27 deletions

View File

@@ -0,0 +1,51 @@
const engines = require('../engines');
const requireEngineDriver = require('dbgate-api/src/utility/requireEngineDriver');
const crypto = require('crypto');
global.DBGATE_TOOLS = require('dbgate-tools');
function randomDbName() {
const generatedKey = crypto.randomBytes(6);
const newKey = generatedKey.toString('hex');
return `db${newKey}`;
}
async function connect(connection, database) {
const driver = requireEngineDriver(connection);
const conn = await driver.connect(connection);
await driver.query(conn, `CREATE DATABASE ${database}`);
await driver.close(conn);
const res = await driver.connect({
...connection,
database,
});
return res;
}
describe('Analyse tests', () => {
test.each(engines.map(engine => [engine.label, engine.connection]))(
'Create table (%s)',
async (label, connection) => {
const conn = await connect(connection, randomDbName());
const driver = requireEngineDriver(connection);
await driver.query(conn, 'CREATE TABLE t1 (id int)');
const structure = await driver.analyseFull(conn);
expect(structure.tables.length).toEqual(1);
expect(structure.tables[0]).toEqual(
expect.objectContaining({
pureName: 't1',
columns: [
expect.objectContaining({
columnName: 'id',
}),
],
})
);
await driver.close(conn);
}
);
});

View File

@@ -0,0 +1,55 @@
version: '3'
services:
postgres:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: Pwd2020Db
ports:
- 15000:5432
mysql:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 15001:3306
environment:
- MYSQL_ROOT_PASSWORD=Pwd2020Db
mssql:
image: mcr.microsoft.com/mssql/server
restart: always
ports:
- 15002:1433
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=Pwd2020Db
- MSSQL_PID=Express
# cockroachdb:
# image: cockroachdb/cockroach
# ports:
# - 15003:26257
# command: start-single-node --insecure
# mongodb:
# image: mongo:4.0.12
# restart: always
# volumes:
# - mongo-data:/data/db
# - mongo-config:/data/configdb
# ports:
# - 27017:27017
# cockroachdb-init:
# image: cockroachdb/cockroach
# # build: cockroach
# # entrypoint: /cockroach/init.sh
# entrypoint: ./cockroach sql --insecure --host="cockroachdb" --execute="CREATE DATABASE IF NOT EXISTS test;"
# depends_on:
# - cockroachdb
# restart: on-failure

View File

@@ -0,0 +1,14 @@
const engines = [
{
label: 'MySQL',
connection: {
engine: 'mysql@dbgate-plugin-mysql',
server: 'localhost',
password: 'Pwd2020Db',
user: 'root',
port: 15001,
},
},
];
module.exports = engines;

View File

@@ -0,0 +1,21 @@
{
"name": "dbgate-integration-tests",
"version": "4.1.1",
"homepage": "https://dbgate.org/",
"repository": {
"type": "git",
"url": "https://github.com/dbgate/dbgate.git"
},
"author": "Jan Prochazka",
"license": "MIT",
"scripts": {
"prepare": "cross-env DEVMODE=1 node prepare.js",
"test": "cross-env DEVMODE=1 jest --runInBand",
"start": "docker-compose down && docker-compose up -d && node wait.js && yarn prepare && yarn test"
},
"devDependencies": {
"cross-env": "^7.0.3",
"jest": "^27.0.1"
},
"dependencies": {}
}

View File

@@ -0,0 +1,14 @@
const requireEngineDriver = require('dbgate-api/src/utility/requireEngineDriver');
const engines = require('./engines');
global.DBGATE_TOOLS = require('dbgate-tools');
async function run() {
for (const engine of engines) {
const driver = requireEngineDriver(engine.connection);
const conn = await driver.connect(engine.connection);
await driver.query(conn, 'CREATE DATABASE dbtest');
await driver.close(conn);
}
}
run();

View File

@@ -0,0 +1,6 @@
async function run() {
console.log('Waiting for starting containers...');
await new Promise(resolve => setTimeout(resolve, 20000));
}
run();

View File

@@ -4,7 +4,8 @@
"name": "dbgate-all",
"workspaces": [
"packages/*",
"plugins/*"
"plugins/*",
"integration-tests"
],
"scripts": {
"start:api": "yarn workspace dbgate-api start",

View File

@@ -43,7 +43,8 @@ export interface EngineDriver {
showConnectionTab?: (tab: 'ssl' | 'sshTunnel', values: any) => boolean;
beforeConnectionSave?: (values: any) => any;
databaseUrlPlaceholder?: string;
connect({ server, port, user, password, database }): any;
connect({ server, port, user, password, database }): Promise<any>;
close(pool): Promise<any>;
query(pool: any, sql: string): Promise<QueryResult>;
stream(pool: any, sql: string, options: StreamOptions);
readQuery(pool: any, sql: string, structure?: TableInfo): Promise<stream.Readable>;

View File

@@ -112,6 +112,9 @@ const drivers = driverBases.map(driverBase => ({
connection._database_name = database;
return connection;
},
async close(pool) {
return pool.close();
},
async query(connection, sql) {
if (sql == null) {
return {

1681
yarn.lock

File diff suppressed because it is too large Load Diff