| // Copyright (C) 2019 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| import {TextEncoder} from 'util'; |
| |
| import { |
| AdbMsgImpl, |
| AdbOverWebUsb, |
| AdbState, |
| DEFAULT_MAX_PAYLOAD_BYTES, |
| VERSION_WITH_CHECKSUM, |
| } from './adb'; |
| |
| test('startAuthentication', async () => { |
| const adb = new AdbOverWebUsb(); |
| |
| const sendRaw = jest.fn(); |
| adb.sendRaw = sendRaw; |
| const recvRaw = jest.fn(); |
| adb.recvRaw = recvRaw; |
| |
| const expectedAuthMessage = AdbMsgImpl.create({ |
| cmd: 'CNXN', |
| arg0: VERSION_WITH_CHECKSUM, |
| arg1: DEFAULT_MAX_PAYLOAD_BYTES, |
| data: 'host:1:UsbADB', |
| useChecksum: true, |
| }); |
| await adb.startAuthentication(); |
| |
| expect(sendRaw).toHaveBeenCalledTimes(2); |
| expect(sendRaw).toBeCalledWith(expectedAuthMessage.encodeHeader()); |
| expect(sendRaw).toBeCalledWith(expectedAuthMessage.data); |
| }); |
| |
| test('connectedMessage', async () => { |
| const adb = new AdbOverWebUsb(); |
| adb.key = {} as unknown as CryptoKeyPair; |
| adb.state = AdbState.AUTH_STEP2; |
| |
| const onConnected = jest.fn(); |
| adb.onConnected = onConnected; |
| |
| const expectedMaxPayload = 42; |
| const connectedMsg = AdbMsgImpl.create({ |
| cmd: 'CNXN', |
| arg0: VERSION_WITH_CHECKSUM, |
| arg1: expectedMaxPayload, |
| data: new TextEncoder().encode('device'), |
| useChecksum: true, |
| }); |
| await adb.onMessage(connectedMsg); |
| |
| expect(adb.state).toBe(AdbState.CONNECTED); |
| expect(adb.maxPayload).toBe(expectedMaxPayload); |
| expect(adb.devProps).toBe('device'); |
| expect(adb.useChecksum).toBe(true); |
| expect(onConnected).toHaveBeenCalledTimes(1); |
| }); |
| |
| test('shellOpening', () => { |
| const adb = new AdbOverWebUsb(); |
| const openStream = jest.fn(); |
| adb.openStream = openStream; |
| |
| adb.shell('test'); |
| expect(openStream).toBeCalledWith('shell:test'); |
| }); |