fox-wamp
Version:
Web Application Message Router/Server WAMP/MQTT
111 lines (92 loc) • 3.29 kB
JavaScript
import chai, { expect } from 'chai'
import spies from 'chai-spies'
chai.use(spies)
import Router from '../lib/router'
import { StageOneTask, StageTwoTask } from '../lib/masterfree/synchronizer'
import { Event } from '../lib/masterfree/hyper.h'
describe('62.synchronizer', function () {
let
draftStack,
extractStack,
resolvedStack,
api,
router,
sysRealm,
stageOne,
stageTwo
beforeEach(async () => {
draftStack = []
extractStack = []
resolvedStack = []
router = new Router()
router.setId('sync1')
sysRealm = await router.getRealm('sys')
api = sysRealm.buildApi()
const MAJOR_LIMIT = 2
stageOne = new StageOneTask(sysRealm, MAJOR_LIMIT)
stageOne.reconcilePos('PREFIX1:')
stageTwo = new StageTwoTask(sysRealm, MAJOR_LIMIT)
await api.subscribe(Event.PICK_CHALLENGER, (event, opt) => {
console.log('PICK_CHALLENGER', event, opt.headers)
draftStack.push(event)
})
await api.subscribe(Event.ELECT_SEGMENT, (event, opt) => { extractStack.push(event) })
// stage two
await api.subscribe(Event.ADVANCE_SEGMENT_RESOLVED, (event, opt) => {
console.log('ADVANCE_SEGMENT_RESOLVED', event, opt.headers)
resolvedStack.push(event)
})
})
afterEach(async () => {})
it('init-seed generateOnce', async () => {
await api.publish(Event.GENERATE_DRAFT, {advanceOwner:'entry1', advanceSegment:'a0'})
await api.publish(Event.GENERATE_DRAFT, {advanceOwner:'entry1', advanceSegment:'a0'})
await api.publish(Event.GENERATE_DRAFT, {advanceOwner:'entry1', advanceSegment:'a1'})
await api.publish(Event.GENERATE_DRAFT, {advanceOwner:'entry2', advanceSegment:'a0'})
expect(draftStack).deep.equal([
{
advanceOwner: 'entry1',
advanceSegment: 'a0',
draftId: { dt: 'PREFIX1:', id: 1 },
draftOwner: 'sync1'
},
{
advanceOwner: 'entry1',
advanceSegment: 'a1',
draftId: { dt: 'PREFIX1:', id: 2 },
draftOwner: 'sync1'
},
{
advanceOwner: 'entry2',
advanceSegment: 'a0',
draftId: { dt: 'PREFIX1:', id: 3 },
draftOwner: 'sync1'
}]
)
expect(stageOne.getRecentValue()).deep.equal('')
expect(extractStack).deep.equal([])
})
it('stage-one extractDraft', async () => {
expect(stageOne.getRecentValue()).deep.equal('')
stageOne.setRecentValue('P:1')
await api.publish(Event.GENERATE_DRAFT, {advanceOwner:'entry1', advanceSegment:'a1'})
await api.publish(Event.GENERATE_DRAFT, {advanceOwner:'entry1', advanceSegment:'a2'})
await api.publish(Event.PICK_CHALLENGER, {advanceOwner: 'entry1', advanceSegment: 'a1', draftOwner: 'sync2', draftId: { dt: 'PREFIX1:', id: 2 }})
await api.publish(Event.PICK_CHALLENGER, {advanceOwner: 'entry1', advanceSegment: 'a2', draftOwner: 'sync2', draftId: { dt: 'PREFIX1:', id: 3 }})
expect(extractStack).deep.equal([
{
advanceOwner: "entry1",
advanceSegment: "a1",
challenger: "PREFIX1:a1"
},
{
advanceOwner: "entry1",
advanceSegment: "a2",
challenger: "PREFIX1:a2"
}
])
expect(stageOne.getRecentValue()).equal('PREFIX1:a2')
})
it('stage-two resolve', async () => {
})
})