def test_make_message_missing_fields(self):
     """
     The correct fields must all exist in the provided data dictionary.
     """
     with self.assertRaises(ValueError) as cm:
         make_message(Ping, {'foo': 1, 'bar': 2})
     ex = cm.exception
     self.assertEqual(2, ex.args[0])
     self.assertEqual(ERRORS[2], ex.args[1])
     details = ex.args[2]
     self.assertEqual('Missing field.', details['uuid'])
     self.assertEqual('Missing field.', details['node'])
     self.assertEqual('Missing field.', details['version'])
 def test_make_message_bad_values(self):
     """
     The values to be used to instantiate the class should be valid. If not
     the correct exception is raised.
     """
     with self.assertRaises(ValueError) as cm:
         make_message(Ping, {'uuid': 1, 'node': 2, 'version': 3})
     ex = cm.exception
     self.assertEqual(2, ex.args[0])
     self.assertEqual(ERRORS[2], ex.args[1])
     details = ex.args[2]
     self.assertEqual('Invalid value.', details['uuid'])
     self.assertEqual('Invalid value.', details['node'])
     self.assertEqual('Invalid value.', details['version'])
 def test_make_message(self):
     """
     The good case returns an instance of the given class based upon the
     data provided.
     """
     uuid = str(uuid4())
     node = '9876543210abcd'.decode('hex')
     result = make_message(Ping, {'uuid': uuid, 'node': node,
                                  'version': '0.1'})
     self.assertIsInstance(result, Ping)
     self.assertEqual(uuid, result.uuid)
     self.assertEqual(node, result.node)
     self.assertEqual('0.1', result.version)