Skip to content

Commit

Permalink
fix(hci): cleaning up tests and gap service data handling
Browse files Browse the repository at this point in the history
  • Loading branch information
stoprocent committed Dec 30, 2024
1 parent 1fdf3ed commit 0387a52
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 40 deletions.
2 changes: 1 addition & 1 deletion lib/hci-socket/bindings.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ NobleBindings.prototype.onSigInt = function () {

// Disconnect all active connections
for (const handle in this._handles) {
if (this._handles.hasOwnProperty(handle)) {
if (Object.hasOwn(this._handles, handle)) {
this.disconnect(this._handles[handle]);
}
}
Expand Down
4 changes: 2 additions & 2 deletions lib/hci-socket/gap.js
Original file line number Diff line number Diff line change
Expand Up @@ -274,9 +274,9 @@ Gap.prototype.parseServices = function (
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: []
serviceSolicitationUuids: []
};

while (i + 1 < eir.length) {
const length = eir.readUInt8(i);

Expand Down
46 changes: 28 additions & 18 deletions test/lib/hci-socket/bindings.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ describe('hci-socket bindings', () => {

bindings.connect('112233445566', { addressType: 'public' });

should(bindings._pendingConnectionUuid).eql('112233445566');
should(bindings._connectionQueue).length(1);
should(bindings._connectionQueue[0].id).eql('112233445566');
should(bindings._connectionQueue[0].params).eql({ addressType: 'public' });

assert.calledOnce(bindings._hci.createLeConn);
assert.calledWith(bindings._hci.createLeConn, '11:22:33:44:55:66', 'public', { addressType: 'public' });
Expand All @@ -148,7 +150,9 @@ describe('hci-socket bindings', () => {

bindings.connect('f32233445566', { addressType: 'random' });

should(bindings._pendingConnectionUuid).eql('f32233445566');
should(bindings._connectionQueue).length(1);
should(bindings._connectionQueue[0].id).eql('f32233445566');
should(bindings._connectionQueue[0].params).eql({ addressType: 'random' });

assert.calledOnce(bindings._hci.createLeConn);
assert.calledWith(bindings._hci.createLeConn, 'f3:22:33:44:55:66', 'random', { addressType: 'random' });
Expand All @@ -165,7 +169,9 @@ describe('hci-socket bindings', () => {

bindings.connect('peripheralUuid', 'parameters');

should(bindings._pendingConnectionUuid).eql('peripheralUuid');
should(bindings._connectionQueue).length(1);
should(bindings._connectionQueue[0].id).eql('peripheralUuid');
should(bindings._connectionQueue[0].params).eql('parameters');

assert.calledOnce(bindings._hci.createLeConn);
assert.calledWith(bindings._hci.createLeConn, 'address', 'addressType', 'parameters');
Expand All @@ -175,8 +181,10 @@ describe('hci-socket bindings', () => {
bindings._pendingConnectionUuid = 'pending-uuid';

bindings.connect('peripheralUuid', 'parameters');

should(bindings._connectionQueue).deepEqual([{ id: 'peripheralUuid', params: 'parameters' }]);

should(bindings._connectionQueue).length(1);
should(bindings._connectionQueue[0].id).eql('peripheralUuid');
should(bindings._connectionQueue[0].params).eql('parameters');
});
});

Expand Down Expand Up @@ -641,7 +649,7 @@ describe('hci-socket bindings', () => {

const connectCallback = sinon.spy();

bindings._pendingConnectionUuid = 'pending_uuid';
bindings._connectionQueue.push({ id: 'pending_uuid' });
bindings.on('connect', connectCallback);
bindings.onLeConnComplete(status, handle, role, addressType, address);

Expand All @@ -651,7 +659,7 @@ describe('hci-socket bindings', () => {

assert.calledOnceWithMatch(connectCallback, 'pending_uuid', sinon.match({ message: 'custom mapper (0x1)' }));

should(bindings._pendingConnectionUuid).equal(null);
should(bindings._connectionQueue).length(0);
});

it('with unmapped status on master node', () => {
Expand All @@ -663,7 +671,7 @@ describe('hci-socket bindings', () => {

const connectCallback = sinon.spy();

bindings._pendingConnectionUuid = 'pending_uuid';
bindings._connectionQueue.push({ id: 'pending_uuid' });
bindings.on('connect', connectCallback);
bindings.onLeConnComplete(status, handle, role, addressType, address);

Expand All @@ -673,29 +681,31 @@ describe('hci-socket bindings', () => {

assert.calledOnceWithExactly(connectCallback, 'pending_uuid', sinon.match({ message: 'HCI Error: Unknown (0x2)' }));

should(bindings._pendingConnectionUuid).equal(null);
should(bindings._connectionQueue).length(0);
});

it('with connection queue', () => {
const status = 0;
const handle = 'handle';
const role = 0;
const addressType = 'addressType';
const address = 'address:split:by:separator';
const addressType = 'random';
const address = '11:22:33:44:55:66';

const connectCallback = sinon.spy();

bindings._connectionQueue = [{ id: 'queuedId', params: { p1: 'p1' } }];
bindings._addresses = { queuedId: 'queuedAddress' };
bindings._addresseTypes = { queuedId: 'queuedAddressType' };
bindings._addresses = { 'queuedId_1': '112233445566', 'queuedId_2': '998877665544' };
bindings._addresseTypes = { 'queuedId_1': 'random', 'queuedId_2': 'public' };
bindings.connect('queuedId_1', { addressType: 'random' });
bindings.connect('queuedId_2', { addressType: 'public' });

bindings.on('connect', connectCallback);
bindings.onLeConnComplete(status, handle, role, addressType, address);

assert.calledOnceWithExactly(connectCallback, 'addresssplitbyseparator', null);

assert.calledOnceWithExactly(createLeConnSpy, 'queuedAddress', 'queuedAddressType', { p1: 'p1' });
assert.calledOnceWithExactly(connectCallback, '112233445566', null);
assert.calledWithExactly(createLeConnSpy, '112233445566', 'random', { addressType: 'random' });
assert.calledWithExactly(createLeConnSpy, '998877665544', 'public', { addressType: 'public' });

should(bindings._pendingConnectionUuid).equal('queuedId');
should(bindings._connectionQueue).length(1);
});
});

Expand Down
21 changes: 2 additions & 19 deletions test/lib/hci-socket/gap.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: []
serviceSolicitationUuids: []
},
rssi,
count: 1,
Expand Down Expand Up @@ -375,7 +375,7 @@ describe('hci-socket gap', () => {
manufacturerData: 'manufacturerData',
serviceData: ['data'],
serviceUuids: ['uuids'],
solicitationServiceUuids: ['solicitation']
serviceSolicitationUuids: []
};
const count = 8;
const hasScanResponse = true;
Expand Down Expand Up @@ -473,7 +473,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -513,7 +512,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -553,7 +551,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -599,7 +596,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: ['201'],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -646,7 +642,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: ['0f0e0d0c0b0a09080706050403020100'],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -692,7 +687,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -738,7 +732,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -784,7 +777,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: ['201']
},
rssi,
Expand Down Expand Up @@ -830,7 +822,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: ['0f0e0d0c0b0a09080706050403020100']
},
rssi,
Expand Down Expand Up @@ -881,7 +872,6 @@ describe('hci-socket gap', () => {
}
],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -932,7 +922,6 @@ describe('hci-socket gap', () => {
}
],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -983,7 +972,6 @@ describe('hci-socket gap', () => {
}
],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -1029,7 +1017,6 @@ describe('hci-socket gap', () => {
manufacturerData: undefined,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: ['4030201']
},
rssi,
Expand Down Expand Up @@ -1074,7 +1061,6 @@ describe('hci-socket gap', () => {
manufacturerData,
serviceData: [],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -1137,7 +1123,6 @@ describe('hci-socket gap', () => {
}
],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -1186,7 +1171,6 @@ describe('hci-socket gap', () => {
}
],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down Expand Up @@ -1220,7 +1204,6 @@ describe('hci-socket gap', () => {
}
],
serviceUuids: [],
solicitationServiceUuids: [],
serviceSolicitationUuids: []
},
rssi,
Expand Down

0 comments on commit 0387a52

Please sign in to comment.