1
0
mirror of https://github.com/alice-lg/alice-lg.git synced 2024-05-11 05:55:03 +00:00
alice-lg-alice-lg/pkg/store/routes_store_test.go

190 lines
3.9 KiB
Go
Raw Normal View History

2021-10-20 18:36:30 +00:00
package store
2018-06-26 11:19:53 +02:00
import (
2021-12-08 15:53:03 +01:00
"context"
2018-06-26 12:16:06 +02:00
"log"
"os"
2018-06-27 11:11:33 +02:00
"strings"
2018-06-26 11:19:53 +02:00
"testing"
2018-06-26 12:16:06 +02:00
"encoding/json"
"io/ioutil"
2021-03-22 17:35:20 +01:00
"github.com/alice-lg/alice-lg/pkg/api"
2021-10-20 20:26:37 +00:00
"github.com/alice-lg/alice-lg/pkg/config"
2021-12-08 15:49:33 +01:00
"github.com/alice-lg/alice-lg/pkg/store/backends/memory"
2018-06-26 11:19:53 +02:00
)
2018-07-11 18:25:42 +02:00
func loadTestRoutesResponse() *api.RoutesResponse {
2021-12-08 15:49:33 +01:00
file, err := os.Open("testdata/routes_response.json")
2018-06-26 12:16:06 +02:00
if err != nil {
log.Panic("could not load test data:", err)
}
defer file.Close()
data, err := ioutil.ReadAll(file)
if err != nil {
log.Panic("could not read test data:", err)
}
2018-07-11 18:25:42 +02:00
response := &api.RoutesResponse{}
2018-06-26 12:16:06 +02:00
err = json.Unmarshal(data, &response)
if err != nil {
log.Panic("could not unmarshal response test data:", err)
}
return response
}
2018-06-26 11:19:53 +02:00
2021-12-08 15:49:33 +01:00
func importRoutes(
s *RoutesStore,
src *config.SourceConfig,
res *api.RoutesResponse,
) error {
2021-12-08 15:53:03 +01:00
ctx := context.Background()
2021-12-08 15:49:33 +01:00
// Prepare imported routes for lookup
imported := s.routesToLookupRoutes(ctx, "imported", src, res.Imported)
filtered := s.routesToLookupRoutes(ctx, "filtered", src, res.Filtered)
lookupRoutes := append(imported, filtered...)
2021-12-08 15:53:03 +01:00
if err := s.backend.SetRoutes(ctx, src.ID, lookupRoutes); err != nil {
2021-12-08 15:49:33 +01:00
return err
}
return s.sources.RefreshSuccess(src.ID)
}
//
// Route Store Tests
//
func makeTestRoutesStore() *RoutesStore {
neighborsStore := makeTestNeighborsStore()
be := memory.NewRoutesBackend()
cfg := &config.Config{
Server: config.ServerConfig{
RoutesStoreRefreshInterval: 1,
},
Sources: []*config.SourceConfig{
{
ID: "rs1",
Name: "rs1",
},
{
ID: "rs2",
Name: "rs2",
},
},
}
rs1 := loadTestRoutesResponse()
2021-12-08 15:53:03 +01:00
s := NewRoutesStore(neighborsStore, cfg, be)
2021-12-08 15:49:33 +01:00
if err := importRoutes(s, cfg.Sources[0], rs1); err != nil {
log.Panic(err)
}
2021-12-08 15:53:03 +01:00
return s
2021-12-08 15:49:33 +01:00
}
// Check for presence of network in result set
2018-06-27 15:40:38 +02:00
func testCheckPrefixesPresence(prefixes, resultset []string, t *testing.T) {
// Check prefixes
presence := map[string]bool{}
for _, prefix := range prefixes {
presence[prefix] = false
}
for _, prefix := range resultset {
// Check if prefixes are all accounted for
2021-03-22 17:35:20 +01:00
for net := range presence {
2018-06-27 15:40:38 +02:00
if prefix == net {
presence[net] = true
}
}
}
for net, present := range presence {
if present == false {
t.Error(net, "not found in result set")
}
}
}
2018-06-26 11:19:53 +02:00
func TestRoutesStoreStats(t *testing.T) {
store := makeTestRoutesStore()
stats := store.Stats()
// Check total routes
2018-06-26 12:16:06 +02:00
// There should be 8 imported, and 1 filtered route
if stats.TotalRoutes.Imported != 8 {
t.Error(
"expected 8 imported routes, got:",
stats.TotalRoutes.Imported,
)
}
2018-06-26 11:19:53 +02:00
2018-06-26 14:16:09 +02:00
if stats.TotalRoutes.Filtered != 1 {
2018-06-26 12:16:06 +02:00
t.Error(
"expected 1 filtered route, got:",
stats.TotalRoutes.Filtered,
)
}
2018-06-26 11:19:53 +02:00
}
2018-06-26 14:16:09 +02:00
2018-06-27 11:11:33 +02:00
func TestLookupPrefix(t *testing.T) {
2018-06-26 14:16:09 +02:00
store := makeTestRoutesStore()
query := "193.200."
2021-12-08 15:53:03 +01:00
results, err := store.LookupPrefix(context.Background(), query)
if err != nil {
t.Fatal(err)
}
2018-06-27 11:11:33 +02:00
if len(results) == 0 {
t.Error("Expected lookup results. None present.")
return
}
// Check results
2018-06-27 15:21:46 +02:00
for _, prefix := range results {
if strings.HasPrefix(prefix.Network, query) == false {
2018-06-27 11:11:33 +02:00
t.Error(
"All network addresses should start with the",
"queried prefix",
)
}
}
2018-06-27 15:21:46 +02:00
}
2021-10-15 21:24:24 +02:00
func TestLookupPrefixForNeighbors(t *testing.T) {
// Construct a neighbors lookup result
neighbors := api.NeighborsLookupResults{
"rs1": api.Neighbors{
&api.Neighbor{
2021-10-20 20:26:37 +00:00
ID: "ID163_AS31078",
2018-06-27 15:21:46 +02:00
},
},
}
store := makeTestRoutesStore()
// Query
2021-12-08 15:53:03 +01:00
results, err := store.LookupPrefixForNeighbors(context.Background(), neighbors)
if err != nil {
t.Fatal(err)
}
2018-06-27 15:21:46 +02:00
// We should have retrived 8 prefixes,
if len(results) != 8 {
t.Error("Expected result lenght: 8, got:", len(results))
}
2018-06-27 15:40:38 +02:00
presence := []string{
"193.200.230.0/24", "193.34.24.0/22", "31.220.136.0/21",
2018-06-27 15:21:46 +02:00
}
2018-06-27 15:40:38 +02:00
resultset := []string{}
2018-06-27 15:21:46 +02:00
for _, prefix := range results {
2018-06-27 15:40:38 +02:00
resultset = append(resultset, prefix.Network)
2018-06-27 15:21:46 +02:00
}
2018-06-27 11:11:33 +02:00
2018-06-27 15:40:38 +02:00
testCheckPrefixesPresence(presence, resultset, t)
2018-06-26 14:16:09 +02:00
}