Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Change BGP tests to wait for policy state #285

Merged
merged 1 commit into from
Oct 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions bgp/tests/local_tests/community_set_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ func TestCommunitySet(t *testing.T) {
// Install policy
Replace(t, dut2, ocpath.Root().RoutingPolicy().PolicyDefinition(policyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Statement: policy})
Replace(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().Config(), []string{policyName})
Await(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().State(), []string{policyName})
}

routeUnderTestList := []string{
Expand Down Expand Up @@ -168,6 +169,7 @@ func TestCommunitySet(t *testing.T) {
// Install policy
Replace(t, dut1, ocpath.Root().RoutingPolicy().PolicyDefinition(policyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Name: ygot.String(policyName), Statement: policy})
Replace(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().Config(), []string{policyName})
Await(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().State(), []string{policyName})
}

test := func(testRef bool) {
Expand Down
103 changes: 57 additions & 46 deletions bgp/tests/local_tests/policy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,51 +84,6 @@ func testPolicy(t *testing.T, testspec PolicyTestCase) {
}})
defer stop5()

for _, routeTest := range testspec.spec.RouteTests {
// Install all regular test routes into DUT1.
route := &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(routeTest.GetInput().GetReachPrefix()),
NextHop: map[string]*oc.NetworkInstance_Protocol_Static_NextHop{
"single": {
Index: ygot.String("single"),
NextHop: oc.UnionString("192.0.2.1"),
Recurse: ygot.Bool(true),
},
},
}
installStaticRoute(t, dut1, route)
}

for _, routeTest := range testspec.spec.LongerPathRouteTests {
// Install all longer-path test routes into DUT4.
route := &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(routeTest.GetInput().GetReachPrefix()),
NextHop: map[string]*oc.NetworkInstance_Protocol_Static_NextHop{
"single": {
Index: ygot.String("single"),
NextHop: oc.UnionString("192.0.2.1"),
Recurse: ygot.Bool(true),
},
},
}
installStaticRoute(t, dut4, route)
}

for _, routeTest := range testspec.spec.AlternatePathRouteTests {
// Install all alternate-path test routes into DUT5.
route := &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(routeTest.GetInput().GetReachPrefix()),
NextHop: map[string]*oc.NetworkInstance_Protocol_Static_NextHop{
"single": {
Index: ygot.String("single"),
NextHop: oc.UnionString("193.0.2.1"),
Recurse: ygot.Bool(true),
},
},
}
installStaticRoute(t, dut5, route)
}

testPolicyAux(t, testspec, dut1, dut2, dut3, dut4, dut5)
}

Expand Down Expand Up @@ -206,6 +161,8 @@ func testPolicyAux(t *testing.T, testspec PolicyTestCase, dut1, dut2, dut3, dut4
Delete(t, dut4, bgp.RoutingPolicyPath.Config())
Delete(t, dut5, bgp.RoutingPolicyPath.Config())

establishSessionPairs(t, []DevicePair{{dut1, dut2}, {dut2, dut3}, {dut4, dut5}, {dut5, dut2}}...)

installDefaultPolicies := func() {
// Clear the path for routes to be propagated.
// DUT1 -> DUT2 -> DUT3
Expand All @@ -221,14 +178,68 @@ func testPolicyAux(t *testing.T, testspec PolicyTestCase, dut1, dut2, dut3, dut4
Replace(t, dut5, bgp.BGPPath.Neighbor(dut4.RouterID).ApplyPolicy().DefaultImportPolicy().Config(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Replace(t, dut5, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().DefaultExportPolicy().Config(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Replace(t, dut2, bgp.BGPPath.Neighbor(dut5.RouterID).ApplyPolicy().DefaultImportPolicy().Config(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)

// Wait until policies are installed.
Await(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut2, bgp.BGPPath.Neighbor(dut3.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut3, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)

Await(t, dut4, bgp.BGPPath.Neighbor(dut5.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut5, bgp.BGPPath.Neighbor(dut4.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut5, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut2, bgp.BGPPath.Neighbor(dut5.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
}
installDefaultPolicies()

if testspec.installPolicies != nil {
testspec.installPolicies(t, dut1, dut2, dut3, dut4, dut5)
}

establishSessionPairs(t, []DevicePair{{dut1, dut2}, {dut2, dut3}, {dut4, dut5}, {dut5, dut2}}...)
for _, routeTest := range testspec.spec.RouteTests {
// Install all regular test routes into DUT1.
route := &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(routeTest.GetInput().GetReachPrefix()),
NextHop: map[string]*oc.NetworkInstance_Protocol_Static_NextHop{
"single": {
Index: ygot.String("single"),
NextHop: oc.UnionString("192.0.2.1"),
Recurse: ygot.Bool(true),
},
},
}
installStaticRoute(t, dut1, route)
}

for _, routeTest := range testspec.spec.LongerPathRouteTests {
// Install all longer-path test routes into DUT4.
route := &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(routeTest.GetInput().GetReachPrefix()),
NextHop: map[string]*oc.NetworkInstance_Protocol_Static_NextHop{
"single": {
Index: ygot.String("single"),
NextHop: oc.UnionString("192.0.2.1"),
Recurse: ygot.Bool(true),
},
},
}
installStaticRoute(t, dut4, route)
}

for _, routeTest := range testspec.spec.AlternatePathRouteTests {
// Install all alternate-path test routes into DUT5.
route := &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(routeTest.GetInput().GetReachPrefix()),
NextHop: map[string]*oc.NetworkInstance_Protocol_Static_NextHop{
"single": {
Index: ygot.String("single"),
NextHop: oc.UnionString("193.0.2.1"),
Recurse: ygot.Bool(true),
},
},
}
installStaticRoute(t, dut5, route)
}

staticp := ocpath.Root().NetworkInstance(fakedevice.DefaultNetworkInstance).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_STATIC, fakedevice.StaticRoutingProtocol)
v := GetAll(t, dut1, staticp.StaticAny().Config())
Expand Down
1 change: 1 addition & 0 deletions bgp/tests/local_tests/prefix_set_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ func TestPrefixSet(t *testing.T) {
// Install policy
Replace(t, dut2, ocpath.Root().RoutingPolicy().PolicyDefinition(policyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Statement: policy})
Replace(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().Config(), []string{policyName})
Await(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().State(), []string{policyName})
}

invertResult := func(result valpb.RouteTestResult, invert bool) valpb.RouteTestResult {
Expand Down
10 changes: 10 additions & 0 deletions bgp/tests/local_tests/route_propagation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,16 @@ func TestRoutePropagation(t *testing.T) {

establishSessionPairs(t, []DevicePair{{dut1, dut2}, {dut2, dut3}, {dut3, dut4}}...)

awaitDefaultPolicies := func() {
Await(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut2, bgp.BGPPath.Neighbor(dut3.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut3, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut3, bgp.BGPPath.Neighbor(dut4.RouterID).ApplyPolicy().DefaultExportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
Await(t, dut4, bgp.BGPPath.Neighbor(dut3.RouterID).ApplyPolicy().DefaultImportPolicy().State(), oc.RoutingPolicy_DefaultPolicyType_ACCEPT_ROUTE)
}
awaitDefaultPolicies()

prefix := "10.10.10.0/24"
installStaticRoute(t, dut1, &oc.NetworkInstance_Protocol_Static{
Prefix: ygot.String(prefix),
Expand Down
4 changes: 4 additions & 0 deletions bgp/tests/local_tests/set_attributes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,13 +304,17 @@ func TestSetAttributes(t *testing.T) {
// Install export policies
Replace(t, dut1, ocpath.Root().RoutingPolicy().PolicyDefinition(dut1ExportPolicyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Name: ygot.String(dut1ExportPolicyName), Statement: dut1ExportPolicy})
Replace(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().Config(), []string{dut1ExportPolicyName})
Await(t, dut1, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().State(), []string{dut1ExportPolicyName})
Replace(t, dut5, ocpath.Root().RoutingPolicy().PolicyDefinition(dut5ExportPolicyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Name: ygot.String(dut5ExportPolicyName), Statement: dut5ExportPolicy})
Replace(t, dut5, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().Config(), []string{dut5ExportPolicyName})
Await(t, dut5, bgp.BGPPath.Neighbor(dut2.RouterID).ApplyPolicy().ExportPolicy().State(), []string{dut5ExportPolicyName})
// Install import policies
Replace(t, dut2, ocpath.Root().RoutingPolicy().PolicyDefinition(dut1ImportPolicyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Name: ygot.String(dut1ImportPolicyName), Statement: dut1ImportPolicy})
Replace(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().Config(), []string{dut1ImportPolicyName})
Await(t, dut2, bgp.BGPPath.Neighbor(dut1.RouterID).ApplyPolicy().ImportPolicy().State(), []string{dut1ImportPolicyName})
Replace(t, dut2, ocpath.Root().RoutingPolicy().PolicyDefinition(dut5ImportPolicyName).Config(), &oc.RoutingPolicy_PolicyDefinition{Name: ygot.String(dut5ImportPolicyName), Statement: dut5ImportPolicy})
Replace(t, dut2, bgp.BGPPath.Neighbor(dut5.RouterID).ApplyPolicy().ImportPolicy().Config(), []string{dut5ImportPolicyName})
Await(t, dut2, bgp.BGPPath.Neighbor(dut5.RouterID).ApplyPolicy().ImportPolicy().State(), []string{dut5ImportPolicyName})
},
})
}