Files
beacon-server/internal/api/packets_test.go
T
MrAlders0n 91b4b457b5 perf(db): resolve packet endpoints at read time (#163)
Storing a full candidate snapshot on every observation was the wrong call. The same node lists got copied thousands of times, about 22 GB on prod. Resolve endpoints live like path hops and drop the column.
2026-09-25 13:59:07 -04:00

100 lines
2.8 KiB
Go

// Copyright 2026 Beacon Contributors
// SPDX-License-Identifier: AGPL-3.0-or-later
package api_test
import (
"testing"
"github.com/MeshCore-Beacon/beacon-server/internal/api"
"github.com/meshcore-go/meshcore-go"
)
func TestPayloadTypeName(t *testing.T) {
tests := []struct {
input int16
want string
}{
{0x00, "request"},
{0x01, "response"},
{0x02, "text_message"},
{0x03, "acknowledgement"},
{0x04, "advert"},
{0x05, "group_text"},
{0x06, "group_data"},
{0x07, "anonymous_request"},
{0x08, "path"},
{0x09, "trace"},
{0x0A, "multipart"},
{0x0B, "control"},
{0x0C, "reserved"},
{0x0D, "reserved"},
{0x0E, "reserved"},
{0x0F, "raw_custom"},
{0xFF, "unknown"},
}
for _, tt := range tests {
got := api.PayloadTypeName(tt.input)
if got != tt.want {
t.Errorf("PayloadTypeName(%#x) = %q, want %q", tt.input, got, tt.want)
}
}
}
func TestPayloadTypeFromString(t *testing.T) {
tests := []struct {
input string
want int16
}{
{"request", int16(meshcore.PayloadTypeReq)},
{"req", int16(meshcore.PayloadTypeReq)},
{"response", int16(meshcore.PayloadTypeResponse)},
{"txt_msg", int16(meshcore.PayloadTypeTxtMsg)},
{"txtmsg", int16(meshcore.PayloadTypeTxtMsg)},
{"text", int16(meshcore.PayloadTypeTxtMsg)},
{"direct", int16(meshcore.PayloadTypeTxtMsg)},
{"acknowledgement", int16(meshcore.PayloadTypeAck)},
{"ack", int16(meshcore.PayloadTypeAck)},
{"advertisement", int16(meshcore.PayloadTypeAdvert)},
{"advert", int16(meshcore.PayloadTypeAdvert)},
{"grp_txt", int16(meshcore.PayloadTypeGrpTxt)},
{"group_text", int16(meshcore.PayloadTypeGrpTxt)},
{"group", int16(meshcore.PayloadTypeGrpTxt)},
{"path", int16(meshcore.PayloadTypePath)},
{"trace", int16(meshcore.PayloadTypeTrace)},
{"multipart", int16(meshcore.PayloadTypeMultiPart)},
{"multi-part", int16(meshcore.PayloadTypeMultiPart)},
{"control", int16(meshcore.PayloadTypeControl)},
{"raw_custom", int16(meshcore.PayloadTypeRawCustom)},
{"raw", int16(meshcore.PayloadTypeRawCustom)},
{"ADVERT", int16(meshcore.PayloadTypeAdvert)}, // case insensitive
{"", -1},
{"garbage", -1},
}
for _, tt := range tests {
got := api.PayloadTypeFromString(tt.input)
if got != tt.want {
t.Errorf("PayloadTypeFromString(%q) = %d, want %d", tt.input, got, tt.want)
}
}
}
func TestRouteTypeName(t *testing.T) {
tests := []struct {
input int16
want string
}{
{int16(meshcore.RouteTypeFlood), "FLOOD"},
{int16(meshcore.RouteTypeDirect), "DIRECT"},
{int16(meshcore.RouteTypeTransportFlood), "TRANSPORT_FLOOD"},
{int16(meshcore.RouteTypeTransportDirect), "TRANSPORT_DIRECT"},
{99, "unknown"},
}
for _, tt := range tests {
got := api.RouteTypeName(tt.input)
if got != tt.want {
t.Errorf("RouteTypeName(%d) = %q, want %q", tt.input, got, tt.want)
}
}
}