Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
controller
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
TFS
controller
Commits
d0d2caf8
Commit
d0d2caf8
authored
1 month ago
by
Waleed Akbar
Browse files
Options
Downloads
Patches
Plain Diff
Refactor collector initialization and add tests for gNMI OpenConfig Collector functionality
parent
faef6e3c
No related branches found
No related tags found
1 merge request
!289
Draft: Resolve "(CTTC) Implement Telemetry Backend Collector gNMI/OpenConfig"
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/telemetry/backend/service/collectors/__init__.py
+7
-7
7 additions, 7 deletions
src/telemetry/backend/service/collectors/__init__.py
src/telemetry/backend/tests/gnmi_oc/test_complete_GnmiOCcollector.py
+126
-0
126 additions, 0 deletions
...ry/backend/tests/gnmi_oc/test_complete_GnmiOCcollector.py
with
133 additions
and
7 deletions
src/telemetry/backend/service/collectors/__init__.py
+
7
−
7
View file @
d0d2caf8
...
@@ -17,10 +17,10 @@ from common.proto.context_pb2 import DeviceDriverEnum
...
@@ -17,10 +17,10 @@ from common.proto.context_pb2 import DeviceDriverEnum
from
telemetry.backend.Config
import
LOAD_ALL_DEVICE_DRIVERS
from
telemetry.backend.Config
import
LOAD_ALL_DEVICE_DRIVERS
from
..collector_api.FilterFields
import
FilterFieldEnum
from
..collector_api.FilterFields
import
FilterFieldEnum
DRIVERS
=
[]
COLLECTOR
=
[]
from
.emulated.EmulatedCollector
import
EmulatedCollector
# pylint: disable=wrong-import-position
from
.emulated.EmulatedCollector
import
EmulatedCollector
# pylint: disable=wrong-import-position
DRIVERS
.
append
(
COLLECTOR
.
append
(
(
EmulatedCollector
,
[
(
EmulatedCollector
,
[
# TODO: multi-filter is not working
# TODO: multi-filter is not working
{
{
...
@@ -35,13 +35,13 @@ DRIVERS.append(
...
@@ -35,13 +35,13 @@ DRIVERS.append(
]))
]))
if
LOAD_ALL_DEVICE_DRIVERS
:
if
LOAD_ALL_DEVICE_DRIVERS
:
from
.gnmi_o
penconfig
.GnmiOpenConfigCollector
import
G
nmi
OpenConfigCollector
# pylint: disable=wrong-import-position
from
.gnmi_o
c
.GnmiOpenConfigCollector
import
G
NMI
OpenConfigCollector
# pylint: disable=wrong-import-position
DRIVERS
.
append
(
COLLECTOR
.
append
(
(
G
nmi
OpenConfigCollector
,
[
(
G
NMI
OpenConfigCollector
,
[
{
{
# Real Packet Router, specifying
OpenConfig
Driver => use
OpenConfig
Driver
# Real Packet Router, specifying
GNMI
Driver => use
Gnmi
Driver
FilterFieldEnum
.
DEVICE_TYPE
:
DeviceTypeEnum
.
PACKET_ROUTER
,
FilterFieldEnum
.
DEVICE_TYPE
:
DeviceTypeEnum
.
PACKET_ROUTER
,
FilterFieldEnum
.
DRIVER
:
DeviceDriverEnum
.
DEVICEDRIVER_
OPENCONFIG
,
FilterFieldEnum
.
DRIVER
:
DeviceDriverEnum
.
DEVICEDRIVER_
GNMI
,
}
}
]))
]))
This diff is collapsed.
Click to expand it.
src/telemetry/backend/tests/gnmi_oc/test_complete_GnmiOCcollector.py
0 → 100644
+
126
−
0
View file @
d0d2caf8
import
logging
import
time
import
pytest
from
telemetry.backend.service.collectors.gnmi_oc.GnmiOpenConfigCollector
import
GNMIOpenConfigCollector
from
.messages
import
creat_basic_sub_request_parameters
# Integration imports
from
..Fixtures
import
context_client
,
device_client
,
service_client
,
kpi_manager_client
from
..add_devices
import
load_topology
logging
.
basicConfig
(
level
=
logging
.
DEBUG
,
format
=
"
%(asctime)s %(levelname)8s [%(name)s - %(funcName)s()]: %(message)s
"
,
)
logger
=
logging
.
getLogger
(
__name__
)
# ----- Add Topology -----
def
test_add_to_topology
(
context_client
,
device_client
,
service_client
):
load_topology
(
context_client
,
device_client
)
@pytest.fixture
def
sub_parameters
():
"""
Fixture to provide subscription parameters.
"""
return
creat_basic_sub_request_parameters
()
@pytest.fixture
def
collector
(
sub_parameters
):
"""
Fixture to create and connect GNMI collector.
"""
collector
=
GNMIOpenConfigCollector
(
username
=
sub_parameters
[
'
username
'
],
password
=
sub_parameters
[
'
password
'
],
insecure
=
sub_parameters
[
'
insecure
'
],
address
=
sub_parameters
[
'
target
'
][
0
],
port
=
sub_parameters
[
'
target
'
][
1
],
)
collector
.
Connect
()
yield
collector
collector
.
Disconnect
()
@pytest.fixture
def
subscription_data
(
sub_parameters
):
"""
Fixture to provide subscription data.
"""
# It should return a list of tuples with subscription parameters.
return
[
(
"
x123
"
,
{
"
kpi
"
:
sub_parameters
[
'
kpi
'
],
"
endpoint
"
:
sub_parameters
[
'
endpoint
'
],
"
resource
"
:
sub_parameters
[
'
resource
'
],
},
float
(
10.0
),
float
(
5.0
),
),
]
def
test_collector_connection
(
collector
):
"""
Test collector connection.
"""
logger
.
info
(
"
----- Testing GNMI OpenConfig Collector Connection -----
"
)
assert
collector
.
connected
is
True
logger
.
debug
(
"
Collector connected: %s
"
,
collector
.
connected
)
def
test_subscription_state
(
collector
,
subscription_data
):
"""
Test state subscription.
"""
logger
.
info
(
"
----- Testing State Subscription -----
"
)
response
=
collector
.
SubscribeState
(
subscription_data
)
logger
.
info
(
"
Subscription started: %s
"
,
subscription_data
)
assert
all
(
response
)
and
isinstance
(
response
,
list
)
def
test_get_state_updates
(
collector
,
subscription_data
):
"""
Test getting state updates.
"""
logger
.
info
(
"
----- Testing State Updates -----
"
)
collector
.
SubscribeState
(
subscription_data
)
logger
.
info
(
"
Requesting state updates for 5 seconds ...
"
)
updates_received
=
[]
for
samples
in
collector
.
GetState
(
duration
=
5.0
,
blocking
=
True
):
logger
.
info
(
"
Received state update: %s
"
,
samples
)
updates_received
.
append
(
samples
)
assert
len
(
updates_received
)
>
0
def
test_unsubscribe_state
(
collector
,
subscription_data
):
"""
Test unsubscribing from state.
"""
logger
.
info
(
"
----- Testing Unsubscribe -----
"
)
collector
.
SubscribeState
(
subscription_data
)
time
.
sleep
(
2
)
# Wait briefly for subscription to be active
response
=
collector
.
UnsubscribeState
(
"
x123
"
)
logger
.
info
(
"
Unsubscribed from state: %s
"
,
subscription_data
)
assert
response
is
True
def
test_full_workflow
(
collector
,
subscription_data
):
"""
Test complete workflow: subscribe, get updates, unsubscribe.
"""
logger
.
info
(
"
----- Testing Full Workflow -----
"
)
# Subscribe
response1
=
collector
.
SubscribeState
(
subscription_data
)
logger
.
info
(
"
Subscription started: %s
"
,
subscription_data
)
assert
all
(
response1
)
and
isinstance
(
response1
,
list
)
# Get updates
logger
.
info
(
"
Requesting state updates for 5 seconds ...
"
)
updates_received
=
[]
for
samples
in
collector
.
GetState
(
duration
=
5.0
,
blocking
=
True
):
logger
.
info
(
"
Received state update: %s
"
,
samples
)
updates_received
.
append
(
samples
)
assert
len
(
updates_received
)
>
0
# Wait for additional updates
logger
.
info
(
"
Waiting for updates for 5 seconds...
"
)
time
.
sleep
(
5
)
# Unsubscribe
response2
=
collector
.
UnsubscribeState
(
"
x123
"
)
logger
.
info
(
"
Unsubscribed from state: %s
"
,
subscription_data
)
assert
response2
is
True
logger
.
info
(
"
----- Workflow test completed -----
"
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment