|  |  |  | import threading
 | 
					
						
							|  |  |  | import time
 | 
					
						
							|  |  |  | import tempfile
 | 
					
						
							|  |  |  | import shutil
 | 
					
						
							|  |  |  | import unittest
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from common.params import Params, ParamKeyType, UnknownKeyName, put_nonblocking, put_bool_nonblocking
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestParams(unittest.TestCase):
 | 
					
						
							|  |  |  |   def setUp(self):
 | 
					
						
							|  |  |  |     self.tmpdir = tempfile.mkdtemp()
 | 
					
						
							|  |  |  |     print("using", self.tmpdir)
 | 
					
						
							|  |  |  |     self.params = Params(self.tmpdir)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def tearDown(self):
 | 
					
						
							|  |  |  |     shutil.rmtree(self.tmpdir)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_put_and_get(self):
 | 
					
						
							|  |  |  |     self.params.put("DongleId", "cb38263377b873ee")
 | 
					
						
							|  |  |  |     assert self.params.get("DongleId") == b"cb38263377b873ee"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_non_ascii(self):
 | 
					
						
							|  |  |  |     st = b"\xe1\x90\xff"
 | 
					
						
							|  |  |  |     self.params.put("CarParams", st)
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams") == st
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_get_cleared_manager_start(self):
 | 
					
						
							|  |  |  |     self.params.put("CarParams", "test")
 | 
					
						
							|  |  |  |     self.params.put("DongleId", "cb38263377b873ee")
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams") == b"test"
 | 
					
						
							|  |  |  |     self.params.clear_all(ParamKeyType.CLEAR_ON_MANAGER_START)
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams") is None
 | 
					
						
							|  |  |  |     assert self.params.get("DongleId") is not None
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_two_things(self):
 | 
					
						
							|  |  |  |     self.params.put("DongleId", "bob")
 | 
					
						
							|  |  |  |     self.params.put("AthenadPid", "123")
 | 
					
						
							|  |  |  |     assert self.params.get("DongleId") == b"bob"
 | 
					
						
							|  |  |  |     assert self.params.get("AthenadPid") == b"123"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_get_block(self):
 | 
					
						
							|  |  |  |     def _delayed_writer():
 | 
					
						
							|  |  |  |       time.sleep(0.1)
 | 
					
						
							|  |  |  |       self.params.put("CarParams", "test")
 | 
					
						
							|  |  |  |     threading.Thread(target=_delayed_writer).start()
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams") is None
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams", True) == b"test"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_unknown_key_fails(self):
 | 
					
						
							|  |  |  |     with self.assertRaises(UnknownKeyName):
 | 
					
						
							|  |  |  |       self.params.get("swag")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with self.assertRaises(UnknownKeyName):
 | 
					
						
							|  |  |  |       self.params.get_bool("swag")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with self.assertRaises(UnknownKeyName):
 | 
					
						
							|  |  |  |       self.params.put("swag", "abc")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with self.assertRaises(UnknownKeyName):
 | 
					
						
							|  |  |  |       self.params.put_bool("swag", True)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_remove_not_there(self):
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams") is None
 | 
					
						
							|  |  |  |     self.params.remove("CarParams")
 | 
					
						
							|  |  |  |     assert self.params.get("CarParams") is None
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_get_bool(self):
 | 
					
						
							|  |  |  |     self.params.remove("IsMetric")
 | 
					
						
							|  |  |  |     self.assertFalse(self.params.get_bool("IsMetric"))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     self.params.put_bool("IsMetric", True)
 | 
					
						
							|  |  |  |     self.assertTrue(self.params.get_bool("IsMetric"))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     self.params.put_bool("IsMetric", False)
 | 
					
						
							|  |  |  |     self.assertFalse(self.params.get_bool("IsMetric"))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     self.params.put("IsMetric", "1")
 | 
					
						
							|  |  |  |     self.assertTrue(self.params.get_bool("IsMetric"))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     self.params.put("IsMetric", "0")
 | 
					
						
							|  |  |  |     self.assertFalse(self.params.get_bool("IsMetric"))
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_put_non_blocking_with_get_block(self):
 | 
					
						
							|  |  |  |     q = Params(self.tmpdir)
 | 
					
						
							|  |  |  |     def _delayed_writer():
 | 
					
						
							|  |  |  |       time.sleep(0.1)
 | 
					
						
							|  |  |  |       put_nonblocking("CarParams", "test", self.tmpdir)
 | 
					
						
							|  |  |  |     threading.Thread(target=_delayed_writer).start()
 | 
					
						
							|  |  |  |     assert q.get("CarParams") is None
 | 
					
						
							|  |  |  |     assert q.get("CarParams", True) == b"test"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_put_bool_non_blocking_with_get_block(self):
 | 
					
						
							|  |  |  |     q = Params(self.tmpdir)
 | 
					
						
							|  |  |  |     def _delayed_writer():
 | 
					
						
							|  |  |  |       time.sleep(0.1)
 | 
					
						
							|  |  |  |       put_bool_nonblocking("CarParams", True, self.tmpdir)
 | 
					
						
							|  |  |  |     threading.Thread(target=_delayed_writer).start()
 | 
					
						
							|  |  |  |     assert q.get("CarParams") is None
 | 
					
						
							|  |  |  |     assert q.get("CarParams", True) == b"1"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def test_params_all_keys(self):
 | 
					
						
							|  |  |  |     keys = Params().all_keys()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # sanity checks
 | 
					
						
							|  |  |  |     assert len(keys) > 20
 | 
					
						
							|  |  |  |     assert len(keys) == len(set(keys))
 | 
					
						
							|  |  |  |     assert b"CarParams" in keys
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__":
 | 
					
						
							|  |  |  |   unittest.main()
 |