@xazab/dp-services-ctl

Control Xazab Platform services using JavaScript and Docker

Usage no npm install needed!

<script type="module">
  import xazabDpServicesCtl from 'https://cdn.skypack.dev/@xazab/dp-services-ctl';
</script>

README

Xazab Platform services ctl

Build Status NPM version

Control Xazab Platform services using JavaScript and Docker

The tool provides a convenient JavaScript interface for configuration and interaction with Xazab Platform services. Services are started in Docker containers.

Table of Contents

Installation

  1. Install Docker

  2. Install NPM package:

    npm install @xazab/dp-services-ctl
    

Usage

Available DP services

Drive

Drive service starts a bunch of related services:

DAPI

DAPI service starts all DP services:

Xazab Core

Tendermint Core

Insight API

MongoDB

Starting a service

// Export service(s)
const { startMongoDb } = require('@xazab/dp-services-ctl');
// This is optional. Default options listed in options class
const options = {
  port: 27017, // mongoDB port
};

// Start service
const mongo = await startMongoDb(options);

// Get mongo client
const client = await mongo.getClient();

// Stop mongoDB
await mongo.remove();

Use many method to start several instances:

const { startMongoDb } = require('@xazab/dp-services-ctl');

// This is optional. Default options listed in options class
const options = {
  port: 27017, // mongoDB port
};

// Start two services
const mongoNodes = await startMongoDb.many(2,options);

// Get peer IDs
const [client1, client2] = await Promise.all(
  mongoNodes.map(mongo => mongo.getClient()),
);

// Stop mongoDB nodes
await Promise.all(
  mongoNodes.map(mongo => mongo.remove()),
);

Services configuration

Each service has default options which can be overwritten in three ways:

  1. Pass options as plain JS object to start[service] or create[service] methods
  2. Pass instance of options class to start[service] or create[service] methods
  3. Pass default options as plain JS object to setDefaultCustomOptions method of options class

Integration with Mocha

Services Mocha hooks provide automation for your mocha tests:

  • Removing obsolete related Docker containers (before)
  • Cleaning a service state between tests (beforeEach, afterEach)
  • Stopping service after tests (after)
// Export service(s) with mocha hooks
const { mocha: { startMongoDb } } = require('@xazab/dp-services-ctl');

describe('Test suite', () => {
  let mongoClient;

  startMongoDb().then(mongo => () => {
    mongoClient = mongo.getClient();
  });

  it('should do something', async () => {
    const collection = mongoClient.db('test').collection('syncState');
    const count = await collection.countDocuments({});

    expect(count).to.equal(0);
  });
});

Maintainers

@shumkov

@jawid-h

@abvgedeika

Contributing

Feel free to dive in! Open an issue or submit PRs.

License

MIT © Xazab Core Group, Inc.