#!/usr/bin/env python
'''
Copyright (C) 2011, Digium, Inc.
Matt Jordan <mjordan@digium.com>

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

import sys
import os
import logging

sys.path.append("lib/python")

from asterisk.asterisk import Asterisk
from asterisk.test_case import TestCase
from asterisk.sipp import SIPpScenario
from twisted.internet import reactor

logger = logging.getLogger(__name__)
TEST_DIR = os.path.dirname(os.path.realpath(__file__))

SIPP_SCENARIO = {
        'scenario' : 'uas1.xml',
        '-p' : '5061'
    }

class HandleResponseAddressIncomplete(TestCase):
    def __init__(self):
        TestCase.__init__(self)
        self.create_asterisk()
        self.sipTest = SIPpScenario(TEST_DIR, SIPP_SCENARIO)

    def ami_connect(self, ami):
        TestCase.ami_connect(self, ami)

        self.ast[ami.id].cli_exec("sip set debug on")
        ami.registerEvent('UserEvent', self.user_event)

        logger.debug("Starting SIP scenario")
        self.sipTest.run(self)

        logger.debug("Originating call from local channel to SIPp peer")
        df = ami.originate("Local/1234@default", "default", "1234", 1, None, "CallId", None, None, None, {}, True)
        df.addErrback(self.handle_originate_failure)

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

        if event['result'] == "pass":
            self.passed = True
            logger.info("Test successfully exited")
        else:
            logger.warn("Test did not successfully exit:")
            logger.warn("result: %s" % (event['result'],))
            logger.warn("status: %s" % (event['status'],))
            self.passed = False

        self.stop_reactor()

    def run(self):
        TestCase.run(self)
        logger.debug("Creating AMI factory")
        self.create_ami_factory()


def main():
    test = HandleResponseAddressIncomplete()

    test.start_asterisk()

    reactor.run()

    test.stop_asterisk()

    if test.passed:
        return 0
    else:
        return 1


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


# vim:sw=4:ts=4:expandtab:textwidth=79
