diagnostic_updater_test.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 
4 """
5 @author Brice Rebsamen <brice [dot] rebsamen [gmail]>
6 """
7 
8 import roslib
9 roslib.load_manifest('diagnostic_updater')
10 import rospy
11 from diagnostic_updater import *
12 import unittest
13 import time
14 
16  def __init__(self):
17  DiagnosticTask.__init__(self, "classFunction")
18 
19  def run(self, stat):
20  stat.summary(0, "Test is running")
21  stat.add("Value", "%f" % 5)
22  stat.add("String", "Toto")
23  stat.add("Floating", 5.55)
24  stat.add("Integer", 5)
25  stat.add("Formatted", "%s %i", "Hello", 5)
26  stat.add("Bool", True)
27  return stat
28 
29 class TestClass:
30  def wrapped(stat):
31  return stat
32 
33 
34 class TestDiagnosticStatusWrapper(unittest.TestCase):
35 
37  updater = Updater()
38 
39  c = TestClass()
40  updater.add("wrapped", c.wrapped)
41 
42  cf = ClassFunction()
43  updater.add(cf)
44 
45 
48 
49  message = "dummy"
50  level = 1
51  stat.summary(level, message)
52  self.assertEqual(message, stat.message, "DiagnosticStatusWrapper::summary failed to set message")
53  self.assertEqual(level, stat.level, "DiagnosticStatusWrapper::summary failed to set level")
54 
55  stat.add("toto", "%.1f" % 5.0)
56  stat.add("baba", 5)
57  stat.add("foo", "%05i" % 27)
58  stat.add("bool", True)
59  stat.add("bool2", False)
60 
61  self.assertEqual("5.0", stat.values[0].value, "Bad value, adding a value with addf")
62  self.assertEqual("5", stat.values[1].value, "Bad value, adding a string with add")
63  self.assertEqual("00027", stat.values[2].value, "Bad value, adding a string with addf")
64  self.assertEqual("toto", stat.values[0].key, "Bad label, adding a value with add")
65  self.assertEqual("baba", stat.values[1].key, "Bad label, adding a string with add")
66  self.assertEqual("foo", stat.values[2].key, "Bad label, adding a string with addf")
67 
68  self.assertEqual("bool", stat.values[3].key, "Bad label, adding a true bool key with add")
69  self.assertEqual("True", stat.values[3].value, "Bad value, adding a true bool with add")
70 
71  self.assertEqual("bool2", stat.values[4].key, "Bad label, adding a false bool key with add")
72  self.assertEqual("False", stat.values[4].value, "Bad value, adding a false bool with add")
73 
74 
76  freq_bound = {'min': 10, 'max': 20}
77 
78  fs = FrequencyStatus(FrequencyStatusParam(freq_bound, 0.5, 2))
79 
80  stat = [DiagnosticStatusWrapper() for i in range(5)]
81  fs.tick()
82  time.sleep(.02)
83  stat[0] = fs.run(stat[0]) # Should be too fast, 20 ms for 1 tick, lower limit should be 33ms.
84  time.sleep(.05)
85  fs.tick()
86  stat[1] = fs.run(stat[1]) # Should be good, 70 ms for 2 ticks, lower limit should be 66 ms.
87  time.sleep(.3)
88  fs.tick()
89  stat[2] = fs.run(stat[2]) # Should be good, 350 ms for 2 ticks, upper limit should be 400 ms.
90  time.sleep(.15)
91  fs.tick()
92  stat[3] = fs.run(stat[3]) # Should be too slow, 450 ms for 2 ticks, upper limit should be 400 ms.
93  fs.clear()
94  stat[4] = fs.run(stat[4]) # Should be good, just cleared it.
95 
96  self.assertEqual(1, stat[0].level, "max frequency exceeded but not reported")
97  self.assertEqual(0, stat[1].level, "within max frequency but reported error")
98  self.assertEqual(0, stat[2].level, "within min frequency but reported error")
99  self.assertEqual(1, stat[3].level, "min frequency exceeded but not reported")
100  self.assertEqual(2, stat[4].level, "freshly cleared should fail")
101  self.assertEqual("", stat[0].name, "Name should not be set by FrequencyStatus")
102  self.assertEqual("Frequency Status", fs.getName(), "Name should be \"Frequency Status\"")
103 
104 
106  ts = TimeStampStatus()
107 
108  stat = [DiagnosticStatusWrapper() for i in range(5)]
109  stat[0] = ts.run(stat[0])
110  ts.tick(rospy.Time.now().to_sec() + 2)
111  stat[1] = ts.run(stat[1])
112  ts.tick(rospy.Time.now())
113  stat[2] = ts.run(stat[2])
114  ts.tick(rospy.Time.now().to_sec() - 4)
115  stat[3] = ts.run(stat[3])
116  ts.tick(rospy.Time.now().to_sec() - 6)
117  stat[4] = ts.run(stat[4])
118 
119  self.assertEqual(1, stat[0].level, "no data should return a warning")
120  self.assertEqual(2, stat[1].level, "too far future not reported")
121  self.assertEqual(0, stat[2].level, "now not accepted")
122  self.assertEqual(0, stat[3].level, "4 seconds ago not accepted")
123  self.assertEqual(2, stat[4].level, "too far past not reported")
124  self.assertEqual("", stat[0].name, "Name should not be set by TimeStapmStatus")
125  self.assertEqual("Timestamp Status", ts.getName(), "Name should be \"Timestamp Status\"")
126 
127 
128 if __name__ == '__main__':
129  rospy.init_node("test_node")
130  unittest.main()
diagnostic_updater::FrequencyStatus
A diagnostic task that monitors the frequency of an event.
Definition: update_functions.h:136
diagnostic_updater::TimeStampStatus
Diagnostic task to monitor the interval between events.
Definition: update_functions.h:298
diagnostic_updater_test.TestDiagnosticStatusWrapper.testDiagnosticStatusWrapper
def testDiagnosticStatusWrapper(self)
Definition: diagnostic_updater_test.py:46
diagnostic_updater_test.TestDiagnosticStatusWrapper.testTimeStampStatus
def testTimeStampStatus(self)
Definition: diagnostic_updater_test.py:105
diagnostic_updater::Updater
Manages a list of diagnostic tasks, and calls them in a rate-limited manner.
Definition: diagnostic_updater.h:395
diagnostic_updater_test.TestClass.wrapped
def wrapped(stat)
Definition: diagnostic_updater_test.py:30
diagnostic_updater::DiagnosticTask
DiagnosticTask is an abstract base class for collecting diagnostic data.
Definition: diagnostic_updater.h:98
diagnostic_updater_test.TestClass
Definition: diagnostic_updater_test.py:29
diagnostic_updater_test.TestDiagnosticStatusWrapper.testDiagnosticUpdater
def testDiagnosticUpdater(self)
Definition: diagnostic_updater_test.py:36
diagnostic_updater_test.ClassFunction
Definition: diagnostic_updater_test.py:15
diagnostic_updater_test.ClassFunction.__init__
def __init__(self)
Definition: diagnostic_updater_test.py:16
diagnostic_updater_test.TestDiagnosticStatusWrapper.testFrequencyStatus
def testFrequencyStatus(self)
Definition: diagnostic_updater_test.py:75
diagnostic_updater_test.TestDiagnosticStatusWrapper
Definition: diagnostic_updater_test.py:34
diagnostic_updater_test.ClassFunction.run
def run(self, stat)
Definition: diagnostic_updater_test.py:19
diagnostic_updater::DiagnosticStatusWrapper
Wrapper for the diagnostic_msgs::DiagnosticStatus message that makes it easier to update.
Definition: DiagnosticStatusWrapper.h:98
diagnostic_updater::FrequencyStatusParam
A structure that holds the constructor parameters for the FrequencyStatus class.
Definition: update_functions.h:83


diagnostic_updater
Author(s): Kevin Watts, Brice Rebsamen , Jeremy Leibs, Blaise Gassend
autogenerated on Tue Nov 15 2022 03:17:19