diff --git a/.eslintrc.json b/.eslintrc.json index d81ce6d..03e3cfe 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,7 +8,7 @@ "jsx": false, "modules": false }, - "ecmaVersion": 2017 + "ecmaVersion": 2018 }, "plugins": ["promise"], "rules": { diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 0000000..c8d315c --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -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 + + diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 8b34745..0000000 --- a/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -dist: bionic -language: node_js -node_js: - - "lts/*" -services: - - mysql -script: - - npm test diff --git a/db/create_test_db.sql b/db/create_test_db.sql index b6a3ce9..d53a510 100644 --- a/db/create_test_db.sql +++ b/db/create_test_db.sql @@ -1,3 +1,3 @@ create database jambones_test; -create user jambones_test@localhost IDENTIFIED WITH mysql_native_password by 'jambones_test'; -grant all on jambones_test.* to jambones_test@localhost; +create user jambones_test@'%' IDENTIFIED WITH mysql_native_password by 'jambones_test'; +grant all on jambones_test.* to jambones_test@'%'; diff --git a/package.json b/package.json index 384f7c0..ac21060 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "app.js", "scripts": { "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", "jslint": "eslint app.js lib" }, @@ -15,31 +15,29 @@ "url": "https://github.com/jambonz/jambonz-api-server.git" }, "dependencies": { - "@jambonz/db-helpers": "^0.5.1", + "@jambonz/db-helpers": "^0.5.5", "@jambonz/messaging-382com": "0.0.2", "@jambonz/messaging-peerless": "0.0.9", "@jambonz/messaging-simwood": "0.0.4", "@jambonz/realtimedb-helpers": "0.2.19", "cors": "^2.8.5", "express": "^4.17.1", - "mysql2": "^2.1.0", + "mysql2": "^2.2.5", "passport": "^0.4.1", "passport-http-bearer": "^1.0.1", "pino": "^5.17.0", "request": "^2.88.2", "request-debug": "^0.2.0", - "swagger-ui-dist": "^3.35.0", - "swagger-ui-express": "^4.1.4", + "swagger-ui-express": "^4.1.5", "uuid": "^3.4.0", "yamljs": "^0.3.0" }, "devDependencies": { - "eslint": "^7.10.0", + "blue-tape": "^1.0.0", + "eslint": "^7.15.0", "eslint-plugin-promise": "^4.2.1", "nyc": "^15.1.0", "request-promise-native": "^1.0.9", - "tap-dot": "^2.0.0", - "tap-spec": "^5.0.0", - "tape": "^5.0.1" + "tap-spec": "^5.0.0" } } diff --git a/test/accounts.js b/test/accounts.js index b7f5280..5084bdc 100644 --- a/test/accounts.js +++ b/test/accounts.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; 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, '/ServiceProviders', service_provider_sid); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/applications.js b/test/applications.js index 885dee9..5dc44a2 100644 --- a/test/applications.js +++ b/test/applications.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; 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, '/ServiceProviders', service_provider_sid); - t.end(); + //t.end(); } catch (err) { //console.error(err); diff --git a/test/auth.js b/test/auth.js index f035070..d5967cb 100644 --- a/test/auth.js +++ b/test/auth.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; 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', spB_sid); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/create-test-db.js b/test/create-test-db.js index 4543f17..04ca3ea 100644 --- a/test/create-test-db.js +++ b/test/create-test-db.js @@ -1,9 +1,8 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const exec = require('child_process').exec ; -const pwd = process.env.TRAVIS ? '' : '-p$MYSQL_ROOT_PASSWORD'; 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); t.pass('database successfully created'); t.end(); @@ -11,7 +10,7 @@ test('creating jambones_test database', (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); t.pass('schema successfully created'); t.end(); @@ -19,7 +18,7 @@ test('creating schema', (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); t.pass('auth token successfully created'); t.end(); diff --git a/test/docker-compose-testbed.yaml b/test/docker-compose-testbed.yaml new file mode 100644 index 0000000..d3e038e --- /dev/null +++ b/test/docker-compose-testbed.yaml @@ -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 diff --git a/test/docker_start.js b/test/docker_start.js new file mode 100644 index 0000000..0fda0bf --- /dev/null +++ b/test/docker_start.js @@ -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); + }); +}); diff --git a/test/docker_stop.js b/test/docker_stop.js new file mode 100644 index 0000000..5436e7d --- /dev/null +++ b/test/docker_stop.js @@ -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() ; +}); + diff --git a/test/index.js b/test/index.js index 686244a..c2078d9 100644 --- a/test/index.js +++ b/test/index.js @@ -1,3 +1,4 @@ +require('./docker_start'); require('./create-test-db'); require('./sip-gateways'); require('./service-providers'); @@ -8,4 +9,4 @@ require('./applications'); require('./auth'); require('./sbcs'); require('./ms-teams'); -require('./remove-test-db'); +require('./docker_stop'); diff --git a/test/ms-teams.js b/test/ms-teams.js index 0c8ad6f..39f0c2d 100644 --- a/test/ms-teams.js +++ b/test/ms-teams.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; 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); }); -test('sbc_addresses tests', async(t) => { +test('ms teams tests', async(t) => { const app = require('../app'); let sid; try { @@ -79,7 +79,7 @@ test('sbc_addresses tests', async(t) => { await deleteObjectBySid(request, '/Accounts', account_sid2); await deleteObjectBySid(request, '/ServiceProviders', service_provider_sid); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/phone-numbers.js b/test/phone-numbers.js index 3b8dfc7..b6e4da2 100644 --- a/test/phone-numbers.js +++ b/test/phone-numbers.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; const request = require('request-promise-native').defaults({ @@ -111,7 +111,7 @@ test('phone number tests', async(t) => { await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/remove-test-db.js b/test/remove-test-db.js index 74bcab1..2642e0b 100644 --- a/test/remove-test-db.js +++ b/test/remove-test-db.js @@ -1,9 +1,9 @@ const test = require('tape').test ; 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) => { - 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); t.pass('database successfully dropped'); t.end(); diff --git a/test/sbcs.js b/test/sbcs.js index ef74ebf..cd74681 100644 --- a/test/sbcs.js +++ b/test/sbcs.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; 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, '/ServiceProviders', service_provider_sid); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/service-providers.js b/test/service-providers.js index 339bcf7..5cd4654 100644 --- a/test/service-providers.js +++ b/test/service-providers.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; const request = require('request-promise-native').defaults({ @@ -117,7 +117,7 @@ test('service provider tests', async(t) => { resolveWithFullResponse: true, }); t.ok(result.statusCode === 204, 'successfully deleted service provider 2'); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/sip-gateways.js b/test/sip-gateways.js index fedf2d9..3784d91 100644 --- a/test/sip-gateways.js +++ b/test/sip-gateways.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; const request = require('request-promise-native').defaults({ @@ -72,7 +72,7 @@ test('sip gateway tests', async(t) => { await deleteObjectBySid(request, '/VoipCarriers', voip_carrier_sid); - t.end(); + //t.end(); } catch (err) { console.error(err); diff --git a/test/voip-carriers.js b/test/voip-carriers.js index e11fd46..8a99168 100644 --- a/test/voip-carriers.js +++ b/test/voip-carriers.js @@ -1,4 +1,4 @@ -const test = require('tape').test ; +const test = require('blue-tape').test ; const ADMIN_TOKEN = '38700987-c7a4-4685-a5bb-af378f9734de'; const authAdmin = {bearer: ADMIN_TOKEN}; 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, '/ServiceProviders', service_provider_sid); - t.end(); + //t.end(); } catch (err) { console.error(err);