Repository: openconfig/featureprofiles
Pull request #4195: Add OC path coverage for bgp peer group keepalive interval
Author: login: singhavnish2516
Created: 2025-05-12T16:47:22Z | Merged: 2025-05-19T14:02:35Z

* Add OC path coverage for bgp peer group keepalive interval


Diff:
diff --git a/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md b/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md
index 4afc8e8cc08..9c8b4600be0 100644
--- a/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md
+++ b/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md
@@ -6,29 +6,97 @@ BGP Keepalive and HoldTimer Configuration Test
 
 ## Procedure
 
-*   Establish eBGP sessions as follows between ATE and DUT
-    * The DUT has eBGP peering with ATE port 1 and ATE port 2.
-    * Enable an Accept-route all import-policy/export-policy under the BGP peer-group AFI/SAFI.
-    * The first pair is called the "source" pair, and the second the "destination" pair
+1   Establish eBGP sessions as follows between ATE and DUT
+* The DUT has eBGP peering with ATE port 1 and ATE port 2.
+* Enable an Accept-route all import-policy/export-policy under the BGP peer-group AFI/SAFI.
+* The first pair is called the "source" pair, and the second the "destination" pair
 
-*  Validate BGP session state on DUT using telemetry.
-*  Modify BGP timer values on iBGP peers to 10/30 and on the eBGP peering to 5/15.
-*  Verify that the sessions are established after soft reset.
+2  Validate BGP session state on DUT using telemetry.
+3  Modify BGP timer values on iBGP peers to 10/30 and on the eBGP peering to 5/15.
+4  Verify that the sessions are established after soft reset.
+5  Repeat Step 3 by modifying BGP timers at peer-group level to 10/30(keepalive-interval/hold-time) and on eBGP peering to 5/15(keepalive-interval/hold-time) and verify the timers
 
+## Canonical OpenConfig for keepalive-interval and hold-time at neighbour and peer-group level for BGP
+
+```json
+{
+  "network-instances": {
+    "network-instance": [
+      {
+        "config": {
+          "name": "DEFAULT"
+        },
+        "name": "DEFAULT",
+        "protocols": {
+          "protocol": [
+            {
+              "bgp": {
+                "neighbors": {
+                  "neighbor": [
+                    {
+                      "config": {
+                        "neighbor-address": "192.0.2.6"
+                      },
+                      "neighbor-address": "192.0.2.6",
+                      "timers": {
+                        "config": {
+                          "hold-time": 30,
+                          "keepalive-interval": 10
+                        }
+                      }
+                    }
+                  ]
+                },
+                "peer-groups": {
+                  "peer-group": [
+                    {
+                      "config": {
+                        "peer-group-name": "peer_group"
+                      },
+                      "peer-group-name": "peer_group",
+                      "timers": {
+                        "config": {
+                          "hold-time": 30,
+                          "keepalive-interval": 10
+                        }
+                      }
+                    }
+                  ]
+                }
+              },
+              "config": {
+                "identifier": "BGP",
+                "name": "BGP"
+              },
+              "identifier": "BGP",
+              "name": "BGP"
+            }
+          ]
+        }
+      }
+    ]
+  }
+}
+```
 
 ## OpenConfig Path and RPC Coverage
 
-The below yaml defines the OC paths intended to be covered by this test.  OC paths used for test setup are not listed here.
+The below yaml defines the OC paths intended to be covered by this test.
+OC paths used for test setup are not listed here.
 
 ```yaml
 paths:
   ## Config Paths ##
   /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/timers/config/keepalive-interval:
   /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/timers/config/hold-time:
+  /network-instances/network-instance/protocols/protocol/bgp/peer-groups/peer-group/timers/config/keepalive-interval:
+  /network-instances/network-instance/protocols/protocol/bgp/peer-groups/peer-group/timers/config/hold-time:
 
   ## State Paths ##
   /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/timers/state/keepalive-interval:
   /network-instances/network-instance/protocols/protocol/bgp/neighbors/neighbor/timers/state/hold-time:
+  /network-instances/network-instance/protocols/protocol/bgp/peer-groups/peer-group/timers/state/keepalive-interval:
+  /network-instances/network-instance/protocols/protocol/bgp/peer-groups/peer-group/timers/state/hold-time:
 
 rpcs:
   gnmi:
@@ -37,7 +105,8 @@ rpcs:
       on_change: true
     gNMI.Set:
 ```
-   
+
 ## Minimum DUT platform requirement
 
 vRX
+
diff --git a/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/bgp_keepalive_and_holdtimer_configuration_test.go b/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/bgp_keepalive_and_holdtimer_configuration_test.go
index 4d5bf0acc90..c672fc4ed81 100644
--- a/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/bgp_keepalive_and_holdtimer_configuration_test.go
+++ b/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/bgp_keepalive_and_holdtimer_configuration_test.go
@@ -121,6 +121,8 @@ var (
 		{localAs: bgpGlobalAttrs.dutAS, peerAs: bgpGlobalAttrs.ateAS, pfxLimit: bgpGlobalAttrs.prefixLimit, neighborip: ateDst.IPv4, isV4: true},
 		{localAs: bgpGlobalAttrs.dutAS, peerAs: bgpGlobalAttrs.ateAS, pfxLimit: bgpGlobalAttrs.prefixLimit, neighborip: ateDst.IPv6, isV4: false},
 	}
+
+	bgpPeerGroups = []string{bgpGlobalAttrs.peerGrpNamev4, bgpGlobalAttrs.peerGrpNamev6}
 )
 
 type config struct {
@@ -198,6 +200,7 @@ func configureATE(t *testing.T, ate *ondatra.ATEDevice) *config {
 	ate.OTG().StartProtocols(t)
 	return &config{topo, dstBgp4PeerRoutes, dstBgp6PeerRoutes, v4DstIncrement, v6DstIncrement}
 }
+
 func ateFlowConfig(t *testing.T, topo gosnappi.Config, srcEth gosnappi.DeviceEthernet, srcIpv4 gosnappi.DeviceIpv4, srcIpv6 gosnappi.DeviceIpv6, dstBgp4PeerRoutes gosnappi.BgpV4RouteRange, dstBgp6PeerRoutes gosnappi.BgpV6RouteRange) (gosnappi.PatternFlowIpv4DstCounter, gosnappi.PatternFlowIpv6DstCounter) {
 	// ATE Traffic Configuration
 	t.Logf("TestBGP:start ate Traffic config")
@@ -310,16 +313,35 @@ func bgpCreateNbr(dut *ondatra.DUTDevice) *oc.NetworkInstance_Protocol {
 	return niProto
 }
 
+// bgpConfigType represents the type of BGP timer configuration.
+type bgpConfigType int
+
+const (
+	bgpConfigTypeNeighbor bgpConfigType = iota
+	bgpConfigTypePeerGroup
+)
+
 // bgpTimersConfig sets the right config for BGP timers.
 func (tc *testCase) bgpTimersConfig(t *testing.T, dut *ondatra.DUTDevice) *oc.NetworkInstance_Protocol {
 	d := &oc.Root{}
 	ni1 := d.GetOrCreateNetworkInstance(deviations.DefaultNetworkInstance(dut))
 	niProto := ni1.GetOrCreateProtocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
 	bgp := niProto.GetOrCreateBgp()
-	for _, nbr := range bgpNbrs {
-		bgpNeighbor := bgp.GetOrCreateNeighbor(nbr.neighborip)
-		bgpNeighbor.GetOrCreateTimers().SetKeepaliveInterval(tc.bgpTimers.keepAliveTimer)
-		bgpNeighbor.GetOrCreateTimers().SetHoldTime(tc.bgpTimers.holdTimer)
+
+	switch tc.bgpConfigType {
+	case bgpConfigTypeNeighbor:
+		for _, nbr := range bgpNbrs {
+			bgpNeighbor := bgp.GetOrCreateNeighbor(nbr.neighborip)
+			bgpNeighbor.GetOrCreateTimers().SetKeepaliveInterval(tc.bgpTimers.keepAliveTimer)
+			bgpNeighbor.GetOrCreateTimers().SetHoldTime(tc.bgpTimers.holdTimer)
+		}
+	case bgpConfigTypePeerGroup:
+		for _, peerGrp := range bgpPeerGroups {
+			bgp.GetOrCreatePeerGroup(peerGrp).GetOrCreateTimers().SetKeepaliveInterval(tc.bgpTimers.keepAliveTimer)
+			bgp.GetOrCreatePeerGroup(peerGrp).GetOrCreateTimers().SetHoldTime(tc.bgpTimers.holdTimer)
+		}
+	default:
+		t.Errorf("incorrect config type: %v", tc.bgpConfigType)
 	}
 	return niProto
 }
@@ -399,16 +421,33 @@ func (tc *testCase) verifyPortsUp(t *testing.T, dev *ondatra.Device) {
 func (tc *testCase) verifyBGPTimers(t *testing.T, dut *ondatra.DUTDevice) {
 	t.Log("Verifying BGP timers")
 	bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()
-	for _, nbr := range bgpNbrs {
-		timerPath := bgpPath.Neighbor(nbr.neighborip).Timers()
-		gotBgptimers := bgpTimers{
-			keepAliveTimer: gnmi.Get(t, dut, timerPath.KeepaliveInterval().State()),
-			holdTimer:      gnmi.Get(t, dut, timerPath.HoldTime().State()),
+	switch tc.bgpConfigType {
+	case bgpConfigTypeNeighbor:
+		for _, nbr := range bgpNbrs {
+			timerPath := bgpPath.Neighbor(nbr.neighborip).Timers()
+			gotBgptimers := bgpTimers{
+				keepAliveTimer: gnmi.Get(t, dut, timerPath.KeepaliveInterval().State()),
+				holdTimer:      gnmi.Get(t, dut, timerPath.HoldTime().State()),
+			}
+			if want := tc.bgpTimers; gotBgptimers != want {
+				t.Errorf("BGP timers: got %v, want %v", gotBgptimers, want)
+			}
 		}
-		if want := tc.bgpTimers; gotBgptimers != want {
-			t.Errorf("BGP timers: got %v, want %v", gotBgptimers, want)
+	case bgpConfigTypePeerGroup:
+		for _, peerGrp := range bgpPeerGroups {
+			timerPath := bgpPath.PeerGroup(peerGrp).Timers()
+			gotBgptimers := bgpTimers{
+				keepAliveTimer: gnmi.Get(t, dut, timerPath.KeepaliveInterval().State()),
+				holdTimer:      gnmi.Get(t, dut, timerPath.HoldTime().State()),
+			}
+			if want := tc.bgpTimers; gotBgptimers != want {
+				t.Errorf("BGP timers: got %v, want %v", gotBgptimers, want)
+			}
 		}
+	default:
+		t.Errorf("incorrect config type: %v", tc.bgpConfigType)
 	}
+
 }
 
 func configureRoutePolicy(t *testing.T, dut *ondatra.DUTDevice, name string, pr oc.E_RoutingPolicy_PolicyResultType) {
@@ -429,6 +468,7 @@ type testCase struct {
 	numRoutes       int32
 	wantEstablished bool
 	bgpTimers       bgpTimers
+	bgpConfigType   bgpConfigType
 }
 
 func (tc *testCase) run(t *testing.T, conf *config, dut *ondatra.DUTDevice, ate *ondatra.ATEDevice) {
@@ -455,6 +495,26 @@ func (tc *testCase) run(t *testing.T, conf *config, dut *ondatra.DUTDevice, ate
 	})
 }
 
+func configureDUTATE(t *testing.T) (*config, *ondatra.DUTDevice, *ondatra.ATEDevice) {
+	dut := ondatra.DUT(t, "dut")
+	ate := ondatra.ATE(t, "ate")
+	// DUT Configuration
+	t.Log("Start DUT interface Config")
+	configureDUT(t, dut)
+	t.Log("Configure RPL")
+	configureRoutePolicy(t, dut, bgpGlobalAttrs.rplName, oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
+	fptest.ConfigureDefaultNetworkInstance(t, dut)
+	t.Logf("Start DUT BGP Config")
+	dutConfPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
+	dutConf := bgpCreateNbr(dut)
+	gnmi.Replace(t, dut, dutConfPath.Config(), dutConf)
+	fptest.LogQuery(t, "DUT BGP Config", dutConfPath.Config(), gnmi.Get(t, dut, dutConfPath.Config()))
+	// ATE Configuration.
+	t.Log("Start ATE Config")
+	otgConfig := configureATE(t, ate)
+	return otgConfig, dut, ate
+}
+
 func TestBgpKeepAliveHoldTimerConfiguration(t *testing.T) {
 	defaultTimer := bgpTimers{
 		keepAliveTimer: 30,
@@ -474,35 +534,38 @@ func TestBgpKeepAliveHoldTimerConfiguration(t *testing.T) {
 		numRoutes:       int32(bgpGlobalAttrs.prefixLimit),
 		wantEstablished: true,
 		bgpTimers:       defaultTimer,
+		bgpConfigType:   bgpConfigTypeNeighbor,
 	}, {
-		name:            "BGP Timers Updated Configuration",
+		name:            "BGP Timers Updated Configuration 10/30",
 		desc:            "BGP configuration with values of 10 and 30",
 		numRoutes:       int32(bgpGlobalAttrs.prefixLimit),
 		wantEstablished: true,
 		bgpTimers:       tenThirty,
+		bgpConfigType:   bgpConfigTypeNeighbor,
 	}, {
-		name:            "BGP Timers Updated Configuration",
+		name:            "BGP Timers Updated Configuration 5/15",
 		desc:            "BGP configuration with values of 5 and 15",
 		numRoutes:       int32(bgpGlobalAttrs.prefixLimit),
 		wantEstablished: true,
 		bgpTimers:       fiveFifteen,
-	}}
-	dut := ondatra.DUT(t, "dut")
-	ate := ondatra.ATE(t, "ate")
-	// DUT Configuration
-	t.Log("Start DUT interface Config")
-	configureDUT(t, dut)
-	t.Log("Configure RPL")
-	configureRoutePolicy(t, dut, bgpGlobalAttrs.rplName, oc.RoutingPolicy_PolicyResultType_ACCEPT_ROUTE)
-	fptest.ConfigureDefaultNetworkInstance(t, dut)
-	t.Logf("Start DUT BGP Config")
-	dutConfPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP")
-	dutConf := bgpCreateNbr(dut)
-	gnmi.Replace(t, dut, dutConfPath.Config(), dutConf)
-	fptest.LogQuery(t, "DUT BGP Config", dutConfPath.Config(), gnmi.Get(t, dut, dutConfPath.Config()))
-	// ATE Configuration.
-	t.Log("Start ATE Config")
-	otgConfig := configureATE(t, ate)
+		bgpConfigType:   bgpConfigTypeNeighbor,
+	}, {
+		name:            "BGP Timers Updated Configuration Peer Group 10/30",
+		desc:            "BGP configuration with values of 10 and 30 for peer groups",
+		numRoutes:       int32(bgpGlobalAttrs.prefixLimit),
+		wantEstablished: true,
+		bgpTimers:       tenThirty,
+		bgpConfigType:   bgpConfigTypePeerGroup,
+	}, {
+		name:            "BGP Timers Updated Configuration Peer Group 5/15",
+		desc:            "BGP configuration with values of 5 and 15 for peer groups",
+		numRoutes:       int32(bgpGlobalAttrs.prefixLimit),
+		wantEstablished: true,
+		bgpTimers:       fiveFifteen,
+		bgpConfigType:   bgpConfigTypePeerGroup,
+	},
+	}
+	otgConfig, dut, ate := configureDUTATE(t)
 	for _, tc := range cases {
 		tc := tc
 		t.Run(tc.name, func(t *testing.T) {


Reviews:
user: login: ram-mac
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T06:28:27Z
user: login: ram-mac
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T08:35:18Z
user: login: ram-mac
body: LGTM
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T13:24:22Z
user: login: nikki-blr
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-19T13:43:14Z
user: login: self-maurya
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-19T14:00:47Z

Review comments:
diff_hunk: @@ -6,29 +6,35 @@ BGP Keepalive and HoldTimer Configuration Test
 
 ## Procedure
 
-*   Establish eBGP sessions as follows between ATE and DUT
-    * The DUT has eBGP peering with ATE port 1 and ATE port 2.
-    * Enable an Accept-route all import-policy/export-policy under the BGP peer-group AFI/SAFI.
-    * The first pair is called the "source" pair, and the second the "destination" pair
+1   Establish eBGP sessions as follows between ATE and DUT
+* The DUT has eBGP peering with ATE port 1 and ATE port 2.
+* Enable an Accept-route all import-policy/export-policy under the BGP peer-group AFI/SAFI.
+* The first pair is called the "source" pair, and the second the "destination" pair
 
-*  Validate BGP session state on DUT using telemetry.
-*  Modify BGP timer values on iBGP peers to 10/30 and on the eBGP peering to 5/15.
-*  Verify that the sessions are established after soft reset.
+2  Validate BGP session state on DUT using telemetry.
+3  Modify BGP timer values on iBGP peers to 10/30 and on the eBGP peering to 5/15.
+4  Verify that the sessions are established after soft reset.
+5  Repeat Step 3 by modifying BGP timers at peer-group level to 10/30(keepalive-interval/hold-time) and on eBGP peering to 5/15(keepalive-interval/hold-time) and verify the timers
 
path: feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md
user: login: ram-mac
body: @singhavnish2516 - Canonical OC path needs to be added here. It is missing.
created_at: 2025-05-19T06:28:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -399,14 +418,27 @@ func (tc *testCase) verifyPortsUp(t *testing.T, dev *ondatra.Device) {
 func (tc *testCase) verifyBGPTimers(t *testing.T, dut *ondatra.DUTDevice) {
 	t.Log("Verifying BGP timers")
 	bgpPath := gnmi.OC().NetworkInstance(deviations.DefaultNetworkInstance(dut)).Protocol(oc.PolicyTypes_INSTALL_PROTOCOL_TYPE_BGP, "BGP").Bgp()
-	for _, nbr := range bgpNbrs {
-		timerPath := bgpPath.Neighbor(nbr.neighborip).Timers()
-		gotBgptimers := bgpTimers{
-			keepAliveTimer: gnmi.Get(t, dut, timerPath.KeepaliveInterval().State()),
-			holdTimer:      gnmi.Get(t, dut, timerPath.HoldTime().State()),
+	if tc.bgpConfigType == bgpConfigTypeNeighbor {
path: feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/bgp_keepalive_and_holdtimer_configuration_test.go
user: login: ram-mac
body: @singhavnish2516 - Could this be handled using switch case? So in future there is a new bgpConfigType then it can be handled easily?
created_at: 2025-05-19T08:35:14Z
author_association: CONTRIBUTOR

PR comments:
user: login: OpenConfigBot
created_at: 2025-05-12T16:47:55Z
body: ## Pull Request Functional Test Report for #4195 / 494c835b2344e6b5c2b3b72879f850a1cbf2e9fa


### Virtual Devices

| Device | Test | Test Documentation | Job | Raw Log |
| --- | --- | --- | --- | --- |
| Arista cEOS | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.ARISTA_cEOS.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> | [13a20d81](https://console.cloud.google.com/cloud-build/builds;region=us-west1/13a20d81-a922-43e9-ab61-071e9f42ed12?project=6848975133) | [Log](https://storage.cloud.google.com/featureprofiles-ci-logs-arista/log-13a20d81-a922-43e9-ab61-071e9f42ed12.txt) |
| Cisco 8000E | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.CISCO_8000E.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> | [a2daf56b](https://console.cloud.google.com/cloud-build/builds;region=us-west1/a2daf56b-0ab7-4c0e-96b8-55664757ca34?project=6848975133) | [Log](https://storage.cloud.google.com/featureprofiles-ci-logs-cisco/log-a2daf56b-0ab7-4c0e-96b8-55664757ca34.txt) |
| Cisco XRd | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.CISCO_XRd.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> | [a8912fda](https://console.cloud.google.com/cloud-build/builds;region=us-west1/a8912fda-6b1e-4cac-b90c-8914a7c1f5d6?project=6848975133) | [Log](https://storage.cloud.google.com/featureprofiles-ci-logs-cisco/log-a8912fda-6b1e-4cac-b90c-8914a7c1f5d6.txt) |
| Juniper ncPTX | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.JUNIPER_ncPTX.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> | [7ccdf5b0](https://console.cloud.google.com/cloud-build/builds;region=us-west1/7ccdf5b0-a421-4b8d-8bee-0f89f71738b8?project=6848975133) | [Log](https://storage.cloud.google.com/featureprofiles-ci-logs-juniper/log-7ccdf5b0-a421-4b8d-8bee-0f89f71738b8.txt) |
| Nokia SR Linux | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.NOKIA_SR_Linux.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> | [51f8103e](https://console.cloud.google.com/cloud-build/builds;region=us-west1/51f8103e-f848-4882-a86e-4050f4500f39?project=6848975133) | [Log](https://storage.cloud.google.com/featureprofiles-ci-logs-nokia/log-51f8103e-f848-4882-a86e-4050f4500f39.txt) |
| Openconfig Lemming | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.OPENCONFIG_Lemming.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> | [d71130b0](https://console.cloud.google.com/cloud-build/builds;region=us-west1/d71130b0-6169-4efb-a7af-49e50825803e?project=6848975133) | [Log](https://storage.cloud.google.com/featureprofiles-ci-logs-openconfig/log-d71130b0-6169-4efb-a7af-49e50825803e.txt) |

### Hardware Devices

| Device | Test | Test Documentation | Raw Log |
| --- | --- | --- | --- |
| Arista 7808 | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.ARISTA_7808.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> |  |
| Cisco 8808 | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.CISCO_8808.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> |  |
| Juniper PTX10008 | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.JUNIPER_PTX10008.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> |  |
| Nokia 7250 IXR-10e | [![status](https://storage.googleapis.com/featureprofiles-ci/badges/4195/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/ZmVhdHVyZS9iZ3AvdGltZXJzL290Z190ZXN0cy9iZ3Bfa2VlcGFsaXZlX2FuZF9ob2xkdGltZXJfY29uZmlndXJhdGlvbl90ZXN0.NOKIA_7250_IXR-10e.svg)](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test)<br /> | [RT-1.10: BGP Keepalive and HoldTimer Configuration Test](https://github.com/openconfig/featureprofiles/blob/494c835b2344e6b5c2b3b72879f850a1cbf2e9fa/feature/bgp/timers/otg_tests/bgp_keepalive_and_holdtimer_configuration_test/README.md)<br /> |  |

[Help](https://gist.github.com/OpenConfigBot/7dadd09b7c3133c9d8bc0d08fcb19b46)
author_association: NONE
user: login: coveralls
created_at: 2025-05-12T16:55:45Z
body: ## Pull Request Test Coverage Report for [Build 15109731616](https://coveralls.io/builds/73731709)


### Details

* **0** of **0**   changed or added relevant lines in **0** files are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage remained the same at **18.04%**

---



|  Totals | [![Coverage Status](https://coveralls.io/builds/73731709/badge)](https://coveralls.io/builds/73731709) |
| :-- | --: |
| Change from base [Build 15105893554](https://coveralls.io/builds/73728367): |  0.0% |
| Covered Lines: | 2478 |
| Relevant Lines: | 13736 |

---
##### 💛  - [Coveralls](https://coveralls.io)

author_association: NONE