openhim-core
Version:
The OpenHIM core application that provides logging and routing of http requests
148 lines (125 loc) • 4.79 kB
text/coffeescript
should = require 'should'
request = require 'supertest'
server = require '../../lib/server'
Channel = require('../../lib/model/channels').Channel
Mediator = require('../../lib/model/mediators').Mediator
testUtils = require '../testUtils'
auth = require('../testUtils').auth
describe 'API Integration Tests', ->
describe 'Heartbeat REST API testing', ->
mediator1 =
urn: 'urn:mediator:awesome-test-mediator'
version: '1.0.0'
name: 'Awesome Test Mediator'
description: 'This is a test mediator. It is awesome.'
endpoints: [
{
name: 'The Endpoint'
host: 'localhost'
port: '9000'
type: 'http'
}
]
authDetails = {}
before (done) ->
auth.setupTestUsers (err) ->
return done err if err
server.start apiPort: 8080, done
after (done) ->
server.stop -> auth.cleanupTestUsers done
beforeEach ->
authDetails = auth.getAuthDetails()
afterEach (done) -> Mediator.remove {}, done
registerMediator = (done) ->
request("https://localhost:8080")
.post("/mediators")
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.send(mediator1)
.expect(201)
.end done
describe '*getHeartbeat()', ->
it 'should fetch the heartbeat without requiring authentication', (done) ->
request("https://localhost:8080")
.get("/heartbeat")
.expect(200)
.end (err, res) ->
return done err if err
done()
it 'should return core uptime', (done) ->
request("https://localhost:8080")
.get("/heartbeat")
.expect(200)
.end (err, res) ->
return done err if err
res.body.should.have.property('master').and.be.a.Number()
done()
it 'should include known mediators in response', (done) ->
registerMediator (err, res) ->
return done err if err
request("https://localhost:8080")
.get("/heartbeat")
.expect(200)
.end (err, res) ->
return done err if err
res.body.should.have.property('mediators')
res.body.mediators.should.have.property mediator1.urn
done()
it 'should set the uptime to null if no heartbeats received from mediator', (done) ->
registerMediator (err, res) ->
return done err if err
request("https://localhost:8080")
.get("/heartbeat")
.expect(200)
.end (err, res) ->
return done err if err
res.body.should.have.property('mediators')
should(res.body.mediators[mediator1.urn]).be.null()
done()
sendUptime = (done) ->
request("https://localhost:8080")
.post("/mediators/#{mediator1.urn}/heartbeat")
.set("auth-username", testUtils.rootUser.email)
.set("auth-ts", authDetails.authTS)
.set("auth-salt", authDetails.authSalt)
.set("auth-token", authDetails.authToken)
.send(
"uptime": 200
)
.expect(200)
.end done
it 'should include the mediator uptime', (done) ->
registerMediator (err, res) ->
return done err if err
sendUptime (err, res) ->
return done err if err
request("https://localhost:8080")
.get("/heartbeat")
.expect(200)
.end (err, res) ->
return done err if err
res.body.should.have.property('mediators')
res.body.mediators[mediator1.urn].should.be.exactly 200
done()
it 'should NOT include the mediator uptime if the last heartbeat was received more than a minute ago', (done) ->
registerMediator (err, res) ->
return done err if err
sendUptime (err, res) ->
return done err if err
now = new Date()
prev = new Date()
update =
_configModifiedTS: now
_lastHeartbeat: new Date(prev.setMinutes(now.getMinutes() - 5))
Mediator.findOneAndUpdate urn: mediator1.urn, update, (err) ->
return done err if err
request("https://localhost:8080")
.get("/heartbeat")
.expect(200)
.end (err, res) ->
return done err if err
res.body.should.have.property('mediators')
should(res.body.mediators[mediator1.urn]).be.null()
done()