Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion src/sessionControlClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,15 @@ class SessionControlClient extends EventEmitter {
});
}

this.midInProcess = null;
if (this.midInProcess) {
let e = err || new Error("service unavailable");
let mid = this.midInProcess;
this.midInProcess = null;
process.nextTick(() => mid.doCallback(e));
} else {
this.midInProcess = null;
}

this.midQueue = [];

this.autoRevision = {};
Expand Down
82 changes: 81 additions & 1 deletion test/sessionControlClient.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,9 @@ describe("Session Control Client", () => {
done();
});

sessionControlClient.sendMid(1212);
sessionControlClient.sendMid(1212).catch(() => {
// Expected: close() rejects pending midInProcess
});
});

sessionControlClient.connect();
Expand Down Expand Up @@ -934,6 +936,82 @@ describe("Session Control Client", () => {
sessionControlClient.connect();
});

it("Should reject midInProcess callback on close", (done) => {

let step = 0;
let sessionControlClient;

let stream = createStreamHelper((data) => {
switch (step) {
case 0:
stream.push(Buffer.from("00570002001000000000010001020103Airbag1 \u0000"));
step += 1;
break;

case 1:
// Do not reply — simulate connection drop while MID is in process
sessionControlClient.close(new Error("connection lost"));
break;
}
});

sessionControlClient = new SessionControlClient({
stream: stream
});

sessionControlClient.on("error", err => {
// expected
});

sessionControlClient.on("connect", () => {
sessionControlClient.request("readTimeUpload", null, (err, data) => {
expect(err).to.be.an("error");
expect(err.message).to.be.equal("connection lost");
done();
});
});

sessionControlClient.connect();
});

it("Should reject midInProcess with default error when close is called without error", (done) => {

let step = 0;
let sessionControlClient;

let stream = createStreamHelper((data) => {
switch (step) {
case 0:
stream.push(Buffer.from("00570002001000000000010001020103Airbag1 \u0000"));
step += 1;
break;

case 1:
// Do not reply — close without specific error
sessionControlClient.close();
break;
}
});

sessionControlClient = new SessionControlClient({
stream: stream
});

sessionControlClient.on("error", err => {
// expected
});

sessionControlClient.on("connect", () => {
sessionControlClient.request("readTimeUpload", null, (err, data) => {
expect(err).to.be.an("error");
expect(err.message).to.be.equal("service unavailable");
done();
});
});

sessionControlClient.connect();
});

it("Should event data using sendMID() [MID 0080] - Test 05/02/2019", (done) => {

let step = 0;
Expand Down Expand Up @@ -976,6 +1054,8 @@ describe("Session Control Client", () => {

sessionControlClient.sendMid(80, {
revision: 1
}).catch(() => {
// Expected: close() rejects pending midInProcess
});
});

Expand Down