1616
1717import http .client
1818import socket
19- import time
2019from unittest .mock import call , patch , Mock , DEFAULT
2120
2221import pytest
@@ -66,13 +65,33 @@ def test_proxy_creation(mocked_rpc, proxy, supvisors):
6665 assert proxy .supvisors is supvisors
6766 assert proxy .status is supvisors .context .instances ['10.0.0.1:25000' ]
6867 assert proxy .proxy is not None
68+ assert 0.0 < proxy .last_used < time .monotonic ()
6969 assert proxy .logger is supvisors .logger
7070 assert proxy .local_identifier == supvisors .mapper .local_identifier
7171 assert mocked_rpc .call_args_list == [call ({'SUPERVISOR_SERVER_URL' : 'http://10.0.0.1:25000' ,
7272 'SUPERVISOR_USERNAME' : 'user' ,
7373 'SUPERVISOR_PASSWORD' : 'p@$$w0rd' })]
7474
7575
76+ def test_proxy_proxy (supvisors , proxy ):
77+ """ Test the SupvisorsProxy proxy property. """
78+ # test with non-local proxy
79+ assert proxy .status .supvisors_id .identifier != proxy .local_identifier
80+ ref_proxy = proxy ._proxy
81+ ref_usage = proxy .last_used
82+ assert proxy .proxy is ref_proxy
83+ assert proxy .last_used == ref_usage
84+ # test with local proxy and recent usage
85+ proxy .status = supvisors .context .local_status
86+ assert proxy .status .supvisors_id .identifier == proxy .local_identifier
87+ assert proxy .proxy is ref_proxy
88+ assert proxy .last_used == ref_usage
89+ # test with local proxy and old usage (cannot test everything due to patch)
90+ proxy .last_used = time .monotonic () - LOCAL_PROXY_DURATION - 1
91+ assert proxy .proxy
92+ assert proxy .last_used > ref_usage
93+
94+
7695def test_get_origin (supvisors , proxy ):
7796 """ Test the SupervisorProxy._get_origin method. """
7897 local_instance = supvisors .mapper .local_instance
@@ -82,28 +101,39 @@ def test_get_origin(supvisors, proxy):
82101
83102def test_proxy_xml_rpc (supvisors , proxy ):
84103 """ Test the SupervisorProxy function to send any XML-RPC to a Supervisor instance. """
104+ ref_usage = proxy .last_used
85105 mocked_fct = Mock ()
86106 # test no error
87107 proxy .xml_rpc ('normal' , mocked_fct , ())
88108 assert mocked_fct .call_args_list == [call ()]
109+ assert proxy .last_used > ref_usage
110+ ref_usage = proxy .last_used
89111 mocked_fct .reset_mock ()
90112 proxy .xml_rpc ('normal' , mocked_fct , ('hello' ,))
91113 assert mocked_fct .call_args_list == [call ('hello' )]
114+ assert proxy .last_used > ref_usage
115+ ref_usage = proxy .last_used
92116 mocked_fct .reset_mock ()
93117 proxy .xml_rpc ('normal' , mocked_fct , ('hello' , 28 ))
94118 assert mocked_fct .call_args_list == [call ('hello' , 28 )]
119+ assert proxy .last_used > ref_usage
120+ ref_usage = proxy .last_used
95121 mocked_fct .reset_mock ()
96122 # test minor exception (remote Supvisors instance is operational)
97123 mocked_fct .side_effect = RPCError (code = 58 )
98124 proxy .xml_rpc ('normal' , mocked_fct , ('hello' , 28 ))
99125 assert mocked_fct .call_args_list == [call ('hello' , 28 )]
126+ assert proxy .last_used > ref_usage
127+ ref_usage = proxy .last_used
100128 mocked_fct .reset_mock ()
101129 # test major exception (remote Supvisors instance is NOT operational)
102130 for exc_class in [OSError , HTTPException , xmlrpclib .Fault (77 , 'fault' ), KeyError , ValueError , TypeError ]:
103131 mocked_fct .side_effect = exc_class
104132 with pytest .raises (SupervisorProxyException ):
105133 proxy .xml_rpc ('normal' , mocked_fct , ('hello' ,))
106134 assert mocked_fct .call_args_list == [call ('hello' )]
135+ assert proxy .last_used > ref_usage
136+ ref_usage = proxy .last_used
107137 mocked_fct .reset_mock ()
108138
109139
0 commit comments