| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 | #!/usr/bin/python# -*- coding: utf-8 -*-  import os, random, sys, time, json, getopt, threadingsys.path.append('../../stm32_prs/stm32_prs/branches/epu_tester')import extdevicesimport checklogfilereload(sys)  sys.setdefaultencoding('utf8')login = "admin"password = "12345"def print_test_list():    print "\t\t1 - ON/OFF test\r\n\        \t2 - RAM buffer test\r\n\        \t3 - Log file download test"def usage():    print "Usage: test_log.py -t <test number> <ip>\r\n\        --help, -h \t\tprint usage info\r\n\        --test, -t \t\ttest number to run"    print_test_list()def ping(hostname):    response = os.system("ping -q -c1 -W1 " + hostname  + ">> /dev/null")    if response == 0:        return True    else:        return False        def do_login():	os.system("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt -d \"login=%s&password=%s\" http://%s/login.cgi > /dev/null" % (login, password, ip))def do_logout():	os.system("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt http://%s/logout.cgi > /dev/null" %ip)def do_reset_sett():	os.system("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt  \"http://%s/reset.cgi\" > /dev/null" %ip)def log_get_page(page):	return os.popen("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/history.cgi?page=%s&_=%s\" --compressed | jq -r -j '.page'" % (ip, page, random.randint(0, 0xFFFF))).read()def log_get_string(page, string):	return os.popen("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/history.cgi?page=%s&_=%s\" --compressed | jq -r -j '.page[%s]'" % (ip, page, random.randint(0, 0xFFFF), string)).read().decode('utf-8')def log_get_ramstrnum():	page = log_get_pagesnum()	return os.popen("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/history.cgi?page=%s&_=%s\" --compressed | jq -r -j '.page | length'" % (ip, page, random.randint(0, 0xFFFF))).read()def log_get_pagesnum():	return os.popen("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/history.cgi?page=1&_=%s\" --compressed | jq -r -j '.pages'" % (ip, random.randint(0, 0xFFFF))).read()def log_download(path):        print "Downloading log file..."	if 0 == os.system("curl -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/history.cgi?page=all&_=%s\" --output %s --progress" % (ip, random.randint(0, 0xFFFF), path)):            return True        else:            return Falsedef log_add_message():	do_logout()	do_login()	time.sleep(1)def reboot(method):	if method == "snmp":		os.system("snmpset -v1 -t0.1 -r0 -c public %s .1.3.6.1.4.1.41752.5.17.2.9.1.0 i 1 > /dev/null" %ip)	if method == "web":		os.system("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt http://%s/reboot.cgi" %ip)	else:		print "Unknown method"	def stop_spam_task():        res = os.popen("curl -s -b /tmp/cookies.txt -c /tmp/cookies.txt \"http://%s/led.cgi?state=%s&_=%s\" --compressed" % (ip, "off", random.randint(0, 0xFFFF))).read()        if res == "OFF":            print "Spam stoped"            return True        else:            print "Error"            return False		def rambuf_test():	passed = False;	results = [0]*10                if not ping(ip):            print "Host not found"            return False	do_login()	while len(filter(lambda x: x > 0, results)) < 10:		while True:			last_msg = log_get_string(1, 0) 			ram_num = int(log_get_ramstrnum())			if ram_num == 10:				ram_num = 0;						if results[ram_num] > 0:				log_add_message()			else:				break			print "\r\nLast message: ", last_msg		print "Messages in RAM: %s" %ram_num		reboot("web")		time.sleep(10)		do_login()		for i in range(1, 10):			page = log_get_page(i)			print "\r\nPage " + str(i) + "\r\n" + page			parsed_page = json.loads(page)						if last_msg in parsed_page:				str_num = parsed_page.index(last_msg) + 1				print "\r\nLast message found as %s-th message (page %s, string %s)" %(str_num + (i - 1) * 10 , i, str_num) 				results[ram_num] += 1				break	   	                            if "Перезагрузка" in parsed_page:                                print "Error: Last message not found"                                return False                 print "\r\nResults:", results			return Truedef on_off_test():        num = 0 #External device addr	device = extdevices.io_device(num)        msg = ''        timestamp = ''        res = False                device.set_outputs(0x02)        time.sleep(8)        if not ping(ip):            print "Host not found"            return False   	while True:	    try:	                device.set_outputs(0x00)		print "OFF"		time.sleep(0.2)		                device.set_outputs(0x02)		print "ON"		time.sleep(4)                           time.sleep(random.randint(1, 4))			    except KeyboardInterrupt:		sys.exit(0)            except ValueError:                print "JSON parse error."                stop_spam_task()                return False	    except:		print "Retry"        stop_spam_task()                return resdef download_test_ram(start_num, add_num):        print "RAM:", start_num, "+", add_num                PATH = "/tmp/testlog_ram"+str(start_num)+"_"+str(add_num)+".csv"                do_login()        while True:            last_msg = log_get_string(1, 0)             ram_num = int(log_get_ramstrnum())            if ram_num == 10:                ram_num = 0;            if ram_num == start_num:                break            else:               log_add_message()                thr = threading.Thread(target=log_download, args=(PATH,), kwargs={})        thr.start()        time.sleep(1)        for i in range(add_num):            log_add_message()        thr.join()        print "Last message:", last_msg              fsize = os.path.getsize(PATH)        print "File size: ", fsize        if fsize != 120*30000 + 3 + 120*start_num:            print "Error. File size missmatch"            return False                res = checklogfile.check(PATH)        if not res:                return False        lines = checklogfile.parse(PATH)        res = False        for i in range(len(lines)):                s = lines[i]                if last_msg in s:                        res = True                        break        if not res:                print "Error. Last message not found"                return False        else:                print "Last message found"        do_logout()        return Truedef download_test():    	passed = False;	results = [0]*10        if not ping(ip):            print "Host not found"            return False 	do_login()        #Проверка добавления записи в лог во время загрузки файла (строка попала в RAM и вызвала запись страницы)         if not download_test_ram(8, 5):            return False            #Проверка добавления записи в лог во время загрузки файла (строка попала в RAM, без записи страницы)         if not download_test_ram(1, 2):            return False                        #Проверка загрузки лога при количестве строк в RAM 0-9	do_login()        while len(filter(lambda x: x > 0, results)) < 10:		while True:			last_msg = log_get_string(1, 0) 			ram_num = int(log_get_ramstrnum())			if ram_num == 10:				ram_num = 0;						if results[ram_num] > 0:				log_add_message()			else:				break			print "\r\nLast message: ", last_msg		print "Messages in RAM: %s" %ram_num                PATH = "/tmp/testlog_" + str(ram_num) + ".csv"                                thr = threading.Thread(target=log_download, args=(PATH,), kwargs={})                thr.start()                thr.join()                #log_download(PATH)                fsize = os.path.getsize(PATH)                print "File size: ", fsize                res = checklogfile.check(PATH)                if res:                        results[ram_num] += 1                else:                        return False                lines = checklogfile.parse(PATH)                               res = False                 for i in range(len(lines)):                        s = lines[i]                        if last_msg in s:                                res = True                                break                if not res:                        print "Error. Last message not found"                        return False                else:                        print "Last message found"                                    print "\r\nResults:", results		        return Truetest_list = [0, on_off_test, rambuf_test, download_test]def main():    testnum = 0    global ip    try:        opts, args = getopt.getopt(sys.argv[1:], "ht:", \                ["help", "test="])    except getopt.GetoptError:        usage()        sys.exit(2)        for opt, arg in opts:        if opt in ("-h", "--help"):                usage()                sys.exit()        if opt in ("-t", "--test"):                testnum = int(arg)     if testnum == 0 or len(sys.argv) < 3:        usage()        sys.exit(2)        ip = sys.argv[-1]        #Run test by number     if not test_list[testnum]():        print "\r\nFailed\r\n"    else:         print "\r\nPassed\r\n"if __name__ == "__main__":    main()    
 |