#!/usr/bin/env python
'''
Copyright (C) 2012, Digium, Inc.
Mark Michelson <mmichelson@digium.com>

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

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

from twisted.internet import reactor

from asterisk.asterisk import Asterisk
from asterisk.test_case import TestCase

class func_presencestate_test(TestCase):
    def __init__(self):
        TestCase.__init__(self)
        self.create_asterisk()
        self.contexts = [
            "nominal1",
            "base64read",
            "base64write"]
        self.passes = []
        self.passed = False

    def passOrFail(self, ami, event):
        if not event.get("userevent") == "Presence":
            return

        self.passes.append(event.get("pass"))

        if len(self.passes) != len(self.contexts):
            return

        for result in self.passes:
            if result == "0":
                reactor.stop()
                return

        self.passed = True
        reactor.stop()

    def ami_connect(self, ami):
        self.ami[0].registerEvent("UserEvent", self.passOrFail)
        for context in self.contexts:
            self.ami[0].originate(channel = "Local/1@%s" %(context), application = "Echo")

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

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

    if not test.passed:
        return 1
    return 0

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