Repository URL to install this package:
|
Version:
0.8.0 ▾
|
#!/usr/bin/env python3
# encoding: UTF-8
# This file is part of turberfield.
#
# Turberfield is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Turberfield is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with turberfield. If not, see <http://www.gnu.org/licenses/>.
import os.path
import tempfile
import textwrap
import unittest
import warnings
from turberfield.ipc.fsdb import token
import turberfield.ipc.message
import turberfield.ipc.types
from turberfield.utils.misc import type_dict
class MessageTester(unittest.TestCase):
def test_loads_empty_payload(self):
data = textwrap.dedent("""
{
_type: turberfield.ipc.message.Header,
id: "aa27e84fa93843658bfcd5b4f9ceee4f",
src: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.sender" ],
dst: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.receiver" ],
hMax: 3,
via: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.hub" ],
hop: 0
}
""")
msg = turberfield.ipc.message.loads(data, types=(type_dict(turberfield.ipc.message.Header)))
self.assertIsInstance(msg, turberfield.ipc.message.Message)
self.assertIsInstance(msg.header, turberfield.ipc.message.Header)
self.assertIsInstance(msg.header.src, turberfield.ipc.types.Address)
self.assertEqual("turberfield.ipc.demo.sender", msg.header.src.application)
self.assertIsInstance(msg.header.dst, turberfield.ipc.types.Address)
self.assertEqual("turberfield.ipc.demo.receiver", msg.header.dst.application)
self.assertIsInstance(msg.header.via, turberfield.ipc.types.Address)
self.assertEqual("turberfield.ipc.demo.hub", msg.header.via.application)
self.assertIsInstance(msg.payload, list)
self.assertFalse(msg.payload)
def test_loads_bad_header(self):
data = textwrap.dedent("""
{
_type: turberfield.ipc.message.Header,
id: "aa27e84fa93843658bfcd5b4f9ceee4f",
src: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.sender" ],
dst: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.receiver" ],
hMax: 3,
hop: 0
}
""")
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
msg = turberfield.ipc.message.loads(data)
self.assertEqual(1, len(w))
self.assertTrue(
issubclass(w[-1].category, UserWarning))
self.assertIn("Parameter mismatch", str(w[-1].message))
def test_loads_bogus_header(self):
data = textwrap.dedent("""
{
_type: turberfield.ipc.message.Bogus,
id: "aa27e84fa93843658bfcd5b4f9ceee4f",
src: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.sender" ],
dst: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.receiver" ],
hMax: 3,
via: [ "turberfield", "tundish", "test", "turberfield.ipc.demo.hub" ],
via: null,
hop: 0
}
""")
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
msg = turberfield.ipc.message.loads(data)
self.assertEqual(2, len(w))
self.assertTrue(
issubclass(w[-1].category, UserWarning))
self.assertIn("not recognised", str(w[0].message))
class AddressingTester(unittest.TestCase):
def setUp(self):
self.root = tempfile.TemporaryDirectory()
def tearDown(self):
if os.path.isdir(self.root.name):
self.root.cleanup()
self.assertFalse(os.path.isdir(self.root.name))
self.root = None
def test_address_no_via(self):
app = "addisonarches.web"
tok = token("file://{}".format(self.root.name), app)
msg = turberfield.ipc.message.parcel(tok, {"text": "Hello World!"})
self.assertEqual(app, msg.header.src.application)
self.assertEqual(msg.header.src, msg.header.dst)
self.assertIs(None, msg.header.via)