Node.js-based database service for Firefox Accounts. Includes:
- The API server.
- A MySQL backend. Used in production.
- node.js 14
- npm
- MySQL (we use version 5.6.42 in production)
This package uses Mocha to test its code. By default npm test
will run all NPM test scripts and then lint the code:
npm run test-mysql
will test database code undertest/backend
andtest/local
.npm run test-server
will test server code underdb-server/test/local
.
Test specific tests with the following commands:
# Test only test/lib/log.js
./scripts/mocha-coverage.js test/lib/log.js
# Grep for "error module" under db-server/test
./scripts/mocha-coverage.js db-server/test/*/** -g "error module"
Refer to Mocha's CLI documentation for more advanced test configuration.
See the API documentation. Backend implementers should also read the database documentation.
To run the server tests:
npm run test-server
Implements the backend API as a MySQL database.
To run the MySQL tests:
npm run test-mysql
Both the server
and the database patcher
read values from a config file
config/$NODE_ENV.json
,
where NODE_ENV
is an environment variable
set in the shell.
For local development,
set NODE_ENV
to dev
then create a new JSON file
called config/dev.json
.
In there,
you can set any values
that you'd like to override
the master config file,
config/config.js
.
For instance:
{
"master": {
"user": "root",
"password": "foo"
},
"slave": {
"user": "root",
"password": "bar"
}
}
You can start the server like so:
npm start
This will set up the database for you
then start the server on whichever port
is configured in config/$NODE_ENV.json
(port 8000 by default).
If the server fails to start, check that MySQL is running and that your active config has the correct settings to connect to the database.
If you want to run the database patcher on its own, use the following command:
node bin/db_patcher.js
This command creates the database
if it doesn't exist,
then runs migrations
from lib/db/schema
in the appropriate order.
Both forward and reverse migrations
are contained in this directory,
but note that the reverse migrations
are commented out
as a precaution against
accidental execution.
If the command fails, check that MySQL is running and that your active config has the correct settings to connect to the database.
If you want to clean the database, just drop it in MySQL:
mysql -u root -p -e 'DROP DATABASE fxa'
It will be recreated automatically
next time you run npm start
.