From 35b9786e06c129ef4ec89f2dfb1a5056f43ede61 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Fri, 18 Nov 2016 10:23:07 -0500 Subject: [PATCH] Fixing up fact cachine related unit tests --- .../commands/run_fact_cache_receiver.py | 21 ------------ .../commands/test_run_fact_cache_receiver.py | 33 ++++++------------- awx/plugins/fact_caching/tower.py | 2 +- 3 files changed, 11 insertions(+), 45 deletions(-) diff --git a/awx/main/management/commands/run_fact_cache_receiver.py b/awx/main/management/commands/run_fact_cache_receiver.py index 78bf88ffb4..9796e1db6c 100644 --- a/awx/main/management/commands/run_fact_cache_receiver.py +++ b/awx/main/management/commands/run_fact_cache_receiver.py @@ -3,7 +3,6 @@ # Python import logging -from threading import Thread from datetime import datetime from kombu import Connection, Exchange, Queue @@ -17,30 +16,10 @@ from django.utils import timezone # AWX from awx.main.models.fact import Fact from awx.main.models.inventory import Host -from awx.main.socket_queue import Socket logger = logging.getLogger('awx.main.commands.run_fact_cache_receiver') -class FactCacheReceiver(object): - def __init__(self): - self.timestamp = None - - - def run_receiver(self, use_processing_threads=True): - with Socket('fact_cache', 'r') as facts: - for message in facts.listen(): - if 'host' not in message or 'facts' not in message or 'date_key' not in message: - logger.warn('Received invalid message %s' % message) - continue - logger.info('Received message %s' % message) - if use_processing_threads: - wt = Thread(target=self.process_fact_message, args=(message,)) - wt.start() - else: - self.process_fact_message(message) - - class FactBrokerWorker(ConsumerMixin): def __init__(self, connection): diff --git a/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py b/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py index 2042d9e426..87b729dda8 100644 --- a/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py +++ b/awx/main/tests/functional/commands/test_run_fact_cache_receiver.py @@ -10,7 +10,7 @@ import json from django.utils import timezone # AWX -from awx.main.management.commands.run_fact_cache_receiver import FactCacheReceiver +from awx.main.management.commands.run_fact_cache_receiver import FactBrokerWorker from awx.main.models.fact import Fact from awx.main.models.inventory import Host @@ -40,24 +40,24 @@ def check_process_fact_message_module(fact_returned, data, module_name): @pytest.mark.django_db def test_process_fact_message_ansible(fact_msg_ansible): - receiver = FactCacheReceiver() - fact_returned = receiver.process_fact_message(fact_msg_ansible) + receiver = FactBrokerWorker(None) + fact_returned = receiver.process_fact_message(fact_msg_ansible, None) check_process_fact_message_module(fact_returned, fact_msg_ansible, 'ansible') @pytest.mark.django_db def test_process_fact_message_packages(fact_msg_packages): - receiver = FactCacheReceiver() - fact_returned = receiver.process_fact_message(fact_msg_packages) + receiver = FactBrokerWorker(None) + fact_returned = receiver.process_fact_message(fact_msg_packages, None) check_process_fact_message_module(fact_returned, fact_msg_packages, 'packages') @pytest.mark.django_db def test_process_fact_message_services(fact_msg_services): - receiver = FactCacheReceiver() - fact_returned = receiver.process_fact_message(fact_msg_services) + receiver = FactBrokerWorker(None) + fact_returned = receiver.process_fact_message(fact_msg_services, None) check_process_fact_message_module(fact_returned, fact_msg_services, 'services') @@ -77,25 +77,12 @@ def test_process_facts_message_ansible_overwrite(fact_scans, fact_msg_ansible): key = 'ansible.overwrite' value = 'hello world' - receiver = FactCacheReceiver() - receiver.process_fact_message(fact_msg_ansible) + receiver = FactBrokerWorker(None) + receiver.process_fact_message(fact_msg_ansible, None) fact_msg_ansible['facts'][key] = value - fact_returned = receiver.process_fact_message(fact_msg_ansible) + fact_returned = receiver.process_fact_message(fact_msg_ansible, None) fact_obj = Fact.objects.get(id=fact_returned.id) assert key in fact_obj.facts assert fact_msg_ansible['facts'] == (json.loads(fact_obj.facts) if isinstance(fact_obj.facts, unicode) else fact_obj.facts) # TODO: Just make response.data['facts'] when we're only dealing with postgres, or if jsonfields ever fixes this bug - - -# Ensure that the message flows from the socket through to process_fact_message() -@pytest.mark.django_db -def test_run_receiver(mocker, fact_msg_ansible): - mocker.patch("awx.main.socket_queue.Socket.listen", return_value=[fact_msg_ansible]) - - receiver = FactCacheReceiver() - mocker.patch.object(receiver, 'process_fact_message', return_value=None) - - receiver.run_receiver(use_processing_threads=False) - - receiver.process_fact_message.assert_called_once_with(fact_msg_ansible) diff --git a/awx/plugins/fact_caching/tower.py b/awx/plugins/fact_caching/tower.py index 00f280a884..57d413f018 100755 --- a/awx/plugins/fact_caching/tower.py +++ b/awx/plugins/fact_caching/tower.py @@ -53,7 +53,7 @@ class CacheModule(BaseCacheModule): self.connection = Connection(self.callback_connection) self.exchange = Exchange(self.callback_queue, type='direct') self.producer = Producer(self.connection) - + def filter_ansible_facts(self, facts): return dict((k, facts[k]) for k in facts.keys() if k.startswith('ansible_'))