openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
270 lines (229 loc) • 10.6 kB
text/coffeescript
should = require "should"
request = require "supertest"
Transaction = require("../../lib/model/transactions").Transaction
Channel = require("../../lib/model/channels").Channel
testUtils = require "../testUtils"
auth = require("../testUtils").auth
ObjectId = require('mongoose').Types.ObjectId;
moment = require 'moment'
logger = require 'winston'
mongoose = require 'mongoose'
authorisation = require "../../lib/api/authorisation"
config = require "../../lib/config/config"
server = require "../../lib/server"
describe "API Metrics Tests", ->
describe 'openHIM Metrics Api testing', ->
this.timeout(15000)
transaction1 = new Transaction
_id: "111111111111111111111111"
channelID: "111111111111111111111111"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-15T08:10:45.109Z" }
response: { status: "200", timestamp: "2014-07-15T08:10:45.109Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction2 = new Transaction
_id: "222222222222222222222222"
channelID: "111111111111111111111111"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-15T14:30:45.109Z" }
response: { status: "200", timestamp: "2014-07-15T14:30:45.285Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction3 = new Transaction
_id: "333333333333333333333333"
channelID: "222222222222222222222222"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-15T19:46:45.229Z" }
response: { status: "200", timestamp: "2014-07-15T19:46:45.306Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction4 = new Transaction
_id: "444444444444444444444444"
channelID: "111111111111111111111111"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-16T09:15:45.109Z" }
response: { status: "404", timestamp: "2014-07-16T09:15:45.600Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Failed"
transaction5 = new Transaction
_id: "555555555555555555555555"
channelID: "222222222222222222222222"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-16T13:30:45.650Z" }
response: { status: "200", timestamp: "2014-07-16T13:30:46.109Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction6 = new Transaction
_id: "666666666666666666666666"
channelID: "222222222222222222222222"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-16T16:10:39.850Z" }
response: { status: "200", timestamp: "2014-07-16T16:10:40.109Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction7 = new Transaction
_id: "777777777777777777777777"
channelID: "111111111111111111111111"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-17T14:45:20.109Z" }
response: { status: "200", timestamp: "2014-07-17T14:45:20.385Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction8 = new Transaction
_id: "888888888888888888888888"
channelID: "222222222222222222222222"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-17T19:21:45.129Z" }
response: { status: "200", timestamp: "2014-07-17T19:21:45.306Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
transaction9 = new Transaction
_id: "999999999999999999999999"
channelID: "111111111111111111111111"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-18T11:17:45.909Z" }
response: { status: "404", timestamp: "2014-07-18T11:17:46.200Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Failed"
transaction10 = new Transaction
_id: "101010101010101010101010"
channelID: "222222222222222222222222"
clientID: "42bbe25485e77d8e5daad4b4"
request: { path: "/sample/api", method: "GET", timestamp: "2014-07-18T13:25:45.890Z" }
response: { status: "200", timestamp: "2014-07-18T13:25:46.039Z" }
routes: { name: "dummy-route" }
orchestrations: { name: "dummy-orchestration" }
status: "Completed"
channel1 = new Channel
_id: "111111111111111111111111"
name: "Test Channel 11111"
urlPattern: "test/sample"
allow: [ "PoC", "Test1", "Test2" ]
routes: [{ name: "test route", host: "localhost", port: 9876 }]
channel2 = new Channel
_id: "222222222222222222222222"
name: "Test Channel 22222"
urlPattern: "test/sample"
allow: [ "PoC", "Test1", "Test2" ]
routes: [{ name: "test route", host: "localhost", port: 9876 }]
authDetails = {}
before (done) ->
config.statsd.enabled = false
Channel.remove {}, ->
Transaction.remove {}, ->
channel1.save (err) ->
channel2.save (err) ->
transaction1.save (err) ->
transaction2.save (err) ->
transaction3.save (err) ->
transaction4.save (err) ->
transaction5.save (err) ->
transaction6.save (err) ->
transaction7.save (err) ->
transaction8.save (err) ->
transaction9.save (err) ->
transaction10.save (err) ->
auth.setupTestUsers (err) ->
return done err if err
config.statsd.enabled = false
server.start apiPort: 8080, tcpHttpReceiverPort: 7787, ->
done()
after (done) ->
server.stop ->
auth.cleanupTestUsers ->
Channel.remove {}, ->
Transaction.remove {}, ->
done()
beforeEach ->
authDetails = auth.getAuthDetails()
describe '*getGlobalLoadTimeMetrics()', ->
it 'should fetch dashboard channel metrics based on the currently logged in user permissions', (done) ->
request("https://localhost:8080")
.get("/metrics?startDate=%222014-07-18T00:00:00.000Z%22&endDate=%222014-07-19T00:00:00.000Z%22")
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
console.log(err)
done err
else
res.body.should.have.length 2
res.body[0].load.should.equal 1
res.body[0].avgResp.should.equal 149
res.body[0].timestamp.should.equal '2014-07-18T13:00:00+00:00'
done()
describe '*getGlobalStatusMetrics()', ->
it 'should fetch global status metrics based on the currently logged in user permissions', (done) ->
request "https://localhost:8080"
.get "/metrics/status?startDate=%222014-07-18T00:00:00.000Z%22&endDate=%222014-07-19T00:00:00.000Z%22"
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
console.log(err)
done err
else
res.body.should.have.length 2
res.body[0].should.have.properties 'failed','successful','processing','completed','completedWErrors'
res.body[0].failed.should.equal 0
res.body[0].successful.should.equal 0
res.body[0].processing.should.equal 0
res.body[0].completed.should.equal 1
res.body[0].completedWErrors.should.equal 0
done()
describe '*getLoadTimeMetrics()', ->
it 'should fetch channel metrics based by ID', (done) ->
request "https://localhost:8080"
.get "/metrics/day/222222222222222222222222?startDate=%222014-07-18T00:00:00.000Z%22&endDate=%222014-07-19T00:00:00.000Z%22"
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
console.log(err)
done err
else
res.body.should.have.length 1
res.body[0].load.should.equal 1
res.body[0].avgResp.should.equal 149
res.body[0].timestamp.should.equal '2014-07-18T00:00:00+00:00'
done()
describe '*getStatusMetrics()', ->
it 'should fetch global status metrics based on the currently logged in user permissions', (done) ->
request "https://localhost:8080"
.get "/metrics/status/222222222222222222222222?startDate=%222014-07-18T00:00:00.000Z%22&endDate=%222014-07-19T00:00:00.000Z%22"
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.expect(200)
.end (err, res) ->
if err
console.log(err)
done err
else
res.body[0].should.have.properties 'failed','successful','processing','completed','completedWErrors'
res.body[0].failed.should.equal 0
res.body[0].successful.should.equal 0
res.body[0].processing.should.equal 0
res.body[0].completed.should.equal 1
res.body[0].completedWErrors.should.equal 0
done()