UNPKG

zigbee-herdsman

Version:

An open source ZigBee gateway solution with node.js.

431 lines (371 loc) 17.1 kB
import {Buffalo} from "../src/buffalo"; import {ieeeaAddr1, ieeeaAddr2} from "./testUtils"; describe("Buffalo", () => { it("is more", () => { const buffalo = new Buffalo(Buffer.from([0, 1, 2]), 1); expect(buffalo.getPosition()).toEqual(1); expect(buffalo.isMore()).toStrictEqual(true); buffalo.readUInt16(); expect(buffalo.isMore()).toStrictEqual(false); }); it("gets written", () => { const buffalo = new Buffalo(Buffer.alloc(3), 1); buffalo.writeUInt8(240); expect(buffalo.getWritten()).toStrictEqual(Buffer.from([0, 240])); }); it("UINT8 write", () => { const buffalo = new Buffalo(Buffer.alloc(3), 1); buffalo.writeUInt8(240); expect(buffalo.getPosition()).toEqual(2); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0xf0, 0x00])); }); it("UINT8 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x03, 0x00, 0x00]), 1); const value = buffalo.readUInt8(); expect(buffalo.getPosition()).toEqual(2); expect(value).toStrictEqual(3); }); it("INT8 write", () => { const buffalo = new Buffalo(Buffer.alloc(3), 1); buffalo.writeInt8(127); expect(buffalo.getPosition()).toEqual(2); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x7f, 0x00])); }); it("INT8 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0xf0, 0x00, 0x00]), 1); const value = buffalo.readInt8(); expect(buffalo.getPosition()).toEqual(2); expect(value).toStrictEqual(-16); }); it("INT16 write", () => { const buffalo = new Buffalo(Buffer.alloc(3), 1); buffalo.writeInt16(256); expect(buffalo.getPosition()).toEqual(3); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00, 0x01])); }); it("INT16 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0xff, 0xff, 0x00]), 1); const value = buffalo.readInt16(); expect(buffalo.getPosition()).toEqual(3); expect(value).toStrictEqual(-1); }); it("UINT16 write", () => { const buffalo = new Buffalo(Buffer.alloc(3), 1); buffalo.writeUInt16(1020); expect(buffalo.getPosition()).toEqual(3); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0xfc, 0x03])); }); it("UINT16 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x03, 0xff, 0x00]), 1); const value = buffalo.readUInt16(); expect(buffalo.getPosition()).toEqual(3); expect(value).toStrictEqual(65283); }); it("INT32 write", () => { const buffalo = new Buffalo(Buffer.alloc(6), 2); buffalo.writeInt32(1065283); expect(buffalo.getPosition()).toEqual(6); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00, 0x43, 0x41, 0x10, 0x00])); }); it("INT32 read", () => { const buffalo = new Buffalo(Buffer.from([0x01, 0x03, 0xff, 0xff])); const value = buffalo.readInt32(); expect(buffalo.getPosition()).toEqual(4); expect(value).toStrictEqual(-64767); }); it("UINT32 write", () => { const buffalo = new Buffalo(Buffer.alloc(6), 2); buffalo.writeUInt32(1065283); expect(buffalo.getPosition()).toEqual(6); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00, 0x43, 0x41, 0x10, 0x00])); }); it("UINT32 read", () => { const buffalo = new Buffalo(Buffer.from([0x01, 0x03, 0xff, 0xff])); const value = buffalo.readUInt32(); expect(buffalo.getPosition()).toEqual(4); expect(value).toStrictEqual(4294902529); }); it("INT40 write", () => { const buffalo = new Buffalo(Buffer.alloc(7), 2); buffalo.writeInt40(21542142465); expect(buffalo.getPosition()).toEqual(7); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 1, 2, 3, 4, 5])); }); it("INT40 read", () => { const buffalo = new Buffalo(Buffer.from([1, 2, 3, 4, 5])); const value = buffalo.readInt40(); expect(buffalo.getPosition()).toEqual(5); expect(value).toStrictEqual(21542142465); }); it("UINT40 write", () => { const buffalo = new Buffalo(Buffer.alloc(7), 2); buffalo.writeUInt40(21542142465); expect(buffalo.getPosition()).toEqual(7); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 1, 2, 3, 4, 5])); }); it("UINT40 read", () => { const buffalo = new Buffalo(Buffer.from([1, 2, 3, 4, 5])); const value = buffalo.readUInt40(); expect(buffalo.getPosition()).toEqual(5); expect(value).toStrictEqual(21542142465); }); it("INT48 write", () => { const buffalo = new Buffalo(Buffer.alloc(8), 2); buffalo.writeInt48(6618611909121); expect(buffalo.getPosition()).toEqual(8); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 1, 2, 3, 4, 5, 6])); }); it("INT48 read", () => { const buffalo = new Buffalo(Buffer.from([1, 2, 3, 4, 5, 6])); const value = buffalo.readInt48(); expect(buffalo.getPosition()).toEqual(6); expect(value).toStrictEqual(6618611909121); }); it("UINT48 write", () => { const buffalo = new Buffalo(Buffer.alloc(8), 2); buffalo.writeUInt48(6618611909121); expect(buffalo.getPosition()).toEqual(8); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 1, 2, 3, 4, 5, 6])); }); it("UINT48 read", () => { const buffalo = new Buffalo(Buffer.from([1, 2, 3, 4, 5, 6])); const value = buffalo.readUInt48(); expect(buffalo.getPosition()).toEqual(6); expect(value).toStrictEqual(6618611909121); }); it("UINT56 write", () => { const buffalo = new Buffalo(Buffer.alloc(9), 2); buffalo.writeUInt56(72057594037927934n); expect(buffalo.getPosition()).toEqual(9); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 254, 255, 255, 255, 255, 255, 255])); }); it("UINT56 read", () => { const buffalo = new Buffalo(Buffer.from([254, 255, 255, 255, 255, 255, 255])); const value = buffalo.readUInt56(); expect(buffalo.getPosition()).toEqual(7); expect(value).toStrictEqual(72057594037927934n); }); it.each([ [36028797018963964n, [0, 0, 252, 255, 255, 255, 255, 255, 127]], [-36028797018963964n, [0, 0, 4, 0, 0, 0, 0, 0, 128]], ])("INT56 write", (value: bigint, expectedValues: number[]) => { const buffalo = new Buffalo(Buffer.alloc(9), 2); buffalo.writeInt56(value); expect(buffalo.getPosition()).toEqual(9); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from(expectedValues)); }); it.each([ [36028797018963964n, [252, 255, 255, 255, 255, 255, 127]], [-36028797018963964n, [4, 0, 0, 0, 0, 0, 128]], ])("INT56 read", (expectedValue: bigint, values: number[]) => { const buffalo = new Buffalo(Buffer.from(values)); const value = buffalo.readInt56(); expect(buffalo.getPosition()).toEqual(7); expect(value).toStrictEqual(expectedValue); }); it("UINT64 write", () => { const buffalo = new Buffalo(Buffer.alloc(10), 2); buffalo.writeUInt64(18446744073709551613n); expect(buffalo.getPosition()).toEqual(10); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 253, 255, 255, 255, 255, 255, 255, 255])); }); it("UINT64 read", () => { const buffalo = new Buffalo(Buffer.from([253, 255, 255, 255, 255, 255, 255, 255])); const value = buffalo.readUInt64(); expect(buffalo.getPosition()).toEqual(8); expect(value).toStrictEqual(18446744073709551613n); }); it("INT64 write", () => { const buffalo = new Buffalo(Buffer.alloc(10), 2); buffalo.writeInt64(9223372036854775806n); expect(buffalo.getPosition()).toEqual(10); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0, 0, 254, 255, 255, 255, 255, 255, 255, 127])); }); it("INT64 read", () => { const buffalo = new Buffalo(Buffer.from([254, 255, 255, 255, 255, 255, 255, 127])); const value = buffalo.readInt64(); expect(buffalo.getPosition()).toEqual(8); expect(value).toStrictEqual(9223372036854775806n); }); it("IEEEADDR write", () => { const buffalo = new Buffalo(Buffer.alloc(8)); buffalo.writeIeeeAddr(ieeeaAddr1.string); expect(buffalo.getPosition()).toEqual(8); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from(ieeeaAddr1.hex)); }); it("IEEEADDR read", () => { const buffalo = new Buffalo(Buffer.from(ieeeaAddr2.hex)); const value = buffalo.readIeeeAddr(); expect(buffalo.getPosition()).toEqual(8); expect(value).toStrictEqual(ieeeaAddr2.string); }); it("BUFFER write", () => { const buffalo = new Buffalo(Buffer.alloc(5), 1); const payload = Buffer.from([0x00, 0x01, 0x02]); buffalo.writeBuffer(payload, payload.length); expect(buffalo.getPosition()).toEqual(4); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, ...payload, 0x00])); }); it("BUFFER write as array", () => { const buffalo = new Buffalo(Buffer.alloc(5), 1); const payload = [0x00, 0x01, 0x02]; buffalo.writeBuffer(payload, payload.length); expect(buffalo.getPosition()).toEqual(4); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, ...payload, 0x00])); }); it("BUFFER read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]), 2); const value = buffalo.readBuffer(5); expect(buffalo.getPosition()).toEqual(7); expect(value).toStrictEqual(Buffer.from([0x02, 0x03, 0x04, 0x05, 0x06])); }); it("LIST_UINT8 write", () => { const buffalo = new Buffalo(Buffer.alloc(4), 1); const payload = [200, 100]; buffalo.writeListUInt8(payload); expect(buffalo.getPosition()).toStrictEqual(3); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0xc8, 0x64, 0x00])); }); it("LIST_UINT8 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x00, 0x04, 0x08]), 2); const value = buffalo.readListUInt8(2); expect(buffalo.getPosition()).toStrictEqual(4); expect(value).toStrictEqual([4, 8]); }); it("LIST_UINT16 write", () => { const buffalo = new Buffalo(Buffer.alloc(5), 1); const payload = [1024, 2048]; buffalo.writeListUInt16(payload); expect(buffalo.getPosition()).toStrictEqual(5); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00, 0x04, 0x00, 0x08])); }); it("LIST_UINT16 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x00, 0x04, 0x00, 0x08]), 1); const value = buffalo.readListUInt16(2); expect(buffalo.getPosition()).toStrictEqual(5); expect(value).toStrictEqual([1024, 2048]); }); it("LIST_UINT24 write", () => { const buffalo = new Buffalo(Buffer.alloc(8), 1); const payload = [100000, 110110]; buffalo.writeListUInt24(payload); expect(buffalo.getPosition()).toStrictEqual(7); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0xa0, 0x86, 0x01, 0x1e, 0xae, 0x01, 0x00])); }); it("LIST_UINT24 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0xa0, 0x86, 0x01, 0x1e, 0xae, 0x01, 0x00]), 1); const value = buffalo.readListUInt24(2); expect(buffalo.getPosition()).toStrictEqual(7); expect(value).toStrictEqual([100000, 110110]); }); it("LIST_UINT32 write", () => { const buffalo = new Buffalo(Buffer.alloc(8)); const payload = [4294967295, 10]; buffalo.writeListUInt32(payload); expect(buffalo.getPosition()).toStrictEqual(8); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00])); }); it("LIST_UINT32 read", () => { const buffalo = new Buffalo(Buffer.from([0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00])); const value = buffalo.readListUInt32(2); expect(buffalo.getPosition()).toStrictEqual(8); expect(value).toStrictEqual([4294967295, 10]); }); it("UINT24 write", () => { const buffalo = new Buffalo(Buffer.alloc(4), 1); const payload = 16777200; buffalo.writeUInt24(payload); expect(buffalo.getPosition()).toStrictEqual(4); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0xf0, 0xff, 0xff])); }); it("UINT24 read", () => { const buffalo = new Buffalo(Buffer.from([0x01, 0xa0, 0x86, 0x01, 0x02]), 1); const value = buffalo.readUInt24(); expect(buffalo.getPosition()).toStrictEqual(4); expect(value).toStrictEqual(100000); }); it("INT24 write +", () => { const buffalo = new Buffalo(Buffer.alloc(3)); buffalo.writeInt24(65536); expect(buffalo.getPosition()).toStrictEqual(3); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00, 0x01])); }); it("INT24 read +", () => { const buffalo = new Buffalo(Buffer.from([0x7f, 0xff, 0xff, 0x7f]), 1); const value = buffalo.readInt24(); expect(buffalo.getPosition()).toStrictEqual(4); expect(value).toStrictEqual(8388607); }); it("INT24 write -", () => { const buffalo = new Buffalo(Buffer.alloc(3)); buffalo.writeInt24(-65536); expect(buffalo.getPosition()).toStrictEqual(3); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x00, 0xff])); }); it("INT24 read -", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x00, 0xff])); const value = buffalo.readInt24(); expect(buffalo.getPosition()).toStrictEqual(3); expect(value).toStrictEqual(-65536); }); it("INT32 write", () => { const buffalo = new Buffalo(Buffer.alloc(4)); buffalo.writeInt32(2147483647); expect(buffalo.getPosition()).toStrictEqual(4); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0xff, 0xff, 0xff, 0x7f])); }); it("INT32 read", () => { const buffalo = new Buffalo(Buffer.from([0x08, 0xff, 0x03, 0xff])); const value = buffalo.readInt32(); expect(buffalo.getPosition()).toStrictEqual(4); expect(value).toStrictEqual(-16515320); }); it("INT48 write", () => { const buffalo = new Buffalo(Buffer.alloc(6)); buffalo.writeInt48(-1082348273920); expect(buffalo.getPosition()).toStrictEqual(6); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0xff, 0x03, 0xff, 0x03, 0xff])); }); it("INT48 read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0xff, 0x03, 0xff, 0x03, 0xff])); const value = buffalo.readInt48(); expect(buffalo.getPosition()).toStrictEqual(6); expect(value).toStrictEqual(-1082348273920); }); it("FLOATLE write", () => { const buffalo = new Buffalo(Buffer.alloc(4)); buffalo.writeFloatLE(400.5); expect(buffalo.getPosition()).toStrictEqual(4); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x00, 0x40, 0xc8, 0x43])); }); it("FLOATLE read", () => { const buffalo = new Buffalo(Buffer.from([0x00, 0x40, 0xc8, 0x43])); const value = buffalo.readFloatLE(); expect(buffalo.getPosition()).toStrictEqual(4); expect(value).toStrictEqual(400.5); }); it("DOUBLELE write", () => { const buffalo = new Buffalo(Buffer.alloc(8)); buffalo.writeDoubleLE(809880.6); expect(buffalo.getPosition()).toStrictEqual(8); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x33, 0x33, 0x33, 0x33, 0x31, 0xb7, 0x28, 0x41])); }); it("DOUBLELE read", () => { const buffalo = new Buffalo(Buffer.from([0x33, 0x33, 0x33, 0x33, 0x31, 0xb7, 0x28, 0x41]), 0); const value = buffalo.readDoubleLE(); expect(buffalo.getPosition()).toStrictEqual(8); expect(value).toStrictEqual(809880.6); }); it("UTF8 STRING write", () => { const buffalo = new Buffalo(Buffer.alloc(4)); buffalo.writeUtf8String("abcd"); expect(buffalo.getPosition()).toStrictEqual(4); expect(buffalo.getBuffer()).toStrictEqual(Buffer.from([0x61, 0x62, 0x63, 0x64])); }); it("UTF8 STRING read", () => { const buffalo = new Buffalo(Buffer.from([0x61, 0x62, 0x63, 0x64]), 0); const value = buffalo.readUtf8String(4); expect(buffalo.getPosition()).toStrictEqual(4); expect(value).toStrictEqual("abcd"); }); });