should = require 'should'
mock = require 'mock'
slaputils = require 'slaputils'
Broker = require '../src/broker'
describe 'Broker tests', ->
logger = null
broker = null
error = null
beforeEach ->
broker = new Broker()
broker.logger = {
info: ->
warn: ->
error: ->
}
logger = {
info: ->
warn: ->
error: ->
}
before ->
#todo config log properly
# slaputils.setLoggerOwner 'broker'
# logger = slaputils.getLogger 'broker'
# logger.configure {
# 'console-log': true
# 'console-level': 'debug'
# 'colorize': true
# 'file-log': false
# 'file-level': 'debug'
# 'file-filename': 'slap.log'
# 'http-log': false
# 'vm': ''
# 'auto-method': false
# }
it 'isValidAction method', (done) ->
request = null
result = broker._isValidAction request
result.should.be.false
request =
action: ''
result = broker._isValidAction request
result.should.be.false
request =
action: 'REGISTER'
result = broker._isValidAction request
result.should.be.true
request =
action: 'UNREGISTER'
result = broker._isValidAction request
result.should.be.true
done()
it 'isValidUnRegister method', (done) ->
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
result = broker._isValidUnRegister request
result.should.be.false
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
id: 'worker-423423423'
result = broker._isValidUnRegister request
result.should.be.true
done()
it 'isValidRegister method', (done) ->
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
result = broker._isValidRegister request
result.should.be.false
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
id: 'worker-423423423'
result = broker._isValidRegister request
result.should.be.true
done()
it 'isValidJob method', (done) ->
job = null
result = broker._isValidJob job
result.should.be.false
job = {}
result = broker._isValidJob job
result.should.be.false
job =
type: 'cacolas'
result = broker._isValidJob job
result.should.be.false
job =
type: 'cacolas'
id: 'asx'
result = broker._isValidJob job
result.should.be.true
done()
it 'isValidChannel method', (done) ->
channels = null
result = broker._isValidChannel channels
result.should.be.false
channels = []
result = broker._isValidChannel channels
result.should.be.false
channels = [{channel: 'loquesea'}]
result = broker._isValidChannel channels
result.should.be.true
done()
it 'onWorkerMessage method', (done) ->
channels = [{channel: 'channel1'}]
request =
action: "REGISTER"
id: "dmachancoses_worker_40"
role:"worker"
message:"Registrating worker dmachancoses_worker_40"
type:"OPT-ALG2"
broker.onWorkerMessage request, channels
broker.workerPool.should.not.be.empty
broker.workerPool.should.be.instanceof(Array).and.have.lengthOf(1)
worker = broker.workerPool[0]
worker.should.have.property('channel')
worker.should.have.property('idle', true)
worker.should.have.property('id', 'dmachancoses_worker_40')
channels = [{channel: 'channel2'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype2'
id: 'worker-2'
broker.onWorkerMessage request, channels
broker.workerPool.should.not.be.empty
broker.workerPool.should.be.instanceof(Array).and.have.lengthOf(2)
channels = [{channel: 'channel2'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype2'
id: 'worker-2'
broker.onWorkerMessage request, channels
broker.workerPool.should.not.be.empty
broker.workerPool.should.be.instanceof(Array).and.have.lengthOf(2)
request =
action: 'UNREGISTER'
role: 'role1'
type: 'algtype2'
id: 'worker-2'
broker.onWorkerMessage request, []
broker.workerPool.should.not.be.empty
broker.workerPool.should.be.instanceof(Array).and.have.lengthOf(1)
request =
action: 'BLABLA'
role: 'role1'
type: 'algtype2'
id: 'worker-2'
broker.onWorkerMessage request, []
broker.workerPool.should.not.be.empty
broker.workerPool.should.be.instanceof(Array).and.have.lengthOf(1)
request =
action: 'UNREGISTER'
role: 'role1'
type: 'algtype2'
id: 'dmachancoses_worker_40'
broker.onWorkerMessage request, []
broker.workerPool.should.be.empty
request =
role: 'role1'
type: 'algtype2'
id: 'worker-1'
broker.onWorkerMessage request, []
broker.workerPool.should.be.empty
done()
it 'isValidRequest method', (done) ->
request =
action: 'BLABLA'
role: 'role1'
type: 'algtype1'
id: 'worker-423423423'
result = broker._isValidRequest request
result.should.be.false
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
#id: 'worker-423423423'
result = broker._isValidRequest request
result.should.be.false
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
id: 'worker-423423423'
result = broker._isValidRequest request
result.should.be.false
channels = [{channel:'channel'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
id: 'worker-423423423'
result = broker._isValidRequest request, channels
result.should.be.true
request =
action: 'UNREGISTER'
role: 'role1'
type: 'algtype1'
#id: 'worker-423423423'
result = broker._isValidRequest request
result.should.be.false
request =
action: 'UNREGISTER'
id: 'worker-423423423'
result = broker._isValidRequest request
result.should.be.true
done()
it 'selectIdleWorkerByType method', (done) ->
channels = [{channel: 'channel1'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype1'
id: 'worker-1'
broker.onWorkerMessage request, channels
channels = [{channel: 'channel2'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype2'
id: 'worker-2'
broker.onWorkerMessage request, channels
channels = [{channel: 'channel3'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'algtype2'
id: 'worker-3'
broker.onWorkerMessage request, channels
worker = broker._selectWorkerByType 'algtype1', true
worker.should.not.be.null
worker.should.have.property('idle', true)
worker.should.have.property('id', 'worker-1')
worker = broker._selectWorkerByType 'algtype2', true
worker.should.not.be.null
worker.should.have.property('idle', true)
worker.should.have.property('id')
(worker.id in ['worker-2', 'worker-3']).should.be.true
worker = broker._selectWorkerByType 'algtype3', true
worker?.should.be.false
done()
it 'onJobRequest method', (done) ->
broker.workerPool = []
channels = [{channel: 'channel1'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'opt-alg1'
id: 'worker-1'
broker.onWorkerMessage request, channels
channels = [{channel: 'channel2'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'opt-alg2'
id: 'worker-2'
broker.onWorkerMessage request, channels
channels = [{channel: 'channel3'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'opt-alg2'
id: 'worker-3'
broker.onWorkerMessage request, channels
job =
type: 'opt-alg1'
id: 'job-3234234'
newworker = broker.onJobRequest job
newworker.should.not.be.null
newworker.should.have.property('id', 'worker-1')
newworker.should.have.property('idle', false)
done()
it 'onJobCompleted method', (done) ->
channels = [{channel: 'channel1'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'opt-alg1'
id: 'worker1'
broker.onWorkerMessage request, channels
channels = [{channel: 'channel2'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'opt-alg2'
id: 'worker2'
broker.onWorkerMessage request, channels
channels = [{channel: 'channel3'}]
request =
action: 'REGISTER'
role: 'role1'
type: 'opt-alg2'
id: 'worker3'
broker.onWorkerMessage request, channels
job =
type: 'opt-alg1'
id: '3'
broker.onJobRequest job
worker = broker.onJobCompleted job
worker.should.not.be.null
worker.should.have.property('id', 'worker1')
worker.should.have.property('idle', true)
done()