## 模拟CMIP客户端发起请求(client.py)
import xml.etree.ElementTree as Etree
import threading
import socket
import time
import os,sys
###############################################################################
g_server_ip = '192.168.1.103'
g_server_port = 10000
g_listen_max = 30
g_msg_path = 'cmip'
g_sep = '\\'
###############################################################################
encoding = 'utf-8'
BUFSIZE = 1024*4
gCount = 0
###############################################################################
# Log Helper.
###############################################################################
Debug_Mode = 1
Error_Mode =2
def log_time():
return time.strftime('%Y-%m-%d %H-%M-%S',time.localtime(time.time()))
def LogMsg(mode,msg):
if mode == Debug_Mode:
flag = "Debug"
if mode == Error_Mode:
flag = "Error"
print "%s\t%s\t%s" % (log_time(),flag,msg)
###############################################################################
# File Helper
###############################################################################
def readFile(fname):
with open(fname, 'r') as f:
return f.read()
def writeFile(fname,content):
with open(fname, 'w') as f:
return f.write(content)
###############################################################################
# Request for Server
###############################################################################
###############################################################################
# Request for Server
###############################################################################
class Request:
cmdType = 0
cmdTarget = -1
timestamp = ''
cmd = -1
response = 1
parameter = ''
def __init__(self,_cmdTarget,_cmd,_response,_parameter):
self.cmdTarget = _cmdTarget
self.cmd = _cmd
self.response = _response
self.parameter = _parameter
self.timestamp = int(time.time())
def display(self):
print "-----------------------------------------------------------------------------"
print "cmd\t\t%s" % (self.cmd)
print "cmdTarget\t%s" % (self.cmdTarget)
print "response\t%s" % (self.response)
print "paramter\t%s" % (self.parameter)
print "-----------------------------------------------------------------------------"
class RequestFactory:
global g_sep
def __init__(self,_cmdValue):
fname = os.path.join(os.getcwd(),"%s%s%d%sreq.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))
self.content = readFile(fname)
def toString(self):
return self.content
def toObject(self):
return Str_To_Request(self.content)
class ResponseFactory:
def __init__(self,_cmdValue):
fname = os.path.join(os.getcwd(),"%s%s%s%sres.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))
self.content = readFile(fname)
def toString(self):
return self.content
def DisNone(obj):
if obj != None:
return True
else:
return False
def Str_To_Request(str):
domTree = Etree.fromstring(str)
cmdType_node = domTree.find("cmdType")
cmdTarget_node = domTree.find("cmdTarget")
timestamp_node = domTree.find("timestamp")
cmd_node = domTree.find("cmd")
response_node = domTree.find("response")
parameter_node = domTree.find("parameter")
if DisNone(cmdType_node) and DisNone(cmdTarget_node) and DisNone(timestamp_node) and DisNone(response_node) and DisNone(parameter_node):
return Request(cmdTarget_node.text,cmd_node.text,response_node.text,parameter_node.text)
else:
return None
class Response:
cmd = 0
timestamp = ''
result = 1
content = ''
def __init__(self,_cmd,_result,_content):
self.cmd = _cmd
self.result = _result
self.content = _content
self.timestamp = int(time.time())
def display(self):
print "-----------------------------------------------------------------------------"
print "cmd\t\t%s" % (self.cmd)
print "result\t\t%s" % (self.result)
print "content\t\t%s" % (self.content.strip())
print "-----------------------------------------------------------------------------"
def Str_To_Response(str):
domTree = Etree.fromstring(str)
cmd_node = domTree.find("cmd")
result_node = domTree.find("result")
content_node = domTree.find("content")
if DisNone(cmd_node) and DisNone(result_node) and DisNone(content_node):
return Response(cmd_node.text,result_node.text,content_node.text)
else:
return None
def Response_To_Str(resp):
return "<resp><cmd>%d</cmd><timestamp>%s</timestamp><result>%d</result><content>%s</content>" % \
(resp.cmd, resp.timestamp, resp.result ,resp.content)
class ResultCompareHandle:
def __init__(self,_resObj):
self.res_obj = _resObj
def compare(self):
cmd = self.res_obj.cmd
expect_obj = ResponseFactory(cmd).toObject()
if self.res_obj.result.strip() == expect_obj.result.strip():
return True
else:
return False
###############################################################################
# CMA Handler Class
###############################################################################
class CMAHandler(threading.Thread):
def __init__(self,client):
threading.Thread.__init__(self)
self.client = client
self.count = 0
def run(self):
while True:
data = self.client.recv(BUFSIZE)
if(data):
req_str = bytes.decode(data,encoding)
req_obj = Str_To_Request(req_str)
if req_obj:
req_obj.display()
cmdValue = req_obj.cmd
resp_obj = ResponseFactory(cmdValue).toString()
self.client.send(ret)
else:
LogMsg(Debug_Mode,"Client Request Format is invalid")
else:
break
LogMsg(Debug_Mode,"Client [%s] close Connection." % (self.client.getpeername()))
###############################################################################
# TestClient Class.
# Create Tcp Link to Server
# if accept, create thread for it.
###############################################################################
class TestClient(threading.Thread):
def __init__(self, ip ,port):
threading.Thread.__init__(self)
self.port = port
self.ip = ip
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.nMaxCmd = 3
self.curCmd = 0
self.nOKCmd = 0
self.nNGCmd = 0
self.ngList = []
self.okList = []
def run(self):
self.sock.connect((self.ip,self.port))
LogMsg(Debug_Mode,"Client Start Connecting to Server (%s,%d)" % (self.ip,self.port))
while True:
LogMsg(Debug_Mode,"Request[%d]" % (self.curCmd))
#[1]
req_factory = RequestFactory(self.curCmd)
req_obj = req_factory.toObject()
req_obj.display()
req_str = req_factory.toString()
self.sock.send(req_str)
#[2]
data = self.sock.recv(BUFSIZE)
res_obj = Str_To_Response(data)
if res_obj:
LogMsg(Debug_Mode,"Response[%s]" % (res_obj.cmd))
res_obj.display()
nResult = ResultCompareHandle(res_obj).compare()
if nResult:
nOKCmd = nOKCmd + 1
self.okList.append(res_obj.cmd)
else:
nNGCmd = nNGCmd + 1
self.ngList.append(res_obj.cmd)
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`"
time.sleep(3)
self.curCmd = self.curCmd + 1
if self.curCmd > self.nMaxCmd:
break
LogMsg(Debug_Mode,"Client Will Exit app...")
self.displayTestResults()
def displayTestResults(self):
print "\n"
print "------------------------------------------------------------------------"
print "Total/OK/NG Case:\t%d/%d/%d" % (self.nOKCmd + self.nNGCmd,self.nOKCmd,self.nNGCmd)
ngStr = ""
for ng in self.ngList:
ngStr = "%s%s-" % (ngStr,ng)
okStr = ""
for ok in self.okList:
ngStr = "%s%s-" % (okStr,ok)
print "OK CaseList:\t%s" % (okStr)
print "------------------------------------------------------------------------"
###############################################################################
# Create Service
# Start Service
###############################################################################
s_server = TestClient(g_server_ip,g_server_port)
s_server.start()
import xml.etree.ElementTree as Etree
import threading
import socket
import time
import os,sys
###############################################################################
g_server_ip = '192.168.1.103'
g_server_port = 10000
g_listen_max = 30
g_msg_path = 'cmip'
g_sep = '\\'
###############################################################################
encoding = 'utf-8'
BUFSIZE = 1024*4
gCount = 0
###############################################################################
# Log Helper.
###############################################################################
Debug_Mode = 1
Error_Mode =2
def log_time():
return time.strftime('%Y-%m-%d %H-%M-%S',time.localtime(time.time()))
def LogMsg(mode,msg):
if mode == Debug_Mode:
flag = "Debug"
if mode == Error_Mode:
flag = "Error"
print "%s\t%s\t%s" % (log_time(),flag,msg)
###############################################################################
# File Helper
###############################################################################
def readFile(fname):
with open(fname, 'r') as f:
return f.read()
def writeFile(fname,content):
with open(fname, 'w') as f:
return f.write(content)
###############################################################################
# Request for Server
###############################################################################
###############################################################################
# Request for Server
###############################################################################
class Request:
cmdType = 0
cmdTarget = -1
timestamp = ''
cmd = -1
response = 1
parameter = ''
def __init__(self,_cmdTarget,_cmd,_response,_parameter):
self.cmdTarget = _cmdTarget
self.cmd = _cmd
self.response = _response
self.parameter = _parameter
self.timestamp = int(time.time())
def display(self):
print "#################### Request #########################"
print "cmd\t\t%s" % (self.cmd)
print "cmdTarget\t%s" % (self.cmdTarget)
print "response\t%s" % (self.response)
print "paramter\t%s" % (self.parameter)
print "######################################################"
class RequestFactory:
global g_sep
def __init__(self,_cmdValue):
fname = os.path.join(os.getcwd(),"%s%s%d%sreq.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))
self.content = readFile(fname)
def toString(self):
return self.content
def toObject(self):
return Str_To_Request(self.content)
class ResponseFactory:
def __init__(self,_cmdValue):
fname = os.path.join(os.getcwd(),"%s%s%s%sres.txt" % (g_msg_path,os.path.sep,_cmdValue,os.path.sep))
self.content = readFile(fname)
def toString(self):
return self.content
def DisNone(obj):
if obj != None:
return True
else:
return False
def Str_To_Request(str):
domTree = Etree.fromstring(str)
cmdType_node = domTree.find("cmdType")
cmdTarget_node = domTree.find("cmdTarget")
timestamp_node = domTree.find("timestamp")
cmd_node = domTree.find("cmd")
response_node = domTree.find("response")
parameter_node = domTree.find("parameter")
if DisNone(cmdType_node) and DisNone(cmdTarget_node) and DisNone(timestamp_node) and DisNone(response_node) and DisNone(parameter_node):
return Request(cmdTarget_node.text,cmd_node.text,response_node.text,parameter_node.text)
else:
return None
class Response:
cmd = 0
timestamp = ''
result = 1
content = ''
def __init__(self,_cmd,_result,_content):
self.cmd = _cmd
self.result = _result
self.content = _content
self.timestamp = int(time.time())
def display(self):
print "###################### Response ######################"
print "cmd\t\t%s" % (self.cmd)
print "result\t\t%s" % (self.result)
print "content\t\t%s" % (self.content)
print "######################################################"
def Str_To_Response(str):
domTree = Etree.fromstring(str)
cmd_node = domTree.find("cmd")
result_node = domTree.find("result")
content_node = domTree.find("content")
if DisNone(cmd_node) and DisNone(result_node) and DisNone(content_node):
return Response(cmd_node.text,result_node.text,content_node.text)
else:
return None
def Response_To_Str(resp):
return "<resp><cmd>%d</cmd><timestamp>%s</timestamp><result>%d</result><content>%s</content>" % \
(resp.cmd, resp.timestamp, resp.result ,resp.content)
###############################################################################
# CMA Handler Class
###############################################################################
class CMAHandler(threading.Thread):
def __init__(self,client):
threading.Thread.__init__(self)
self.client = client
self.count = 0
def run(self):
while True:
data = self.client.recv(BUFSIZE)
if(data):
req_str = bytes.decode(data,encoding)
req_obj = Str_To_Request(req_str)
if req_obj:
req_obj.display()
cmdValue = req_obj.cmd
resp_str = ResponseFactory(cmdValue).toString()
self.client.send(resp_str)
else:
LogMsg(Debug_Mode,"Client Request Format is invalid")
else:
break
LogMsg(Debug_Mode,"Client close Connection.")
###############################################################################
# TestServer Class.
# Create Tcp Link ,Wait the Client
# if accept, create thread for it.
###############################################################################
class TestServer(threading.Thread):
def __init__(self, ip ,port ,listen_max):
threading.Thread.__init__(self)
self.port = port
self.ip = ip
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.ip,self.port))
self.sock.listen(listen_max)
def run(self):
LogMsg(Debug_Mode,"Server Start Listen the Client...")
while True:
client,cltadd = self.sock.accept()
LogMsg(Debug_Mode,"Client XXX is connected.")
CMAHandler(client).start()
###############################################################################
# Create Service
# Start Service
###############################################################################
s_server = TestServer(g_server_ip,g_server_port,g_listen_max)
s_server.start()