text: /*******************************************************************************
   * Copyright 2017 IBM Corp.
   *
   * Licensed under the Apache License, Version 2.0 (the "License"); you may not
   * use this file except in compliance with the License. You may obtain a copy of
   * the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
   * License for the specific language governing permissions and limitations under
   * the License.
   ******************************************************************************/
  'use strict';
  
  // Test framework.
  const request = require('request');
  const tap = require('tap');
  const util = require('util');
  
  const config = require('./config');
  
  // Setup appmetrics and start app somewhat as a supervisor would.
  const appmetrics = require('appmetrics');
  appmetrics.start();
  require('../').attach({appmetrics: appmetrics});
  
  const app = require('./apps/lb-3');
  const server = app.start();
  let base;
  
  tap.test('start', function(t) {
    server.on('listening', function() {
      const port = this.address().port;
      let addr = this.address().address;
      if (addr === '0.0.0.0')
        addr = '127.0.0.1';
      if (addr === '::')
        addr = '[::1]';
      base = util.format('http://%s:%s', addr, port);
      t.pass('listened');
      t.end();
    });
  });
  
  tap.test('loopack api available', function(t) {
    const url = base + '/api/Messages/greet';
    request(url, function(err, resp, body) {
      t.ifError(err);
      t.equal(body, '{"greeting":"Sender says hello to receiver"}');
      t.end();
    });
  });
  
  tap.test('metrics available', function(t) {
    const options = {
      url: base + '/metrics',
    };
    request(options, function(err, resp, body) {
      t.ifError(err);
      config.expectedMetrics.forEach(metricName => {
        t.similar(body, metricName);
      });
      t.end();
    });
  });
  
  tap.test('stop', function(t) {
    server.close(t.end);
  });
  