mirror of
https://github.com/MeshCore-Beacon/beacon-server.git
synced 2026-09-01 16:48:19 +00:00
text[] from string_to_array can't match the CHAR(3) indexes and hides the values from the planner. Handlers already have a slice; stop joining to CSV in the store layer and pass a typed array everywhere.
99 lines
2.5 KiB
Go
99 lines
2.5 KiB
Go
// Copyright 2026 Beacon Contributors
|
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
package db
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"testing"
|
|
|
|
sqlc "github.com/MeshCore-Beacon/beacon-server/db/sqlc"
|
|
mockdb "github.com/MeshCore-Beacon/beacon-server/db/sqlc/mock"
|
|
"go.uber.org/mock/gomock"
|
|
)
|
|
|
|
func TestGetTransportScopes(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
mock := mockdb.NewMockQuerier(ctrl)
|
|
|
|
mock.EXPECT().
|
|
GetTransportScopes(gomock.Any()).
|
|
Return([]sqlc.GetTransportScopesRow{
|
|
{
|
|
Name: "default",
|
|
TransportKey: []byte{0x01, 0x02},
|
|
KeyFingerprint: []byte{0xde, 0xad},
|
|
},
|
|
}, nil)
|
|
|
|
store := &Store{q: mock}
|
|
entries, err := store.GetTransportScopes(context.Background())
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(entries) != 1 {
|
|
t.Fatalf("expected 1 entry, got %d", len(entries))
|
|
}
|
|
if entries[0].Name != "default" {
|
|
t.Errorf("expected Name default, got %s", entries[0].Name)
|
|
}
|
|
if !bytes.Equal(entries[0].TransportKey, []byte{0x01, 0x02}) {
|
|
t.Errorf("expected TransportKey [0x01 0x02], got %v", entries[0].TransportKey)
|
|
}
|
|
}
|
|
|
|
func TestGetScopesByIATAs(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
mock := mockdb.NewMockQuerier(ctrl)
|
|
|
|
mock.EXPECT().
|
|
GetScopesByIATAs(gomock.Any(), []string{"YVR", "YYJ"}).
|
|
Return([]sqlc.GetScopesByIATAsRow{
|
|
{Name: "default", ObserverCount: 3, NodeCount: 10, IataCount: 2},
|
|
}, nil)
|
|
|
|
store := &Store{q: mock}
|
|
items, err := store.GetScopesByIATAs(context.Background(), []string{"YVR", "YYJ"})
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if len(items) != 1 {
|
|
t.Fatalf("expected 1 item, got %d", len(items))
|
|
}
|
|
if items[0].IATACount != 2 {
|
|
t.Errorf("expected IATACount 2, got %d", items[0].IATACount)
|
|
}
|
|
}
|
|
|
|
func TestGetScopeByName(t *testing.T) {
|
|
ctrl := gomock.NewController(t)
|
|
mock := mockdb.NewMockQuerier(ctrl)
|
|
|
|
mock.EXPECT().
|
|
GetScopeByName(gomock.Any(), "default").
|
|
Return(sqlc.GetScopeByNameRow{
|
|
Name: "default",
|
|
PacketCount: 100,
|
|
ObserverCount: 5,
|
|
NodeCount: 20,
|
|
IataCount: 3,
|
|
Iatas: []string{"YVR", "YYJ", "YYC"},
|
|
}, nil)
|
|
|
|
store := &Store{q: mock}
|
|
detail, err := store.GetScopeByName(context.Background(), "default")
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
if detail.Name != "default" {
|
|
t.Errorf("expected Name default, got %s", detail.Name)
|
|
}
|
|
if len(detail.IATAs) != 3 {
|
|
t.Errorf("expected 3 IATAs, got %d", len(detail.IATAs))
|
|
}
|
|
if detail.PacketCount != 100 {
|
|
t.Errorf("expected PacketCount 100, got %d", detail.PacketCount)
|
|
}
|
|
}
|