|  | // 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'); | 
|  | }); |