mirror of
https://github.com/jambonz/jambonz-api-server.git
synced 2026-01-25 02:08:24 +00:00
migrate to gh actions
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
"jsx": false,
|
"jsx": false,
|
||||||
"modules": false
|
"modules": false
|
||||||
},
|
},
|
||||||
"ecmaVersion": 2017
|
"ecmaVersion": 2018
|
||||||
},
|
},
|
||||||
"plugins": ["promise"],
|
"plugins": ["promise"],
|
||||||
"rules": {
|
"rules": {
|
||||||
|
|||||||
19
.github/workflows/npm-publish.yml
vendored
Normal file
19
.github/workflows/npm-publish.yml
vendored
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12
|
||||||
|
- run: npm install
|
||||||
|
- run: npm run jslint
|
||||||
|
- run: npm test
|
||||||
|
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
dist: bionic
|
|
||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- "lts/*"
|
|
||||||
services:
|
|
||||||
- mysql
|
|
||||||
script:
|
|
||||||
- npm test
|
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
create database jambones_test;
|
create database jambones_test;
|
||||||
create user jambones_test@localhost IDENTIFIED WITH mysql_native_password by 'jambones_test';
|
create user jambones_test@'%' IDENTIFIED WITH mysql_native_password by 'jambones_test';
|
||||||
grant all on jambones_test.* to jambones_test@localhost;
|
grant all on jambones_test.* to jambones_test@'%';
|
||||||
|
|||||||
16
package.json
16
package.json
@@ -5,7 +5,7 @@
|
|||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node app.js",
|
"start": "node app.js",
|
||||||
"test": "NODE_ENV=test JAMBONES_MYSQL_HOST=localhost JAMBONES_MYSQL_USER=jambones_test JAMBONES_MYSQL_PASSWORD=jambones_test JAMBONES_MYSQL_DATABASE=jambones_test JAMBONES_REDIS_HOST=localhost JAMBONES_LOGLEVEL=error JAMBONES_CREATE_CALL_URL=http://localhost/v1/createCall node test/ | ./node_modules/.bin/tap-spec",
|
"test": "NODE_ENV=test JAMBONES_MYSQL_HOST=127.0.0.1 JAMBONES_MYSQL_USER=jambones_test JAMBONES_MYSQL_PASSWORD=jambones_test JAMBONES_MYSQL_DATABASE=jambones_test JAMBONES_REDIS_HOST=localhost JAMBONES_LOGLEVEL=error JAMBONES_CREATE_CALL_URL=http://localhost/v1/createCall node test/ | ./node_modules/.bin/tap-spec",
|
||||||
"coverage": "./node_modules/.bin/nyc --reporter html --report-dir ./coverage npm run test",
|
"coverage": "./node_modules/.bin/nyc --reporter html --report-dir ./coverage npm run test",
|
||||||
"jslint": "eslint app.js lib"
|
"jslint": "eslint app.js lib"
|
||||||
},
|
},
|
||||||
@@ -15,31 +15,29 @@
|
|||||||
"url": "https://github.com/jambonz/jambonz-api-server.git"
|
"url": "https://github.com/jambonz/jambonz-api-server.git"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jambonz/db-helpers": "^0.5.1",
|
"@jambonz/db-helpers": "^0.5.5",
|
||||||
"@jambonz/messaging-382com": "0.0.2",
|
"@jambonz/messaging-382com": "0.0.2",
|
||||||
"@jambonz/messaging-peerless": "0.0.9",
|
"@jambonz/messaging-peerless": "0.0.9",
|
||||||
"@jambonz/messaging-simwood": "0.0.4",
|
"@jambonz/messaging-simwood": "0.0.4",
|
||||||
"@jambonz/realtimedb-helpers": "0.2.19",
|
"@jambonz/realtimedb-helpers": "0.2.19",
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"mysql2": "^2.1.0",
|
"mysql2": "^2.2.5",
|
||||||
"passport": "^0.4.1",
|
"passport": "^0.4.1",
|
||||||
"passport-http-bearer": "^1.0.1",
|
"passport-http-bearer": "^1.0.1",
|
||||||
"pino": "^5.17.0",
|
"pino": "^5.17.0",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"request-debug": "^0.2.0",
|
"request-debug": "^0.2.0",
|
||||||
"swagger-ui-dist": "^3.35.0",
|
"swagger-ui-express": "^4.1.5",
|
||||||
"swagger-ui-express": "^4.1.4",
|
|
||||||
"uuid": "^3.4.0",
|
"uuid": "^3.4.0",
|
||||||
"yamljs": "^0.3.0"
|
"yamljs": "^0.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "^7.10.0",
|
"blue-tape": "^1.0.0",
|
||||||
|
"eslint": "^7.15.0",
|
||||||
"eslint-plugin-promise": "^4.2.1",
|
"eslint-plugin-promise": "^4.2.1",
|
||||||
"nyc": "^15.1.0",
|
"nyc": "^15.1.0",
|
||||||
"request-promise-native": "^1.0.9",
|
"request-promise-native": "^1.0.9",
|
||||||
"tap-dot": "^2.0.0",
|
"tap-spec": "^5.0.0"
|
||||||
"tap-spec": "^5.0.0",
|
|
||||||
"tape": "^5.0.1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -138,7 +138,7 @@ test('account tests', async(t) => {
|
|||||||
|
|
||||||
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
||||||
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -121,7 +121,7 @@ test('application tests', async(t) => {
|
|||||||
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
||||||
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
//console.error(err);
|
//console.error(err);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -461,7 +461,7 @@ test('authentication tests', async(t) => {
|
|||||||
await deleteObjectBySid(request, '/ServiceProviders', spA_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', spA_sid);
|
||||||
await deleteObjectBySid(request, '/ServiceProviders', spB_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', spB_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const exec = require('child_process').exec ;
|
const exec = require('child_process').exec ;
|
||||||
const pwd = process.env.TRAVIS ? '' : '-p$MYSQL_ROOT_PASSWORD';
|
|
||||||
|
|
||||||
test('creating jambones_test database', (t) => {
|
test('creating jambones_test database', (t) => {
|
||||||
exec(`mysql -h localhost -u root ${pwd} < ${__dirname}/../db/create_test_db.sql`, (err, stdout, stderr) => {
|
exec(`mysql -h 127.0.0.1 -u root --protocol=tcp < ${__dirname}/../db/create_test_db.sql`, (err, stdout, stderr) => {
|
||||||
if (err) return t.end(err);
|
if (err) return t.end(err);
|
||||||
t.pass('database successfully created');
|
t.pass('database successfully created');
|
||||||
t.end();
|
t.end();
|
||||||
@@ -11,7 +10,7 @@ test('creating jambones_test database', (t) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('creating schema', (t) => {
|
test('creating schema', (t) => {
|
||||||
exec(`mysql -h localhost -u root ${pwd} -D jambones_test < ${__dirname}/../db/jambones-sql.sql`, (err, stdout, stderr) => {
|
exec(`mysql -h 127.0.0.1 -u root --protocol=tcp -D jambones_test < ${__dirname}/../db/jambones-sql.sql`, (err, stdout, stderr) => {
|
||||||
if (err) return t.end(err);
|
if (err) return t.end(err);
|
||||||
t.pass('schema successfully created');
|
t.pass('schema successfully created');
|
||||||
t.end();
|
t.end();
|
||||||
@@ -19,7 +18,7 @@ test('creating schema', (t) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('creating auth token', (t) => {
|
test('creating auth token', (t) => {
|
||||||
exec(`mysql -h localhost -u root ${pwd} -D jambones_test < ${__dirname}/../db/create-admin-token.sql`, (err, stdout, stderr) => {
|
exec(`mysql -h 127.0.0.1 -u root --protocol=tcp -D jambones_test < ${__dirname}/../db/create-admin-token.sql`, (err, stdout, stderr) => {
|
||||||
if (err) return t.end(err);
|
if (err) return t.end(err);
|
||||||
t.pass('auth token successfully created');
|
t.pass('auth token successfully created');
|
||||||
t.end();
|
t.end();
|
||||||
|
|||||||
13
test/docker-compose-testbed.yaml
Normal file
13
test/docker-compose-testbed.yaml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:5.7
|
||||||
|
ports:
|
||||||
|
- "3306:3306"
|
||||||
|
environment:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "mysqladmin" ,"ping", "-h", "127.0.0.1", "--protocol", "tcp"]
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
12
test/docker_start.js
Normal file
12
test/docker_start.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const test = require('blue-tape');
|
||||||
|
//const test = require('tape').test ;
|
||||||
|
const exec = require('child_process').exec ;
|
||||||
|
|
||||||
|
test('starting docker network..', (t) => {
|
||||||
|
exec(`docker-compose -f ${__dirname}/docker-compose-testbed.yaml up -d`, (err, stdout, stderr) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
t.pass('docker started');
|
||||||
|
t.end(err);
|
||||||
|
}, 15000);
|
||||||
|
});
|
||||||
|
});
|
||||||
12
test/docker_stop.js
Normal file
12
test/docker_stop.js
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
const test = require('blue-tape');
|
||||||
|
const exec = require('child_process').exec ;
|
||||||
|
|
||||||
|
test('stopping docker network..', (t) => {
|
||||||
|
t.timeoutAfter(10000);
|
||||||
|
exec(`docker-compose -f ${__dirname}/docker-compose-testbed.yaml down`, (err, stdout, stderr) => {
|
||||||
|
//console.log(`stderr: ${stderr}`);
|
||||||
|
process.exit(0);
|
||||||
|
});
|
||||||
|
t.end() ;
|
||||||
|
});
|
||||||
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
require('./docker_start');
|
||||||
require('./create-test-db');
|
require('./create-test-db');
|
||||||
require('./sip-gateways');
|
require('./sip-gateways');
|
||||||
require('./service-providers');
|
require('./service-providers');
|
||||||
@@ -8,4 +9,4 @@ require('./applications');
|
|||||||
require('./auth');
|
require('./auth');
|
||||||
require('./sbcs');
|
require('./sbcs');
|
||||||
require('./ms-teams');
|
require('./ms-teams');
|
||||||
require('./remove-test-db');
|
require('./docker_stop');
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -10,7 +10,7 @@ process.on('unhandledRejection', (reason, p) => {
|
|||||||
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('sbc_addresses tests', async(t) => {
|
test('ms teams tests', async(t) => {
|
||||||
const app = require('../app');
|
const app = require('../app');
|
||||||
let sid;
|
let sid;
|
||||||
try {
|
try {
|
||||||
@@ -79,7 +79,7 @@ test('sbc_addresses tests', async(t) => {
|
|||||||
await deleteObjectBySid(request, '/Accounts', account_sid2);
|
await deleteObjectBySid(request, '/Accounts', account_sid2);
|
||||||
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -111,7 +111,7 @@ test('phone number tests', async(t) => {
|
|||||||
|
|
||||||
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('tape').test ;
|
||||||
const exec = require('child_process').exec ;
|
const exec = require('child_process').exec ;
|
||||||
const pwd = process.env.TRAVIS ? '' : '-p$MYSQL_ROOT_PASSWORD';
|
const pwd = process.env.CI ? '' : '-p$MYSQL_ROOT_PASSWORD';
|
||||||
|
|
||||||
test('dropping jambones_test database', (t) => {
|
test('dropping jambones_test database', (t) => {
|
||||||
exec(`mysql -h localhost -u root ${pwd} < ${__dirname}/../db/remove_test_db.sql`, (err, stdout, stderr) => {
|
exec(`mysql -h 127.0.0.1 -u root ${pwd} --protocol=tcp < ${__dirname}/../db/remove_test_db.sql`, (err, stdout, stderr) => {
|
||||||
if (err) return t.end(err);
|
if (err) return t.end(err);
|
||||||
t.pass('database successfully dropped');
|
t.pass('database successfully dropped');
|
||||||
t.end();
|
t.end();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -60,7 +60,7 @@ test('sbc_addresses tests', async(t) => {
|
|||||||
await deleteObjectBySid(request, '/Sbcs', sid2);
|
await deleteObjectBySid(request, '/Sbcs', sid2);
|
||||||
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -117,7 +117,7 @@ test('service provider tests', async(t) => {
|
|||||||
resolveWithFullResponse: true,
|
resolveWithFullResponse: true,
|
||||||
});
|
});
|
||||||
t.ok(result.statusCode === 204, 'successfully deleted service provider 2');
|
t.ok(result.statusCode === 204, 'successfully deleted service provider 2');
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -72,7 +72,7 @@ test('sip gateway tests', async(t) => {
|
|||||||
|
|
||||||
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const test = require('tape').test ;
|
const test = require('blue-tape').test ;
|
||||||
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de';
|
||||||
const authAdmin = {bearer: ADMIN_TOKEN};
|
const authAdmin = {bearer: ADMIN_TOKEN};
|
||||||
const request = require('request-promise-native').defaults({
|
const request = require('request-promise-native').defaults({
|
||||||
@@ -194,7 +194,7 @@ test('voip carrier tests', async(t) => {
|
|||||||
await deleteObjectBySid(request, '/Accounts', account_sid2);
|
await deleteObjectBySid(request, '/Accounts', account_sid2);
|
||||||
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid);
|
||||||
|
|
||||||
t.end();
|
//t.end();
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
Reference in New Issue
Block a user