mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-27 04:41:26 -07:00
Fix for callback plugins on Python3 when a module returns dictionary keys that aren't strings
This fixes one of the problems reported in https://github.com/ansible/ansible/issues/49343 Upstream Python3 bug for the json traceback: https://bugs.python.org/issue25457 and PR that may fix it: https://github.com/python/cpython/pull/8011
This commit is contained in:
parent
64636d9de0
commit
c817bef3ae
3 changed files with 50 additions and 12 deletions
|
@ -19,6 +19,7 @@
|
|||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import json
|
||||
import re
|
||||
import textwrap
|
||||
import types
|
||||
|
@ -26,6 +27,7 @@ import types
|
|||
from units.compat import unittest
|
||||
from units.compat.mock import patch, mock_open, MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible.plugins.callback import CallbackBase
|
||||
|
||||
|
@ -133,7 +135,7 @@ class TestCallbackResults(unittest.TestCase):
|
|||
self.assertEqual(result, expected_result)
|
||||
|
||||
|
||||
class TestCallbackDumpResults(unittest.TestCase):
|
||||
class TestCallbackDumpResults(object):
|
||||
def test_internal_keys(self):
|
||||
cb = CallbackBase()
|
||||
result = {'item': 'some_item',
|
||||
|
@ -144,26 +146,26 @@ class TestCallbackDumpResults(unittest.TestCase):
|
|||
'bad_dict_key': {'_ansible_internal_blah': 'SENTINEL'},
|
||||
'changed': True}
|
||||
json_out = cb._dump_results(result)
|
||||
self.assertFalse('"_ansible_' in json_out)
|
||||
self.assertFalse('SENTINEL' in json_out)
|
||||
self.assertTrue('LEFTIN' in json_out)
|
||||
assert '"_ansible_' not in json_out
|
||||
assert 'SENTINEL' not in json_out
|
||||
assert 'LEFTIN' in json_out
|
||||
|
||||
def test_exception(self):
|
||||
cb = CallbackBase()
|
||||
result = {'item': 'some_item LEFTIN',
|
||||
'exception': ['frame1', 'SENTINEL']}
|
||||
json_out = cb._dump_results(result)
|
||||
self.assertFalse('SENTINEL' in json_out)
|
||||
self.assertFalse('exception' in json_out)
|
||||
self.assertTrue('LEFTIN' in json_out)
|
||||
assert 'SENTINEL' not in json_out
|
||||
assert 'exception' not in json_out
|
||||
assert 'LEFTIN' in json_out
|
||||
|
||||
def test_verbose(self):
|
||||
cb = CallbackBase()
|
||||
result = {'item': 'some_item LEFTIN',
|
||||
'_ansible_verbose_always': 'chicane'}
|
||||
json_out = cb._dump_results(result)
|
||||
self.assertFalse('SENTINEL' in json_out)
|
||||
self.assertTrue('LEFTIN' in json_out)
|
||||
assert 'SENTINEL' not in json_out
|
||||
assert 'LEFTIN' in json_out
|
||||
|
||||
def test_diff(self):
|
||||
cb = CallbackBase()
|
||||
|
@ -171,8 +173,20 @@ class TestCallbackDumpResults(unittest.TestCase):
|
|||
'diff': ['remove stuff', 'added LEFTIN'],
|
||||
'_ansible_verbose_always': 'chicane'}
|
||||
json_out = cb._dump_results(result)
|
||||
self.assertFalse('SENTINEL' in json_out)
|
||||
self.assertTrue('LEFTIN' in json_out)
|
||||
assert 'SENTINEL' not in json_out
|
||||
assert 'LEFTIN' in json_out
|
||||
|
||||
def test_mixed_keys(self):
|
||||
cb = CallbackBase()
|
||||
result = {3: 'pi',
|
||||
'tau': 6}
|
||||
json_out = cb._dump_results(result)
|
||||
round_trip_result = json.loads(json_out)
|
||||
assert len(round_trip_result) == 2
|
||||
assert '3' in round_trip_result
|
||||
assert 'tau' in round_trip_result
|
||||
assert round_trip_result['3'] == 'pi'
|
||||
assert round_trip_result['tau'] == 6
|
||||
|
||||
|
||||
class TestCallbackDiff(unittest.TestCase):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue