CI / changes (push) Successful in 7s
CI / openapi (push) Successful in 23s
CI / go (push) Successful in 24s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, , evobgp-web) (push) Successful in 1m7s
CI / docker-web (deploy/docker/evobgp-web/Dockerfile, evobgp-all, evobgp-web-all) (push) Successful in 1m2s
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Successful in 55s
CI / docker-go (deploy/docker/evobgp-agent/Dockerfile, , evobgp-agent) (push) Successful in 54s
CI / docker-go (evobgp-all, 1, deploy/docker/gobinary/Dockerfile, , evobgp-all) (push) Successful in 2m19s
CI / docker-go (evobgp-api, 1, deploy/docker/gobinary/Dockerfile, , evobgp-api) (push) Successful in 2m27s
CI / docker-go (evobgp-deploy, 0, deploy/docker/gobinary/Dockerfile, , evobgp-deploy) (push) Successful in 1m22s
CI / docker-go (evobgp-ingest, 0, deploy/docker/gobinary/Dockerfile, , evobgp-ingest) (push) Successful in 1m26s
CI / docker-go (evobgp-node, 0, deploy/docker/gobinary/Dockerfile, , evobgp-node) (push) Successful in 1m9s
CI / docker-go (evobgp-render, 0, deploy/docker/gobinary/Dockerfile, , evobgp-render) (push) Successful in 1m19s
CI / docker-go (evobgp-scheduler, 0, deploy/docker/gobinary/Dockerfile, , evobgp-scheduler) (push) Successful in 1m19s
81 lines
2.5 KiB
Go
81 lines
2.5 KiB
Go
package birdfmt
|
|
|
|
import (
|
|
"net/netip"
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// Ensures generator output matches the standard_layout scenario files (CI bird -p).
|
|
func TestStandardLayout_GeneratorMatchesFixtures(t *testing.T) {
|
|
p4 := netip.MustParsePrefix("203.0.113.0/24")
|
|
|
|
f4, err := RenderExportFilterIPv4("evobgp_export_v4", []netip.Prefix{p4}, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assertFileEquals(t, "testdata/scenarios/standard_layout/bird.d/evobgp_filters_v4.conf", f4)
|
|
|
|
f6, err := RenderExportFilterIPv6("evobgp_export_v6", nil, nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assertFileEquals(t, "testdata/scenarios/standard_layout/bird.d/evobgp_filters_v6.conf", f6)
|
|
|
|
staticV4 := RenderStaticIPv4Protocol("evobgp_prefixes_v4", []netip.Prefix{p4})
|
|
assertFileEquals(t, "testdata/scenarios/standard_layout/bird.d/evobgp_prefixes_v4.conf", staticV4)
|
|
|
|
staticV6 := RenderStaticIPv6Protocol("evobgp_prefixes_v6", nil)
|
|
assertFileEquals(t, "testdata/scenarios/standard_layout/bird.d/evobgp_prefixes_v6.conf", staticV6)
|
|
|
|
tpl, err := RenderBGPTemplates(BGPTemplatesOptions{
|
|
LocalASN: 65001,
|
|
ExportFilterV4: "evobgp_export_v4",
|
|
ExportFilterV6: "evobgp_export_v6",
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assertFileEquals(t, "testdata/scenarios/standard_layout/bird.d/evobgp_bgp_template.conf", tpl)
|
|
|
|
peer, err := RenderProtocolBGPFromTemplate(BGPPeerFromTemplateOptions{
|
|
ProtocolName: "evobgp_peer_ci",
|
|
TemplateName: BGPTemplateNameV4,
|
|
NeighborIP: "192.0.2.2",
|
|
NeighborASN: 65002,
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
assertFileEquals(t, "testdata/scenarios/standard_layout/bird.d/evobgp_peers.conf", peer)
|
|
|
|
main, err := RenderMainBirdConf(MainBirdConfOptions{
|
|
RouterID: "192.0.2.1",
|
|
Includes: StandardIncludeFragments(),
|
|
Preamble: "tags: layout, include, filter, peer\nStandard EvoBGP layout: main skeleton + bird.d fragments (matches StandardIncludeFragments).",
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// Fixture has two header comment lines; RenderMainBirdConf adds # per line.
|
|
wantMain, err := os.ReadFile("testdata/scenarios/standard_layout/bird.conf")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.TrimSpace(main) != strings.TrimSpace(string(wantMain)) {
|
|
t.Fatalf("main bird.conf mismatch\n--- got ---\n%s\n--- want ---\n%s", main, wantMain)
|
|
}
|
|
}
|
|
|
|
func assertFileEquals(t *testing.T, path, content string) {
|
|
t.Helper()
|
|
want, err := os.ReadFile(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.TrimSpace(content) != strings.TrimSpace(string(want)) {
|
|
t.Fatalf("%s mismatch\n--- got ---\n%s\n--- want ---\n%s", path, content, string(want))
|
|
}
|
|
}
|