diff --git a/internal/api/packets_test.go b/internal/api/packets_test.go new file mode 100644 index 0000000..bce578e --- /dev/null +++ b/internal/api/packets_test.go @@ -0,0 +1,96 @@ +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) + } + } +}