mirror of
https://github.com/ansible/awx.git
synced 2026-04-05 01:59:25 -02:30
Fixing up fact cachine related unit tests
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
# Python
|
# Python
|
||||||
import logging
|
import logging
|
||||||
from threading import Thread
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from kombu import Connection, Exchange, Queue
|
from kombu import Connection, Exchange, Queue
|
||||||
@@ -17,30 +16,10 @@ from django.utils import timezone
|
|||||||
# AWX
|
# AWX
|
||||||
from awx.main.models.fact import Fact
|
from awx.main.models.fact import Fact
|
||||||
from awx.main.models.inventory import Host
|
from awx.main.models.inventory import Host
|
||||||
from awx.main.socket_queue import Socket
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.commands.run_fact_cache_receiver')
|
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):
|
class FactBrokerWorker(ConsumerMixin):
|
||||||
|
|
||||||
def __init__(self, connection):
|
def __init__(self, connection):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import json
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
# AWX
|
# 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.fact import Fact
|
||||||
from awx.main.models.inventory import Host
|
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
|
@pytest.mark.django_db
|
||||||
def test_process_fact_message_ansible(fact_msg_ansible):
|
def test_process_fact_message_ansible(fact_msg_ansible):
|
||||||
receiver = FactCacheReceiver()
|
receiver = FactBrokerWorker(None)
|
||||||
fact_returned = receiver.process_fact_message(fact_msg_ansible)
|
fact_returned = receiver.process_fact_message(fact_msg_ansible, None)
|
||||||
|
|
||||||
check_process_fact_message_module(fact_returned, fact_msg_ansible, 'ansible')
|
check_process_fact_message_module(fact_returned, fact_msg_ansible, 'ansible')
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_process_fact_message_packages(fact_msg_packages):
|
def test_process_fact_message_packages(fact_msg_packages):
|
||||||
receiver = FactCacheReceiver()
|
receiver = FactBrokerWorker(None)
|
||||||
fact_returned = receiver.process_fact_message(fact_msg_packages)
|
fact_returned = receiver.process_fact_message(fact_msg_packages, None)
|
||||||
|
|
||||||
check_process_fact_message_module(fact_returned, fact_msg_packages, 'packages')
|
check_process_fact_message_module(fact_returned, fact_msg_packages, 'packages')
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_process_fact_message_services(fact_msg_services):
|
def test_process_fact_message_services(fact_msg_services):
|
||||||
receiver = FactCacheReceiver()
|
receiver = FactBrokerWorker(None)
|
||||||
fact_returned = receiver.process_fact_message(fact_msg_services)
|
fact_returned = receiver.process_fact_message(fact_msg_services, None)
|
||||||
|
|
||||||
check_process_fact_message_module(fact_returned, fact_msg_services, 'services')
|
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'
|
key = 'ansible.overwrite'
|
||||||
value = 'hello world'
|
value = 'hello world'
|
||||||
|
|
||||||
receiver = FactCacheReceiver()
|
receiver = FactBrokerWorker(None)
|
||||||
receiver.process_fact_message(fact_msg_ansible)
|
receiver.process_fact_message(fact_msg_ansible, None)
|
||||||
|
|
||||||
fact_msg_ansible['facts'][key] = value
|
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)
|
fact_obj = Fact.objects.get(id=fact_returned.id)
|
||||||
assert key in fact_obj.facts
|
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
|
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)
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ class CacheModule(BaseCacheModule):
|
|||||||
self.connection = Connection(self.callback_connection)
|
self.connection = Connection(self.callback_connection)
|
||||||
self.exchange = Exchange(self.callback_queue, type='direct')
|
self.exchange = Exchange(self.callback_queue, type='direct')
|
||||||
self.producer = Producer(self.connection)
|
self.producer = Producer(self.connection)
|
||||||
|
|
||||||
def filter_ansible_facts(self, facts):
|
def filter_ansible_facts(self, facts):
|
||||||
return dict((k, facts[k]) for k in facts.keys() if k.startswith('ansible_'))
|
return dict((k, facts[k]) for k in facts.keys() if k.startswith('ansible_'))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user