QPIDIT-136: Fix python2.7 site package path in PYTHON3PATH issue
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 790d7d7..0fffdd0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -133,6 +133,16 @@
 install(CODE "execute_process(COMMAND python setup.py install --prefix ${CMAKE_INSTALL_PREFIX}
                               WORKING_DIRECTORY ../)")
 
+# This section is temporary - make links from python3.x site-packages dir to python2.7 files needed by shims
+# when running under Python 3.x.
+install(CODE "MESSAGE(STATUS \"Python install dir: ${CMAKE_INSTALL_PREFIX}/lib/${PYTHON3_DIR_NAME}/site-packages/qpid_interop_test/\")")
+install(CODE "execute_process(COMMAND mkdir -p ${CMAKE_INSTALL_PREFIX}/lib/${PYTHON3_DIR_NAME}/site-packages/qpid_interop_test/
+                              WORKING_DIRECTORY ../)")
+install(CODE "execute_process(COMMAND ln -s ${CMAKE_INSTALL_PREFIX}/lib/${PYTHON2_DIR_NAME}/site-packages/qpid_interop_test/qit_errors.py
+                                            ${CMAKE_INSTALL_PREFIX}/lib/${PYTHON3_DIR_NAME}/site-packages/qpid_interop_test/qit_errors.py)")
+install(CODE "execute_process(COMMAND ln -s ${CMAKE_INSTALL_PREFIX}/lib/${PYTHON2_DIR_NAME}/site-packages/qpid_interop_test/qit_jms_types.py
+                                            ${CMAKE_INSTALL_PREFIX}/lib/${PYTHON3_DIR_NAME}/site-packages/qpid_interop_test/qit_jms_types.py)")
+
 # TODO: THIS IS UGLY!
 # Find a way to handle this as part of the Python install process instead
 # Set the following Python scripts to executable:
diff --git a/setup.py b/setup.py
index 6310d34..e11bea9 100644
--- a/setup.py
+++ b/setup.py
@@ -24,7 +24,7 @@
 SHIM_DIR = '%s/shims' % LIBEXEC_DIR
 
 setup(name='qpid-interop-test',
-      version='0.1',
+      version='0.2',
       description='Test suite for testing interoperability between Qpid AMQP clients',
       author='Apache Qpid',
       author_email='users@qpid.apache.org',
@@ -34,7 +34,8 @@
       
       # Shims, installed into {INSTALL_PREFIX}/libexec/qpid_interop_test/shims/
      data_files=[ ('%s/qpid-proton-python' % SHIM_DIR,
-                      ['shims/qpid-proton-python/src/_compat.py']
+                      ['shims/qpid-proton-python/src/_compat.py',
+                      ]
                   ),
                   ('%s/qpid-proton-python/amqp_types_test' % SHIM_DIR,
                      ['shims/qpid-proton-python/src/amqp_types_test/Receiver.py',
diff --git a/shims/qpid-proton-python/src/jms_hdrs_props_test/Sender.py b/shims/qpid-proton-python/src/jms_hdrs_props_test/Sender.py
index 08a8e98..076920c 100755
--- a/shims/qpid-proton-python/src/jms_hdrs_props_test/Sender.py
+++ b/shims/qpid-proton-python/src/jms_hdrs_props_test/Sender.py
@@ -34,7 +34,7 @@
 import proton
 import proton.handlers
 import proton.reactor
-from qpid_interop_test.qit_common import QitTestTypeMap
+#from qpid_interop_test.qit_common import QitTestTypeMap
 from qpid_interop_test.qit_errors import InteropTestError
 from qpid_interop_test.qit_jms_types import create_annotation
 import _compat
@@ -125,6 +125,14 @@
                     return True
         return False
 
+    @staticmethod
+    def merge_dicts(*dict_args):
+        """Merge two or more dictionaries"""
+        res = {}
+        for this_dict in dict_args:
+            res.update(this_dict)
+        return res
+
     # TODO: Change this to return a list of messages. That way each test can return more than one message
     def _create_message(self, test_value_type, test_value, value_num, hdr_kwargs, hdr_annotations):
         """Create a single message of the appropriate JMS message type"""
@@ -154,8 +162,8 @@
                                    (test_value, test_value_type))
         return proton.Message(id=(self.sent+1),
                               content_type='application/octet-stream',
-                              annotations=QitTestTypeMap.merge_dicts(create_annotation('JMS_MESSAGE_TYPE'),
-                                                                     hdr_annotations),
+                              annotations=JmsHdrsPropsTestSender.merge_dicts(create_annotation('JMS_MESSAGE_TYPE'),
+                                                                             hdr_annotations),
                               **hdr_kwargs)
 
     def _create_jms_bytesmessage(self, test_value_type, test_value, hdr_kwargs, hdr_annotations):
@@ -190,8 +198,8 @@
                               body=body_bytes,
                               inferred=True,
                               content_type='application/octet-stream',
-                              annotations=QitTestTypeMap.merge_dicts(create_annotation('JMS_BYTESMESSAGE_TYPE'),
-                                                                     hdr_annotations),
+                              annotations=JmsHdrsPropsTestSender.merge_dicts(create_annotation('JMS_BYTESMESSAGE_TYPE'),
+                                                                             hdr_annotations),
                               **hdr_kwargs)
 
     def _create_jms_mapmessage(self, test_value_type, test_value, name, hdr_kwargs, hdr_annotations):
@@ -222,8 +230,8 @@
         return proton.Message(id=(self.sent+1),
                               body={name: value},
                               inferred=False,
-                              annotations=QitTestTypeMap.merge_dicts(create_annotation('JMS_MAPMESSAGE_TYPE'),
-                                                                     hdr_annotations),
+                              annotations=JmsHdrsPropsTestSender.merge_dicts(create_annotation('JMS_MAPMESSAGE_TYPE'),
+                                                                             hdr_annotations),
                               **hdr_kwargs)
 
     def _create_jms_objectmessage(self, test_value, hdr_kwargs, hdr_annotations):
@@ -233,8 +241,8 @@
                               body=java_binary,
                               inferred=True,
                               content_type='application/x-java-serialized-object',
-                              annotations=QitTestTypeMap.merge_dicts(create_annotation('JMS_MAPMESSAGE_TYPE'),
-                                                                     hdr_annotations),
+                              annotations=JmsHdrsPropsTestSender.merge_dicts(create_annotation('JMS_MAPMESSAGE_TYPE'),
+                                                                             hdr_annotations),
                               **hdr_kwargs)
 
     @staticmethod
@@ -279,16 +287,16 @@
         return proton.Message(id=(self.sent+1),
                               body=body_list,
                               inferred=True,
-                              annotations=QitTestTypeMap.merge_dicts(create_annotation('JMS_STREAMMESSAGE_TYPE'),
-                                                                     hdr_annotations),
+                              annotations=JmsHdrsPropsTestSender.merge_dicts(create_annotation('JMS_STREAMMESSAGE_TYPE'),
+                                                                             hdr_annotations),
                               **hdr_kwargs)
 
     def _create_jms_textmessage(self, test_value_text, hdr_kwargs, hdr_annotations):
         """Create a JMS text message"""
         return proton.Message(id=(self.sent+1),
                               body=_compat.unicode(test_value_text),
-                              annotations=QitTestTypeMap.merge_dicts(create_annotation('JMS_TEXTMESSAGE_TYPE'),
-                                                                     hdr_annotations),
+                              annotations=JmsHdrsPropsTestSender.merge_dicts(create_annotation('JMS_TEXTMESSAGE_TYPE'),
+                                                                             hdr_annotations),
                               **hdr_kwargs)
 
     def _get_jms_message_header_kwargs(self):