Skip to content

Commit a8aae16

Browse files
author
node9
committed
Add tests to ensure FIFO order
1 parent a2d6495 commit a8aae16

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "concurrency-queue",
3-
"version": "1.0.8",
3+
"version": "1.0.10",
44
"description": "A lightweight, concurrency-throttled FIFO queue",
55
"keywords": "concurrency-queue, concurrency, queue, FIFO, throttling",
66
"main": "index.js",

test/test-concurrency-queue.js

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22
var should = require('chai').should();
3-
var throttledQueue = require('../index.js');
3+
var concurrencyQueue = require('../index.js');
44

55
var job1 = {name: 'job1', 'val' : 4};
66
var job2 = {name: 'job2', 'val' : 5};
@@ -36,7 +36,7 @@ describe('Concurrency-Queue', function() {
3636
});
3737

3838
it("should fire a 'ready' event when adding jobs till maxConcurrency is reached", function() {
39-
cQ = throttledQueue.createInstance(options);
39+
cQ = concurrencyQueue.createInstance(options);
4040
cQ.push(job1);
4141
result.onReady.should.not.equal(undefined);
4242
result.onReady[0].should.equal(job1);
@@ -51,7 +51,7 @@ describe('Concurrency-Queue', function() {
5151
result.onReady[2].should.deep.equal({ maxConcurrency: 3, processing: 2, queued: 0 });
5252
});
5353
it("should fire a 'queued' event when maxConcurrency reached", function() {
54-
cQ = throttledQueue.createInstance(options);
54+
cQ = concurrencyQueue.createInstance(options);
5555
cQ.push(job1);
5656
cQ.push(job2);
5757
cQ.push(job3);
@@ -67,7 +67,7 @@ describe('Concurrency-Queue', function() {
6767
result.onQueued[2].should.deep.equal({ maxConcurrency: 3, processing: 3, queued: 2 });
6868
});
6969
it("should fire a 'ready' event and release a queued job when drained", function() {
70-
cQ = throttledQueue.createInstance(options);
70+
cQ = concurrencyQueue.createInstance(options);
7171
cQ.push(job1);
7272
var jobId2 = cQ.push(job2);
7373
cQ.push(job3);
@@ -81,7 +81,7 @@ describe('Concurrency-Queue', function() {
8181
});
8282
it("should fire a 'drained' event and and 'empty' event when completely drained", function() {
8383
options.maxConcurrency = 2;
84-
cQ = throttledQueue.createInstance(options);
84+
cQ = concurrencyQueue.createInstance(options);
8585
var jobId1 = cQ.push(job1);
8686
var jobId2 = cQ.push(job2);
8787
cQ.drain(jobId1);
@@ -94,6 +94,27 @@ describe('Concurrency-Queue', function() {
9494
should.not.exist(result.onEmpty[1]);
9595
result.onEmpty[2].should.deep.equal({ maxConcurrency: 2, processing: 0, queued: 0 })
9696
});
97+
it("should release entries in the queue following the FIFO rule", function() {
98+
options.maxConcurrency = 2;
99+
cQ = concurrencyQueue.createInstance(options);
100+
var jobId1 = cQ.push(job1);
101+
result.onReady[0].should.equal(job1);
102+
result.onReady[2].should.deep.equal({ maxConcurrency: 2, processing: 1, queued: 0});
103+
var jobId2 = cQ.push(job2);
104+
var jobId3 = cQ.push(job3);
105+
var jobId4 = cQ.push(job4);
106+
result.onQueued[0].should.equal(job4);
107+
result.onQueued[2].should.deep.equal({ maxConcurrency: 2, processing: 2, queued: 2});
108+
//drain out of order should still maintain input sequence
109+
cQ.drain(jobId2);
110+
result.onReady[0].should.equal(job3);
111+
result.onReady[2].should.deep.equal({ maxConcurrency: 2, processing: 2, queued: 1});
112+
cQ.drain(jobId1);
113+
result.onReady[0].should.equal(job4);
114+
result.onReady[2].should.deep.equal({ maxConcurrency: 2, processing: 2, queued: 0});
115+
116+
});
117+
97118
});
98119
});
99120

0 commit comments

Comments
 (0)