Skip to content

Commit

Permalink
Added testcase to test safety mode config during init
Browse files Browse the repository at this point in the history
  • Loading branch information
Arun-Prasad-V committed Mar 18, 2024
1 parent 5c72818 commit 79d62f5
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 4 deletions.
105 changes: 105 additions & 0 deletions realsense2_camera/test/live_camera/test_d585s_safety_mode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Copyright 2023 Intel Corporation. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


import os
import sys

import pytest

from realsense2_camera_msgs.msg import Metadata as msg_Metadata

sys.path.append(os.path.abspath(os.path.dirname(__file__)+"/../utils"))
import pytest_rs_utils
from pytest_rs_utils import launch_descr_with_parameters, get_node_heirarchy

import pytest_live_camera_utils

test_params_test_default_run_mode = {
'camera_name': 'D585S',
'device_type': 'D585S',
'initial_reset': 'true',
'safety_camera.safety_mode': 0,
'depth_module.exposure': 1000,
'depth_module.enable_auto_exposure': 'false',
}
test_params_test_run_to_standby_mode = {
'camera_name': 'D585S',
'device_type': 'D585S',
'safety_camera.safety_mode': 1,
'depth_module.exposure': 2000,
'depth_module.enable_auto_exposure': 'false',
}
test_params_test_standby_to_service_mode = {
'camera_name': 'D585S',
'device_type': 'D585S',
'safety_camera.safety_mode': 2,
'depth_module.exposure': 3000,
'depth_module.enable_auto_exposure': 'false',
}
'''
The test was implemented to check whether ROS wrapper can automatically switch to service mode during
launch of the node and configure the launch params and again switch back to user requested mode.
'''
@pytest.mark.parametrize("launch_descr_with_parameters", [
pytest.param(test_params_test_default_run_mode, marks=pytest.mark.d585s),
pytest.param(test_params_test_run_to_standby_mode, marks=pytest.mark.d585s),
pytest.param(test_params_test_standby_to_service_mode, marks=pytest.mark.d585s),
],indirect=True)
@pytest.mark.launch(fixture=launch_descr_with_parameters)
class TestD585s_TestSafetyMode(pytest_rs_utils.RsTestBaseClass):
def test_d585s_test_safety_mode(self,launch_descr_with_parameters):
params = launch_descr_with_parameters[1]
if pytest_live_camera_utils.check_if_camera_connected(params['device_type']) == False:
print("Device not found? : " + params['device_type'])
assert False
return

try:
'''
initialize, run and check the data
'''
print("Starting camera test...")
self.init_test("RsTest"+params['camera_name'])
self.wait_for_node(params['camera_name'])
self.create_param_ifs(get_node_heirarchy(params))

if params['initial_reset'] == 'true':
self.spin_for_time(wait_time=10)
else:
self.spin_for_time(wait_time=5)

assert self.get_integer_param('safety_camera.safety_mode') == params['safety_camera.safety_mode']
assert self.get_integer_param('depth_module.exposure') == params['depth_module.exposure']

depth_metadata = msg_Metadata()
depth_metadata.json_data = '{"actual_exposure":'+str(params['depth_module.exposure']) +'}'

themes = [
{'topic':get_node_heirarchy(params)+'/depth/metadata',
'msg_type':msg_Metadata,
'expected_data_chunks':1,
'data':depth_metadata
}
]

ret = self.run_test(themes)
assert ret[0], ret[1]
assert self.process_data(themes)

finally:
#this step is important because the test will fail next time
pytest_rs_utils.kill_realsense2_camera_node()
self.shutdown()

13 changes: 9 additions & 4 deletions realsense2_camera/test/utils/pytest_rs_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -384,13 +384,14 @@ def extrinsicsTest(data, gt_data):
def metadatTest(data, gt_data):
jdata = json.loads(data.json_data)
gt_jdata = json.loads(gt_data.json_data)
if jdata['frame_number'] != gt_jdata['frame_number']:

if 'frame_number' in gt_jdata and jdata['frame_number'] != gt_jdata['frame_number']:
msg = 'Frame no not matching: ' + str(jdata['frame_number']) + " and " + str(gt_jdata['frame_number'])
return False, msg
if jdata['clock_domain'] != gt_jdata['clock_domain']:
if 'clock_domain' in gt_jdata and jdata['clock_domain'] != gt_jdata['clock_domain']:
msg = 'clock_domain not matching: ' + str(jdata['clock_domain']) + " and " + str(gt_jdata['clock_domain'])
return False, msg
if jdata['frame_timestamp'] != gt_jdata['frame_timestamp']:
if 'frame_timestamp' in gt_jdata and jdata['frame_timestamp'] != gt_jdata['frame_timestamp']:
msg = 'frame_timestamp not matching: ' + str(jdata['frame_timestamp']) + " and " + str(gt_jdata['frame_timestamp'])
return False, msg
'''
Expand All @@ -401,9 +402,13 @@ def metadatTest(data, gt_data):
msg = 'frame_counter not matching: ' + str(jdata['frame_counter']) + " and " + str(gt_jdata['frame_counter'])
return False, msg
'''
if jdata['time_of_arrival'] != gt_jdata['time_of_arrival']:
if 'time_of_arrival' in gt_jdata and jdata['time_of_arrival'] != gt_jdata['time_of_arrival']:
msg = 'time_of_arrival not matching: ' + str(jdata['time_of_arrival']) + " and " + str(gt_jdata['time_of_arrival'])
return False, msg
if 'actual_exposure' in gt_jdata and jdata['actual_exposure'] != gt_jdata['actual_exposure']:
msg = 'actual_exposure not matching: ' + str(jdata['actual_exposure']) + " and " + str(gt_jdata['actual_exposure'])
return False, msg

return True, ""


Expand Down

0 comments on commit 79d62f5

Please sign in to comment.