dlms-protocol
Version:
DLMS Protocol parser for JavaScript
116 lines (98 loc) • 4.76 kB
JavaScript
import GetRequest from "../src/messages/GetRequest";
import MessageType from "../src/enum/MessageType";
describe("GetRequest class", () => {
const mockCosemAddress = {
classId: [0x00, 0x01],
instanceId: [0x00, 0x02, 0x03, 0x04, 0x05, 0x06],
attributeId: [0x01],
};
const mockDlmsData = {
rawValue: [0x12, 0x34, 0x56],
};
test("should initialize with default values when no parameters are provided", () => {
const getRequest = new GetRequest();
expect(getRequest.setType).toBe(0x01);
expect(getRequest.invokeIdAndPriority).toBe(0);
expect(getRequest.cosemClassId).toEqual([0, 0]);
expect(getRequest.cosemObjectInstanceId).toEqual([0, 0, 0, 0, 0, 0]);
expect(getRequest.cosemObjectAttributeId).toEqual([0]);
expect(getRequest.methodInvocationParameters).toBe(0);
expect(getRequest.dlmsData).toBeNull();
expect(getRequest.value).toEqual([]);
expect(getRequest.parameters).toEqual([]);
});
test("should correctly set data with insertData using dlmsData", () => {
const getRequest = new GetRequest(mockCosemAddress, mockDlmsData);
expect(getRequest.invokeIdAndPriority).toBeGreaterThanOrEqual(0xC1);
expect(getRequest.invokeIdAndPriority).toBeLessThanOrEqual(0xCF);
expect(getRequest.cosemClassId).toEqual(mockCosemAddress.classId);
expect(getRequest.cosemObjectInstanceId).toEqual(mockCosemAddress.instanceId);
expect(getRequest.cosemObjectAttributeId).toEqual(mockCosemAddress.attributeId);
expect(getRequest.methodInvocationParameters).toBe(1);
expect(getRequest.dlmsData).toEqual(mockDlmsData);
});
test("should correctly set data with insertData using parameters", () => {
const hexString = "123456";
const getRequest = new GetRequest(mockCosemAddress, null, hexString);
expect(getRequest.invokeIdAndPriority).toBeGreaterThanOrEqual(0xC1);
expect(getRequest.invokeIdAndPriority).toBeLessThanOrEqual(0xCF);
expect(getRequest.cosemClassId).toEqual(mockCosemAddress.classId);
expect(getRequest.cosemObjectInstanceId).toEqual(mockCosemAddress.instanceId);
expect(getRequest.cosemObjectAttributeId).toEqual(mockCosemAddress.attributeId);
expect(getRequest.methodInvocationParameters).toBe(1);
expect(getRequest.parameters).toEqual([0x12, 0x34, 0x56]);
});
test("should return the correct byte array with getBytes (without relay)", () => {
const getRequest = new GetRequest(mockCosemAddress, mockDlmsData);
const result = getRequest.getBytes();
expect(result).toEqual([
MessageType.GET_REQUEST,
0x01, // setType
getRequest.invokeIdAndPriority,
...mockCosemAddress.classId,
...mockCosemAddress.instanceId,
...mockCosemAddress.attributeId,
0x01, // methodInvocationParameters
...mockDlmsData.rawValue,
]);
});
test("should return the correct byte array with getBytes (with relay)", () => {
const getRequest = new GetRequest(mockCosemAddress, mockDlmsData);
const result = getRequest.getBytes(true); // Relay enabled
expect(result).toEqual([
MessageType.GET_REQUEST,
0x01, // setType
getRequest.invokeIdAndPriority,
...mockCosemAddress.classId,
...mockCosemAddress.instanceId,
...mockCosemAddress.attributeId,
0x01, // methodInvocationParameters
0x87, // Relay additional byte
...mockDlmsData.rawValue,
]);
});
test("should return the correct hexadecimal string with getHexString()", () => {
const getRequest = new GetRequest(mockCosemAddress, mockDlmsData);
getRequest.getBytes(); // Populate value
const hexString = getRequest.getHexString();
const expectedHex = [
MessageType.GET_REQUEST,
0x01, // setType
getRequest.invokeIdAndPriority,
...mockCosemAddress.classId,
...mockCosemAddress.instanceId,
...mockCosemAddress.attributeId,
0x01, // methodInvocationParameters
...mockDlmsData.rawValue,
]
.map(byte => byte.toString(16).toUpperCase().padStart(2, '0'))
.join(' ');
expect(hexString).toBe(expectedHex);
});
test("should convert hex string to byte array with _stringToBytes()", () => {
const getRequest = new GetRequest();
const hexString = "123456";
const result = getRequest._stringToBytes(hexString);
expect(result).toEqual([0x12, 0x34, 0x56]);
});
});