#!/usr/bin/env python
"""Test res_phoneprov basic ops

Copyright (C) 2014, Fairview 5 Engineering, LLC
George Joseph <george.joseph@fairview5.com>

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

import os
import sys
import logging

from twisted.internet import reactor
from email.parser import HeaderParser
from shutil import copy
from httplib import *
sys.path.append("lib/python")
from asterisk.test_case import TestCase

LOGGER = logging.getLogger(__name__)
PATH = os.path.dirname(os.path.realpath(__file__))

class ResPhoneprovTest(TestCase):
    def __init__(self):
        super(ResPhoneprovTest, self).__init__()
        self.reactor_timeout = 15
        self.create_asterisk()

    def run(self):
        super(ResPhoneprovTest, self).run()
        self.passed = True

        try:
            copy("%s/cfgbase.txt" % PATH,
                "%s/var/lib/asterisk/phoneprov/cfgbase.txt" % self.ast[0].base)
            copy("%s/cfgex.txt" % PATH,
                "%s/var/lib/asterisk/phoneprov/cfgex.txt" % self.ast[0].base)
            self.con = HTTPConnection("127.0.0.1:8088")
            self.con.request("GET", "/phoneprov/cfgbase112233445566.txt")
            self.res = self.con.getresponse()
            self.data = self.res.read()
        except:
            self.stop_reactor()
            self.passed = False
            raise

        if self.res.status != 200:
            LOGGER.error("Status code was %d\n%s." % (self.res.status, self.data))
            self.passed = False
            self.stop_reactor()
            return

        response = HeaderParser().parsestr(self.data)

        for name, value in self.test_config.config['substitutions'].items():
            if response.get(name) != value:
                LOGGER.error("'%s' was '%s' instead of '%s'" % (name, response.get(name), value))
                self.passed = False
                break

        if not self.passed:
            LOGGER.error(response)

        self.stop_reactor()

def main():
    test = ResPhoneprovTest()
    reactor.run()

    if not test.passed:
        return 1

    return 0

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