Unit test for a race condition in Device.js / disconnect()#78
Open
nmasse-itix wants to merge 3 commits intochrvadala:mainfrom
Open
Unit test for a race condition in Device.js / disconnect()#78nmasse-itix wants to merge 3 commits intochrvadala:mainfrom
nmasse-itix wants to merge 3 commits intochrvadala:mainfrom
Conversation
Contributor
Author
|
In the GitHub Actions, the unit tests are failing as expected. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This Pull Request is a proposal for a unit test exhibiting the behavior described in #73.
To implement this unit test, I had to replace in the actual code the call to
removeListenerswith a call toremoveAllListeners.In the unit tests, the EventEmitter implementation from nodejs is used as-is (no mock). But the
removeListenersmethod is not part of that implementation. OnlyremoveAllListenersis is officially part of the EventEmitter class (documentation).With the following patch, the unit test is passing.
/** * Connect to remote device */ async connect () { const cb = (propertiesChanged) => { if ('Connected' in propertiesChanged) { const { value } = propertiesChanged.Connected if (value) { this.emit('connect', { connected: true }) } else { this.emit('disconnect', { connected: false }) + this.helper.removeAllListeners() } } } this.helper.on('PropertiesChanged', cb) await this.helper.callMethod('Connect') } /** * Disconnect remote device */ async disconnect () { await this.helper.callMethod('Disconnect') - this.helper.removeAllListeners() }