@@ -132,8 +132,11 @@ def test_logix_remote_udt( count=1 ):
132132 """Performance of a client executing an operations on a CIP UDT.
133133
134134 """
135- #logging.getLogger().setLevel( logging.NORMAL )
136- device .lookup_reset () # Flush out any existing CIP Objects for a fresh start
135+
136+ # Flush out any existing CIP Objects for a fresh start, including UCMM
137+ device .lookup_reset ()
138+ logix .setup_reset ()
139+
137140 svraddr = ('localhost' , 44838 )
138141
139142 tagname = example_tagname
@@ -166,13 +169,14 @@ def test_logix_remote_udt( count=1 ):
166169 # Intercept all server requests, and collect requests/replies locally
167170 #
168171 server_txs = []
172+
169173 class UCMM_collector ( ucmm .UCMM ):
170174 """Collect the data (request), and its modified response. Returns the "proceed" flag (or
171175 re-raises Exception)
172176
173177 """
174178 def request ( self , data , addr = None ):
175- #log.normal ( "UCMM request : {addr!r:24} {req:s}".format( addr=addr, req=reprlib.repr( data )))
179+ #log.info ( "UCMM collector : {addr!r:24} {req:s}".format( addr=addr, req=reprlib.repr( data )))
176180 req = None
177181 try :
178182 req = copy .deepcopy ( data )
@@ -230,7 +234,6 @@ def request( self, data, addr=None ):
230234 kwargs = kwargs , # Allow client thread to shut enip_main server down
231235 )
232236
233- log .normal ( "test_logix_remote_udt w/ server.control in object %s" , id ( kwargs ['server' ]['control' ] ))
234237 try :
235238 for target in [
236239 logix_remote_udt_pylogix
@@ -240,7 +243,10 @@ def request( self, data, addr=None ):
240243 # performance measurement, we need to be running enip.main:main in the "Main" thread...
241244 kwargs ['server' ]['control' ].done = False
242245 kwargs ['client' ] = {}
243-
246+ log .normal ( "test_logix_remote_udt w/ controls in object server: %s (txs %s, %d txs), client: %s" ,
247+ id ( kwargs ['server' ] ),
248+ id ( kwargs ['server' ]['server_txs' ] ), len ( kwargs ['server' ]['server_txs' ] ),
249+ id ( kwargs ['client' ] ))
244250 targetthread = threading .Thread (
245251 target = target ,
246252 kwargs = targetthread_kwargs ,
@@ -249,7 +255,7 @@ def request( self, data, addr=None ):
249255 targetthread .start ()
250256 log .normal ( "Startup of C*Logix client {client_name} complete" .format ( client_name = target .__name__ ))
251257
252- # Run the server; each client will signal it to shut down when complete .
258+ # Run the server; each client will signal it to shut down when finished transacting with it .
253259 enip_main ( ** kwargs )
254260
255261 targetthread .join ()
@@ -259,11 +265,11 @@ def request( self, data, addr=None ):
259265 # We expect that it should have received the full STRUCT tag encoding, and successfully
260266 # completed its tests.
261267 client_got = kwargs ['client' ].get ( 'received' , None )
262- client_ok = kwargs ['client' ].get ( 'successful' , False )
268+ client_ok = kwargs ['client' ].get ( 'successful' , None )
263269 log .normal ( "Client received {length}-byte: {got}" .format (
264270 length = len (client_got ) if client_got else "(Unknown)" , got = reprlib .repr ( client_got )))
265271 assert client_got == tagencoding
266- assert client_ok
272+ assert client_ok == True
267273 finally :
268274 # In case of Exception, ensure we've shut down the server...
269275 kwargs ['server' ]['control' ].done = True
@@ -274,11 +280,15 @@ def logix_remote_udt_pylogix( count, svraddr, kwargs ):
274280 """Pylogix access of UDT STRUCT. """
275281 tagname = example_tagname
276282
283+ time .sleep ( 1 ) # Wait for server to be established
284+
277285 # We'll check our server transactions (that they're sensible), and also send back what we got...
278286 server_txs = kwargs ['server' ]['server_txs' ]
279287 server_txs_beg = len ( server_txs ) # in case the same server is used for many clients
280-
281- time .sleep ( 1 ) # Wait for server to be established
288+ log .normal ( "logix_remote_udt_pylogix w/ controls in object server: %s (txs %s, %d txs), client: %s" ,
289+ id ( kwargs ['server' ] ),
290+ id ( kwargs ['server' ]['server_txs' ] ), len ( kwargs ['server' ]['server_txs' ] ),
291+ id ( kwargs ['client' ] ))
282292 try :
283293 # Try to Register a real session, followed by commands
284294 timeout = kwargs ['server' ]['control' ].timeout
@@ -310,6 +320,8 @@ def logix_remote_udt_pylogix( count, svraddr, kwargs ):
310320 # Check that server processed correct commands (first and last few), return what the client
311321 # got... We'll see the EtherNet/IP register, Forward Open, Read Tag Fragmented w/ offset 0
312322 # status 6, and high offset, status 0, forward close, EtherNet/IP unregister.
323+ kwargs ['server' ]['control' ].done = True
324+
313325 cases = [
314326 {
315327 "enip.CIP.register.options" : 0 ,
@@ -346,17 +358,24 @@ def logix_remote_udt_pylogix( count, svraddr, kwargs ):
346358 "enip.CIP.unregister" : True ,
347359 }
348360 ]
349-
361+ log .normal ( "Testing {server_txs_cnt} Server txs vs. {cases_cnt} test cases" .format (
362+ server_txs_cnt = len ( server_txs ) - server_txs_beg , cases_cnt = len ( cases )))
350363 for num ,(addr ,req ,rpy ) in enumerate ( server_txs ):
351364 if num < server_txs_beg or server_txs_beg + 5 <= num <= len ( server_txs ) - 5 :
352365 continue
353- log .detail ( "req {num:3d}: {addr!r:24}: {req}" .format ( num = num , addr = addr , req = parser .enip_format ( req )))
354- log .normal ( "rpy {num:3d}: {addr!r:24}: {rpy}" .format ( num = num , addr = addr , rpy = parser .enip_format ( rpy )))
355366 # See if this reply matches one of our cases; delete if so
356367 for i ,c in enumerate ( cases ):
357368 if all ( rpy .get ( k ) == v for k ,v in c .items () ):
358369 del cases [i ]
359370 break
371+ if cases :
372+ log .warning ( "Failed to find cases {cases!r}" .format ( cases = cases ))
373+ for num ,(addr ,req ,rpy ) in enumerate ( server_txs ):
374+ if num < server_txs_beg or server_txs_beg + 5 <= num <= len ( server_txs ) - 5 :
375+ continue
376+ log .detail ( "UDT req {num:3d}: {addr!r:24}: {req}" .format ( num = num , addr = addr , req = parser .enip_format ( req )))
377+ log .normal ( "UDT rpy {num:3d}: {addr!r:24}: {rpy}" .format ( num = num , addr = addr , rpy = parser .enip_format ( rpy )))
378+
360379 assert cases == []
361380 kwargs ['client' ]['successful' ] = True
362381
0 commit comments