https://github.com/t-mullen/twintap
airtap for pairwise interoperability testing
https://github.com/t-mullen/twintap
tape testing webrtc
Last synced: 3 months ago
JSON representation
airtap for pairwise interoperability testing
- Host: GitHub
- URL: https://github.com/t-mullen/twintap
- Owner: t-mullen
- License: mit
- Created: 2019-12-14T21:16:50.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-09-10T23:28:37.000Z (almost 6 years ago)
- Last Synced: 2025-10-10T18:17:57.166Z (9 months ago)
- Topics: tape, testing, webrtc
- Language: JavaScript
- Size: 84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# twintap
[`airtap`](https://github.com/airtap/airtap) for pairwise interoperability testing. Designed for WebRTC compatibility testing.
## Install
```
npm install -g twintap
```
## Usage
Write tests like [`tape`](https://github.com/substack/tape), except use `twintap/tape` and pass an array of two test functions.
```javascript
const test = require('twintap/tape')
test('test name', [
(t) => {
// test A-side of connection
t.pass()
t.end()
},
(t) => {
// test B-side of connection
t.pass()
t.end()
}])
```
Setup a `.twintap.yml` or `.airtap.yml`.
Run your tests:
In Saucelabs: `twintap test/*.js`
With local browsers: `twintap --local test/*.js`
## Synchronization
The sync server allows synchronizing peers with simple barriers.
```javascript
test('test name', [
async (t) => {
// test WebRTC, Websockets, etc
await t.barrier('first barrier') // will not resolve until all peers have reached this point
t.send('A', 'test data') // send events
t.end()
},
async (t) => {
// test WebRTC, Websockets, etc
await t.barrier('first barrier') // will not resolve untill all peers have reached this point
t.receive('A', (data) => {
t.end()
})
}
])
```
A barrier is automatically inserted before each test to ensure tests do not overlap.
## Symmetrical Tests
If both sides of the test are identical, just pass one function instead of duplicating code.
```javascript
test('test name',
async (t) => {
// test WebRTC, Websockets, etc
await t.barrier('first barrier') // will not resolve until all peers have reached this point
t.send('A', 'test data') // send events
t.end()
})
```
## API
`twintap/tape` exposes all the features of `tape`, plus...
### `await t.barrier(name, [timeout])`
Wait until the other peer has also reached this barrier.
- `name` is a string unique to the test case.
- Optional `timeout` is the time to wait in milliseconds. Defaults to `30000`.
### `t.send(eventName, [data])`
Send an event with serializable data to the other peer.
- `eventName` is the name of the event for the other peer to listen to.
- Optional `data` is any serializable data to send.
### `t.receive(eventName, (data) => {})`
Wait for an event from the other peer. Callback is passed any deserialized data sent.
- `eventName` is the name of the even to wait for.
### `t.instance`
`0` or `1` depending on which side the test is running on. Useful for tests that are nearly symmetrical.
## Saucelabs
`twintap` suports [SauceLabs](https://saucelabs.com/), just like `airtap`. It requires [Sauce Connect](https://wiki.saucelabs.com/display/DOCS/Basic+Sauce+Connect+Proxy+Setup).
```
./sc -u -k --no-ssl-bump-domains airtap.local
```