#!/usr/bin/env python
'''
Copyright (C) 2011, Digium, Inc.
Terry Wilson <twilson@digium.com>

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

import sys
import os
import shutil
import logging

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

logging.basicConfig()

from asterisk.test_case import TestCase
from asterisk.sipp import SIPpScenario, SIPpScenarioSequence
from twisted.internet import reactor
from starpy import manager


TEST_DIR = os.path.dirname(os.path.realpath(__file__))
DB_PATH = TEST_DIR + "/realtime.sqlite"
TMP_DB_PATH = "/tmp/realtime.sqlite"
logger = logging.getLogger(__name__)

SIPP_SCENARIOS = [
    {
        'scenario' : 'uac.xml', '-p' : '5061', '-i' : '127.0.0.1', '-s' : 's'
    },
    {
        'scenario' : 'uac.xml', '-p' : '5061', '-i' : '127.0.0.2', '-s' : 's'
    }
]

class SIPRealtimeTest(TestCase):
    def __init__(self):
        TestCase.__init__(self)
        self.passed = False
        self.scenarios_left = [
            "test1",
            "test2",
        ]
        self.create_asterisk()

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

    def ami_connect(self, ami):
        logger.debug("Connected to AMI")
        ami.registerEvent("UserEvent", self.ami_test)
        sequence = SIPpScenarioSequence(test_case = self)
        for scenario_param in SIPP_SCENARIOS:
            sequence.register_scenario(SIPpScenario(TEST_DIR, scenario_param))

        sequence.execute()

    def ami_test(self, ami, event):
        if event.get("userevent") != "CallFromPeer":
            return

        logger.debug("Got UserEvent")
        peername = event.get("peername")
        if peername == None:
            return
        logger.debug("Passed: " + peername)
        self.reset_timeout()
        self.scenarios_left.remove(peername)
        if (len(self.scenarios_left) == 0):
            self.passed = True
            self.stop_reactor()


def main():
    shutil.copyfile(DB_PATH, TMP_DB_PATH)
    test = SIPRealtimeTest()
    test.start_asterisk()
    reactor.run()
    test.stop_asterisk()
    os.remove(TMP_DB_PATH)
    if test.passed:
        return 0
    return 1


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


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