blob: b399e2578eca826336ba2da47152d7f4ec5060a6 [file] [log] [blame]
// Copyright 2022 The Pigweed Authors
//
// 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
//
// https://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.
/* eslint-env browser */
import {
PacketType,
RpcPacket,
} from 'pigweedjs/protos/pw_rpc/internal/packet_pb';
import {Status} from 'pigweedjs/pw_status';
import * as packets from './packets';
function addTestData(packet: RpcPacket) {
const payload = new RpcPacket();
payload.setStatus(321);
packet.setChannelId(1);
packet.setServiceId(2);
packet.setMethodId(3);
packet.setPayload(payload.serializeBinary());
}
describe('Packets', () => {
beforeEach(() => { });
it('encodeRequest sets packet fields', () => {
const goldenRequest = new RpcPacket();
goldenRequest.setType(PacketType.REQUEST);
addTestData(goldenRequest);
const dataPacket = new RpcPacket();
dataPacket.setStatus(321);
const data = packets.encodeRequest([1, 2, 3], dataPacket);
const packet = RpcPacket.deserializeBinary(data);
expect(packet.toObject()).toEqual(goldenRequest.toObject());
});
it('encodeResponse sets packet fields', () => {
const goldenResponse = new RpcPacket();
goldenResponse.setType(PacketType.RESPONSE);
addTestData(goldenResponse);
const dataPacket = new RpcPacket();
dataPacket.setStatus(321);
const data = packets.encodeResponse([1, 2, 3], dataPacket);
const packet = RpcPacket.deserializeBinary(data);
expect(packet.toObject()).toEqual(goldenResponse.toObject());
});
it('encodesClientError sets packet fields', () => {
const packet = new RpcPacket();
packet.setType(PacketType.REQUEST);
addTestData(packet);
const data = packets.encodeClientError(packet, Status.NOT_FOUND);
const errorPacket = RpcPacket.deserializeBinary(data);
const golden = new RpcPacket();
golden.setType(PacketType.CLIENT_ERROR);
golden.setChannelId(1);
golden.setServiceId(2);
golden.setMethodId(3);
golden.setStatus(Status.NOT_FOUND);
expect(errorPacket.toObject()).toEqual(golden.toObject());
});
it('encodeCancel sets packet fields', () => {
const goldenCancel = new RpcPacket();
goldenCancel.setType(PacketType.CLIENT_ERROR);
goldenCancel.setStatus(Status.CANCELLED);
goldenCancel.setChannelId(1);
goldenCancel.setServiceId(2);
goldenCancel.setMethodId(3);
const data = packets.encodeCancel([1, 2, 3]);
const packet = RpcPacket.deserializeBinary(data);
expect(packet.toObject()).toEqual(goldenCancel.toObject());
});
it('decode with serialized request returns request', () => {
const request = new RpcPacket();
request.setType(PacketType.REQUEST);
addTestData(request);
expect(request.toObject()).toEqual(
packets.decode(request.serializeBinary()).toObject()
);
});
it('forServer correctly handles RESPONSE and REQUEST types', () => {
const request = new RpcPacket();
request.setType(PacketType.REQUEST);
const response = new RpcPacket();
response.setType(PacketType.RESPONSE);
expect(packets.forServer(request)).toBe(true);
expect(packets.forServer(response)).toBe(false);
});
});