#!/usr/bin/env python
# vim: sw=3 et:
'''
Copyright (C) 2011, Digium, Inc.
Matthew Nicholson <mnicholson@digium.com>

This program is free software, distributed under the terms of
the GNU General Public License Version 2.
'''

import sys
import os
import re
import shutil

from twisted.internet import reactor

sys.path.append("lib/python")
from asterisk.asterisk import Asterisk
from asterisk.test_case import TestCase

class PbxMergeContextsTest(TestCase):
   pass_count = 0
   event_count = 0

   def __init__(self):
      TestCase.__init__(self)
      self.create_asterisk(2)

   def ami_connect(self, ami):
      if ami.id == 0:

         print "sending a calls from ast1 to ast2"

         def handle_failure(reason):
            print "error sending originate:"
            print reason.getTraceback()
            self.stop_reactor()

            return reason

         # pbx_ael
         df = ami.originate("sip/ast2/12", "test", "1234", 1)
         df.addErrback(handle_failure)

         # pbx_config
         df = ami.originate("sip/ast2/123", "test", "1234", 1)
         df.addErrback(handle_failure)

         # pbx_lua
         df = ami.originate("sip/ast2/1234", "test", "1234", 1)
         df.addErrback(handle_failure)
      else:
         ami.registerEvent('UserEvent', self.test_result)

   def test_result(self, ami, event):
      if event['userevent'] != 'TestResult':
         return

      self.event_count += 1

      if event['result'] == "pass":
         print "success"
         self.pass_count += 1
      else:
         print "error:"
         print "result: %s" % (event['result'],)
         print "error: %s" % (event['error'],)

      self.are_we_there_yet()

   def are_we_there_yet(self):
      if event_count == 3:
         if pass_count == 3:
            self.passed = True

         self.stop_reactor()

   def run(self):
      TestCase.run(self)
      self.create_ami_factory(2)


def main():
   test = PbxMergeContextsTest()
   test.start_asterisk()
   reactor.run()
   test.stop_asterisk()

   if not test.passed:
      return 1

   return 0

if __name__ == "__main__":
   sys.exit(main() or 0)

