def test_pid_decision_policy(): current_time = datetime.now() zookeeper_get_payload = { 'pid_iterm': 0, 'pid_last_error': 0, 'pid_last_time': (current_time - timedelta(seconds=600)).strftime('%s'), } with contextlib.nested( mock.patch('paasta_tools.utils.KazooClient', autospec=True, return_value=mock.Mock(get=mock.Mock( side_effect=lambda x: (zookeeper_get_payload[x.split('/')[-1]], None)))), mock.patch('paasta_tools.autoscaling.autoscaling_service_lib.datetime', autospec=True), mock.patch('paasta_tools.utils.load_system_paasta_config', autospec=True, return_value=mock.Mock(get_zk_hosts=mock.Mock())), ) as ( mock_zk_client, mock_datetime, _, ): mock_datetime.now.return_value = current_time assert autoscaling_service_lib.pid_decision_policy('/autoscaling/fake-service/fake-instance', 10, 1, 100, 0.0) == 0 assert autoscaling_service_lib.pid_decision_policy('/autoscaling/fake-service/fake-instance', 10, 1, 100, 0.2) == 1 assert autoscaling_service_lib.pid_decision_policy('/autoscaling/fake-service/fake-instance', 10, 1, 100, -0.2) == -1 mock_zk_client.return_value.set.assert_has_calls([ mock.call('/autoscaling/fake-service/fake-instance/pid_iterm', '0.0'), mock.call('/autoscaling/fake-service/fake-instance/pid_last_error', '0.0'), mock.call('/autoscaling/fake-service/fake-instance/pid_last_time', '%s' % current_time.strftime('%s')), ], any_order=True)