"""
Description:
    This file is used to run testcase
    lanqinglong@huawei.com

#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
#
"""
from environment import environment
import os
import time
import pexpect
import re
import requests
import json

class client( environment ):

    def __init__( self ):
        environment.__init__( self )
        self.loginfo = environment()
        self.testcase = ''

    def RunScript( self, handle, testname, timeout=300 ):
        """
        Run ONOS Test Script
        Parameters:
        testname: ONOS Testcase Name
        masterusername: The server username of running ONOS
        masterpassword: The server password of running ONOS
        """
        self.testcase = testname
        self.ChangeTestCasePara( testname, self.masterusername, self.masterpassword )
        runhandle = handle
        runtest = self.home + "/OnosSystemTest/TestON/bin/cli.py run " + testname
        runhandle.sendline(runtest)
        circletime = 0
        lastshowscreeninfo = ''
        while True:
            Result = runhandle.expect(["PEXPECT]#", pexpect.EOF, pexpect.TIMEOUT])
            curshowscreeninfo = runhandle.before
            if (len(lastshowscreeninfo) != len(curshowscreeninfo)):
                self.loginfo.log(str(curshowscreeninfo)[len(lastshowscreeninfo)::])
                lastshowscreeninfo = curshowscreeninfo
            if Result == 0:
                print "Done!"
                return
            time.sleep(1)
            circletime += 1
            if circletime > timeout:
                break
        self.loginfo.log( "Timeout when running the test, please check!" )

    def onosstart( self ):
        #This is the compass run machine user&pass,you need to modify

        print "Test Begin....."
        self.OnosConnectionSet()
        masterhandle = self.SSHlogin(self.localhost, self.masterusername,
                                    self.masterpassword)
        self.OnosEnvSetup( masterhandle )
        return masterhandle

    def onosclean( self, handle ):
        self.SSHRelease( handle )
        self.loginfo.log('Release onos handle Successful')

    def push_results_to_db( self, payload, pushornot = 1):
        if pushornot != 1:
            return 1
        url = self.Result_DB + "/results"
        params = {"project_name": "functest", "case_name": "ONOS-" + self.testcase,
                  "pod_name": 'huawei-build-2', "details": payload}
        headers = {'Content-Type': 'application/json'}
        try:
            r = requests.post(url, data=json.dumps(params), headers=headers)
            self.loginfo.log(r)
        except:
            self.loginfo.log('Error pushing results into Database')