def incoming_connection(request):
    """
    Sets up context for incoming connection into call center.
    """
    #TODO: add priority queue
    try:
        assert(request.POST['currentSessionID'])
        assert(request.POST['uniqueIdentifier'])
        #add to vector queue
        log.info("currentSessionID: %s | uniqueID: %s " % (request.POST['currentSessionID'],request.POST['uniqueIdentifier']))
        publisher_args = {CallMQConfigDev.DEFAULT_ROUTING_KEY_KEY: CallMQConfigDev.DEFAULT_ROUTING_KEY_VALUE,
                          CallMQConfigDev.DEFAULT_DELIVERY_MODE_KEY: CallMQConfigDev.DEFAULT_DELIVERY_MODE,
                          CallMQConfigDev.DEFAULT_EXCHANGE_VALUE_KEY: CallMQConfigDev.DEFAULT_EXCHANGE_VALUE
                         }

        
        publisher = CallCenterVectorPublisher(**publisher_args)
        
        #setup message
        msg = simplejson.dumps({'session': request.POST['currentSessionID'] , 'id': request.POST['uniqueIdentifier']})
        log.info("message dumped as json")
        publisher.publish_to_queue(msg)
        log.info("message pushed to queue")
        #return next state and hold dialog
        return HttpResponse("hold.noprompt") 
    except Exception as e:
        log.error("Module: views.incoming_connection. Error: " + e)
        return HttpResponse("incoming_connection.error") 
 def test_publisher_constructor_without_connection(self):
     self.publisher = CallCenterVectorPublisher(delivery_mode=self.publish_args['delivery_mode'], exchange=self.publish_args['exchange'], 
                                                routing_key=self.publish_args['routing_key'])
     assert(self.publisher.channel())
     assert(self.publisher.delivery_mode())
     assert(self.publisher.connection())
     assert(self.publisher.routing_key())
 def test_publish_constructor_with_defined_connection(self):
     #test with connection definied
     self.publisher = CallCenterVectorPublisher(**self.publish_args)
     assert(self.publisher.channel())
     assert(self.publisher.delivery_mode())
     assert(self.publisher.connection())
     assert(self.publisher.routing_key())
 def test_basic_get(self):
     #setup publisher and consumer
     publisher = CallCenterVectorPublisher(delivery_mode=2, exchange=self.consumer_args['exchange'], 
                                                routing_key=self.consumer_args['routing_key'])
     self.consumer = CallCenterVectorConsumer(**self.consumer_args)
     
     #create random message
     sent_message = str(random.randrange(20))
     #publish
     publisher.publish_to_queue(sent_message)
     
     #delay for good faith
     time.sleep(2.5)
     
     #get message and test for integrity 
     recieved_message = self.consumer.basic_get()
     self.assertEqual(sent_message,recieved_message,"MESSAGES DO NOT MATCH: %s %s" % (sent_message,recieved_message))
 def test_publish(self):
     self.publisher = CallCenterVectorPublisher(**self.publish_args)
     self.consumer = CallCenterVectorConsumer(**self.consumer_args)
     
     #create random message
     created_message = str(random.randrange(20))
     sent_message = self.publisher.publish_to_queue(created_message)
     self.assertEqual(created_message,sent_message,"The created message and returned message do not match: %s %s" % (created_message, sent_message))
     
     #delay for good faith
     time.sleep(2.5)
     #get message and test for integrity 
     recieved_message = self.consumer.basic_get()
     self.assertEqual(created_message,recieved_message,"MESSAGES DO NOT MATCH: %s %s" % (created_message,recieved_message))
class TestPublisher(unittest.TestCase):
    """
    Units tests for the call center vector publisher class.
    """
    
    def setUp(self):
        self.connection_args = {'host':'localhost' ,
                                'port': '5672',
                                'userid':'guest',
                                'password':'******',
                                'virtual_host':'/',
                                'insist': False,
                                'ssl':False}
        
        self.conn = CallCenterVectorConnection(**self.connection_args)
        self.publish_args = {'connection': self.conn,
                             'routing_key': 'test_key',
                             'delivery_mode': 2,
                             'exchange': 'test_exchange'
                             }
        self.consumer_args = {'queue':'test_queue',
                              'exchange' : 'test_exchange',
                              'exchange_type': 'direct',
                              'routing_key': 'test_key'     }
        self.publisher= None
        self.consumer = None
        
        
    def tearDown(self):
        self.conn.close()
        self.publisher.close()
        if self.consumer:
            self.consumer.close()
        
        
    def test_publish_constructor_with_defined_connection(self):
        #test with connection definied
        self.publisher = CallCenterVectorPublisher(**self.publish_args)
        assert(self.publisher.channel())
        assert(self.publisher.delivery_mode())
        assert(self.publisher.connection())
        assert(self.publisher.routing_key())
        
        
    def test_publisher_constructor_without_connection(self):
        self.publisher = CallCenterVectorPublisher(delivery_mode=self.publish_args['delivery_mode'], exchange=self.publish_args['exchange'], 
                                                   routing_key=self.publish_args['routing_key'])
        assert(self.publisher.channel())
        assert(self.publisher.delivery_mode())
        assert(self.publisher.connection())
        assert(self.publisher.routing_key())
        
    
    def test_publish(self):
        self.publisher = CallCenterVectorPublisher(**self.publish_args)
        self.consumer = CallCenterVectorConsumer(**self.consumer_args)
        
        #create random message
        created_message = str(random.randrange(20))
        sent_message = self.publisher.publish_to_queue(created_message)
        self.assertEqual(created_message,sent_message,"The created message and returned message do not match: %s %s" % (created_message, sent_message))
        
        #delay for good faith
        time.sleep(2.5)
        #get message and test for integrity 
        recieved_message = self.consumer.basic_get()
        self.assertEqual(created_message,recieved_message,"MESSAGES DO NOT MATCH: %s %s" % (created_message,recieved_message))