#!/usr/bin/env python
'''
Copyright (C) 2010, Digium, Inc.
Erin Spiceland <espiceland@digium.com>

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

import logging
import sys

from twisted.internet import reactor

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

LOGGER = logging.getLogger(__name__)


class FastAGIControlStreamFileTest(TestCase):
    def __init__(self):
        TestCase.__init__(self)

        self.create_asterisk()
        self.create_fastagi_factory()

    def on_failure(self, reason):
        LOGGER.error('Could not run CONTROL STREAM FILE: ', reason.getTraceback())
        self.agi.finish()

    # result of 0 indicates success
    def finish_test(self, result):
        LOGGER.debug("Finished.")
        try:
            if result[0] == 0 and result[1] is None or result[1] == -1:
                self.passed = True
            else:
                LOGGER.error("Unexpected result '%r'", result)
        finally:
            self.stop_reactor()

    def fastagi_connect(self, agi):
        self.agi = agi
        LOGGER.debug("Connection established.")
        return agi.controlStreamFile("beep", "").addCallback(
            self.finish_test)

    def launch_test(self):
        LOGGER.debug("Originating call to begin test.")
        self.ast[0].cli_originate("Local/504@agitest extension echo@agitest")

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


def main():
    test = FastAGIControlStreamFileTest()
    test.start_asterisk()
    reactor.run()
    test.stop_asterisk()
    if test.passed is not True:
        return 1

    return 0

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