blob: e4945b65784d6eac02221d517d74a08e22530123 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { uuidv7, uuidv4 } from 'uuidv7'
import { SEND_MESSAGES, type SendMessages } from './send-messages.command.js';
import { HeaderValue } from './header.utils.js';
describe('SendMessages', () => {
describe('serialize', () => {
const t1 = {
streamId: 911,
topicId: 213,
messages: [
{ payload: 'a' },
{ id: 0, payload: 'b' },
{ id: 123, payload: 'X' },
{ id: 0n, payload: 'c' },
{ id: 1236234534554n, payload: 'X' },
{ id: uuidv4(), payload: 'd' },
{ id: uuidv7(), payload: 'e' },
],
};
it('serialize SendMessages into a buffer', () => {
assert.deepEqual(
SEND_MESSAGES.serialize(t1).length,
533
);
});
it('serialize all kinds of messageId', () => {
assert.doesNotThrow(
() => SEND_MESSAGES.serialize(t1),
);
});
it('does not throw on number message id', () => {
const t = { ...t1, messages: [{ id: 42, payload: 'm' }] };
assert.doesNotThrow(
() => SEND_MESSAGES.serialize(t)
);
});
it('does not throw on bigint message id', () => {
const t = { ...t1, messages: [{ id: 123n, payload: 'm' }] };
assert.doesNotThrow(
() => SEND_MESSAGES.serialize(t)
);
});
it('does not throw on uuid message id', () => {
const t = { ...t1, messages: [{ id: uuidv4(), payload: 'uuid' }] };
assert.doesNotThrow(
() => SEND_MESSAGES.serialize(t)
);
});
it('throw on invalid string message id', () => {
const t = { ...t1, messages: [{ id: 'foo', payload: 'm' }] };
assert.throws(
() => SEND_MESSAGES.serialize(t)
);
});
it('throw on invalid number message id', () => {
const t = { ...t1, messages: [{ id: -12, payload: 'n' }] };
assert.throws(
() => SEND_MESSAGES.serialize(t)
);
});
it('throw on invalid bigint message id', () => {
const t = { ...t1, messages: [{ id: -12n, payload: 'bn' }] };
assert.throws(
() => SEND_MESSAGES.serialize(t)
);
});
it('serialize message with headers', () => {
const t: SendMessages = {
streamId: 911,
topicId: 213,
messages: [
{ payload: 'm', headers: { p: HeaderValue.Bool(true) } },
{ payload: 'q', headers: { 'v-aze': HeaderValue.Uint8(128) } },
{ payload: 'x', headers: { q: HeaderValue.Double(1/3) } },
{ payload: 's', headers: { x: HeaderValue.Uint32(123) } },
{ payload: 'r', headers: { y: HeaderValue.Uint64(42n) } },
{ payload: 'g', headers: { y: HeaderValue.Float(42.3) } },
{ payload: 'c', headers: { ID: HeaderValue.String(uuidv7()) } },
{ payload: 'l', headers: { val: HeaderValue.Raw(Buffer.from(uuidv4())) } }
]
};
assert.doesNotThrow(
() => SEND_MESSAGES.serialize(t)
);
});
});
});