Skip to content

Commit 6fa63f2

Browse files
committed
Added EGD test
1 parent eeb47fd commit 6fa63f2

1 file changed

Lines changed: 305 additions & 0 deletions

File tree

tests/egd_test.py

Lines changed: 305 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
1+
# -------------------------------------------------------------------------
2+
# Copyright (c) PTC Inc. All rights reserved.
3+
# See License.txt in the project root for
4+
# license information.
5+
# --------------------------------------------------------------------------
6+
7+
# EGD Test - Test to exersice all GE EGD driver exchange related features
8+
# including, exchanges, ranges and name resolutions
9+
10+
import os, sys
11+
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
12+
import kepconfig
13+
import kepconfig.connectivity
14+
import time
15+
import datetime
16+
import pytest
17+
# import connectivity, admin, iot_gateway, datalogger
18+
19+
20+
# Channel and Device name to be used
21+
ch_name = 'EGD'
22+
dev_name = 'Device1'
23+
24+
consumer_exchange = {
25+
"common.ALLTYPES_NAME": "0",
26+
"common.ALLTYPES_DESCRIPTION": "",
27+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_ID": 0,
28+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER": 1,
29+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_PRODUCER_ID": "192.168.1.130",
30+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_GROUP_ID": 1,
31+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_CONSUMED_PERIOD_MS": 1000,
32+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_UPDATE_TIMEOUT_MS": 10000
33+
}
34+
consumer_exchange10 = {
35+
"common.ALLTYPES_NAME": "10",
36+
"common.ALLTYPES_DESCRIPTION": "",
37+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_ID": 10,
38+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER": 10,
39+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_PRODUCER_ID": "192.168.1.130",
40+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_GROUP_ID": 1,
41+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_CONSUMED_PERIOD_MS": 1000,
42+
"ge_ethernet_global_data.CONSUMER_EXCHANGE_UPDATE_TIMEOUT_MS": 10000
43+
}
44+
producer_exchange = {
45+
"common.ALLTYPES_NAME": "0",
46+
"common.ALLTYPES_DESCRIPTION": "",
47+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_ID": 0,
48+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_NUMBER": 0,
49+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_TYPE": 1,
50+
'ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_GROUP_ID':0,
51+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_IP": "10.10.10.10",
52+
'ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_NAME': '',
53+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_PRODUCER_INTERVAL_MS": 10
54+
}
55+
producer_exchange10 = {
56+
"common.ALLTYPES_NAME": "10",
57+
"common.ALLTYPES_DESCRIPTION": "",
58+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_ID": 10,
59+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_NUMBER": 10,
60+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_TYPE": 1,
61+
'ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_GROUP_ID':0,
62+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_IP": "10.10.10.10",
63+
'ge_ethernet_global_data.PRODUCER_EXCHANGE_CONSUMED_ADDRESS_NAME': '',
64+
"ge_ethernet_global_data.PRODUCER_EXCHANGE_PRODUCER_INTERVAL_MS": 10
65+
}
66+
67+
range1 = {
68+
"common.ALLTYPES_NAME": "Range_0",
69+
"common.ALLTYPES_DESCRIPTION": "",
70+
"ge_ethernet_global_data.RANGE_INDEX": 1,
71+
"ge_ethernet_global_data.RANGE_OFFSET": 0,
72+
"ge_ethernet_global_data.RANGE_REFERENCE": 0,
73+
"ge_ethernet_global_data.RANGE_LOW_POINT": 0,
74+
"ge_ethernet_global_data.RANGE_HIGH_POINT": 8
75+
}
76+
77+
range2 = {
78+
"common.ALLTYPES_NAME": "Range_1",
79+
"common.ALLTYPES_DESCRIPTION": "",
80+
"ge_ethernet_global_data.RANGE_INDEX": 2,
81+
"ge_ethernet_global_data.RANGE_OFFSET": 18,
82+
"ge_ethernet_global_data.RANGE_REFERENCE": 6,
83+
"ge_ethernet_global_data.RANGE_LOW_POINT": 0,
84+
"ge_ethernet_global_data.RANGE_HIGH_POINT": 10
85+
}
86+
87+
name1 = {
88+
"common.ALLTYPES_NAME": "PLC1",
89+
"common.ALLTYPES_DESCRIPTION": "",
90+
"ge_ethernet_global_data.NAME_RESOLUTION_ALIAS": "PLC1",
91+
"ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS": "192.168.1.200"
92+
}
93+
94+
name2 = {
95+
"common.ALLTYPES_NAME": "PLC2",
96+
"common.ALLTYPES_DESCRIPTION": "",
97+
"ge_ethernet_global_data.NAME_RESOLUTION_ALIAS": "PLC2",
98+
"ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS": "192.168.1.201"
99+
}
100+
101+
def HTTPErrorHandler(err):
102+
if err.__class__ is kepconfig.error.KepHTTPError:
103+
print(err.code)
104+
print(err.msg)
105+
print(err.url)
106+
print(err.hdrs)
107+
print(err.payload)
108+
else:
109+
print('Different Exception Received: {}'.format(err))
110+
111+
# This creates a server reference that is used to target all modifications of
112+
# the Kepware configuration
113+
kepware_server = kepconfig.connection.server(host = 'localhost', port = 57412, user = 'Administrator', pw = '', https = False)
114+
115+
egd_device = {
116+
"common.ALLTYPES_NAME": ch_name,
117+
"servermain.MULTIPLE_TYPES_DEVICE_DRIVER": "GE Ethernet Global Data",
118+
"devices": [{
119+
"common.ALLTYPES_NAME": dev_name,
120+
"servermain.MULTIPLE_TYPES_DEVICE_DRIVER": "GE Ethernet Global Data"
121+
}]
122+
}
123+
124+
def initialize():
125+
try:
126+
kepconfig.connectivity.channel.add_channel(kepware_server,egd_device) == True
127+
except Exception as err:
128+
HTTPErrorHandler(err)
129+
130+
def complete():
131+
try:
132+
kepconfig.connectivity.channel.del_channel(kepware_server,egd_device['common.ALLTYPES_NAME'])
133+
except Exception as err:
134+
HTTPErrorHandler(err)
135+
136+
def remove_projectid(DATA):
137+
if type(DATA) is dict:
138+
DATA.pop('PROJECT_ID', None)
139+
elif type(DATA) is list:
140+
for item in DATA:
141+
if type(item) is list:
142+
for x in item:
143+
x.pop('PROJECT_ID', None)
144+
else:
145+
item.pop('PROJECT_ID', None)
146+
return DATA
147+
148+
# Exchange Tests
149+
def create_exchange(exchange_type, exchanges):
150+
assert kepconfig.connectivity.egd.exchange.add_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type, exchanges[0])
151+
152+
# Delete
153+
assert kepconfig.connectivity.egd.exchange.del_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type, exchanges[0]['common.ALLTYPES_NAME'])
154+
# Add multiple Exchanges
155+
assert kepconfig.connectivity.egd.exchange.add_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type, exchanges)
156+
157+
def get_exchange(exchange_type, exchanges):
158+
159+
# Get a specific Exchange
160+
ret = kepconfig.connectivity.egd.exchange.get_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type, exchanges[0]['common.ALLTYPES_NAME'])
161+
assert type(ret) == dict, 'Unexpected data type return. {}'.format(type(ret))
162+
assert remove_projectid(ret) == exchanges[0]
163+
164+
# Get All exchanges for exchange type
165+
ret = kepconfig.connectivity.egd.exchange.get_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type)
166+
assert type(ret) == list, 'Unexpected data type return. {}'.format(type(ret))
167+
assert remove_projectid(ret) == exchanges
168+
169+
# Get All exchanges for device
170+
ret = kepconfig.connectivity.egd.exchange.get_all_exchanges(kepware_server, ch_name + '.' + dev_name)
171+
assert type(ret) == list
172+
if exchange_type == kepconfig.connectivity.egd.PRODUCER_EXCHANGE:
173+
assert remove_projectid(ret) == [[],exchanges]
174+
else:
175+
assert remove_projectid(ret) == [exchanges,[]]
176+
177+
def modify_exchange(exchange_type, exchange_name):
178+
179+
assert kepconfig.connectivity.egd.exchange.modify_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type,
180+
{"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER": 2}, exchange_name)
181+
assert kepconfig.connectivity.egd.exchange.modify_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type,
182+
{"common.ALLTYPES_NAME": exchange_name,"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER": 3})
183+
assert kepconfig.connectivity.egd.exchange.modify_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type,
184+
{"common.ALLTYPES_NAME": exchange_name,"ge_ethernet_global_data.CONSUMER_EXCHANGE_NUMBER": 4}, force=True)
185+
186+
def delete_exchange(exchange_type, exchange_name):
187+
188+
assert kepconfig.connectivity.egd.exchange.del_exchange(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name)
189+
190+
# Exchange Range tests
191+
def create_range(exchange_type, exchange_name, ranges):
192+
assert kepconfig.connectivity.egd.range.add_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name, ranges[0])
193+
194+
# Delete
195+
assert kepconfig.connectivity.egd.range.del_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name, ranges[0]['common.ALLTYPES_NAME'])
196+
# Add multiple ranges
197+
assert kepconfig.connectivity.egd.range.add_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name, ranges)
198+
199+
def get_range(exchange_type, exchange_name, ranges):
200+
201+
# Get a specific range
202+
ret = kepconfig.connectivity.egd.range.get_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name, ranges[0]['common.ALLTYPES_NAME'])
203+
assert type(ret) == dict, 'Unexpected data type return. {}'.format(type(ret))
204+
assert remove_projectid(ret) == ranges[0]
205+
206+
# Get All ranges for Exchange
207+
ret = kepconfig.connectivity.egd.range.get_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name)
208+
assert type(ret) == list, 'Unexpected data type return. {}'.format(type(ret))
209+
assert remove_projectid(ret) == ranges
210+
211+
def modify_range(exchange_type, exchange_name, range_name):
212+
213+
assert kepconfig.connectivity.egd.range.modify_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name,
214+
{"ge_ethernet_global_data.RANGE_HIGH_POINT": 10}, range_name)
215+
assert kepconfig.connectivity.egd.range.modify_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name,
216+
{"common.ALLTYPES_NAME": range_name,"ge_ethernet_global_data.RANGE_HIGH_POINT": 11})
217+
assert kepconfig.connectivity.egd.range.modify_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name,
218+
{"common.ALLTYPES_NAME": range_name,"ge_ethernet_global_data.RANGE_HIGH_POINT": 8}, force=True)
219+
220+
def delete_range(exchange_type, exchange_name, range_name):
221+
222+
assert kepconfig.connectivity.egd.range.del_range(kepware_server, ch_name + '.' + dev_name, exchange_type, exchange_name, range_name)
223+
224+
# Name Resolution Tests
225+
def create_name(names):
226+
assert kepconfig.connectivity.egd.name.add_name_resolution(kepware_server, ch_name + '.' + dev_name, names[0])
227+
228+
# Delete
229+
assert kepconfig.connectivity.egd.name.del_name_resolution(kepware_server, ch_name + '.' + dev_name, names[0]['common.ALLTYPES_NAME'])
230+
# Add multiple ranges
231+
assert kepconfig.connectivity.egd.name.add_name_resolution(kepware_server, ch_name + '.' + dev_name, names)
232+
233+
def get_name(names):
234+
235+
# Get a specific range
236+
ret = kepconfig.connectivity.egd.name.get_name_resolution(kepware_server, ch_name + '.' + dev_name, names[0]['common.ALLTYPES_NAME'])
237+
assert type(ret) == dict, 'Unexpected data type return. {}'.format(type(ret))
238+
assert remove_projectid(ret) == names[0]
239+
240+
# Get All ranges for Exchange
241+
ret = kepconfig.connectivity.egd.name.get_name_resolution(kepware_server, ch_name + '.' + dev_name)
242+
assert type(ret) == list, 'Unexpected data type return. {}'.format(type(ret))
243+
assert remove_projectid(ret) == names
244+
245+
def modify_name(name):
246+
247+
assert kepconfig.connectivity.egd.name.modify_name_resolution(kepware_server, ch_name + '.' + dev_name,
248+
{"ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS": '192.168.1.50'}, name)
249+
assert kepconfig.connectivity.egd.name.modify_name_resolution(kepware_server, ch_name + '.' + dev_name,
250+
{"common.ALLTYPES_NAME": name,"ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS": '192.168.1.100'})
251+
assert kepconfig.connectivity.egd.name.modify_name_resolution(kepware_server, ch_name + '.' + dev_name,
252+
{"common.ALLTYPES_NAME": name,"ge_ethernet_global_data.NAME_RESOLUTION_IP_ADDRESS": '192.168.1.202'}, force=True)
253+
254+
def delete_name(name):
255+
256+
assert kepconfig.connectivity.egd.name.del_name_resolution(kepware_server, ch_name + '.' + dev_name, name)
257+
258+
259+
#
260+
# MAIN TEST SET
261+
#
262+
263+
def test_consumer_exchange():
264+
initialize()
265+
create_exchange(kepconfig.connectivity.egd.CONSUMER_EXCHANGE,[consumer_exchange, consumer_exchange10])
266+
get_exchange(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, [consumer_exchange, consumer_exchange10])
267+
268+
# Range Tests
269+
create_range(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, consumer_exchange['common.ALLTYPES_NAME'], [range1, range2])
270+
get_range(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, consumer_exchange['common.ALLTYPES_NAME'], [range1, range2])
271+
modify_range(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, consumer_exchange['common.ALLTYPES_NAME'], range1['common.ALLTYPES_NAME'])
272+
delete_range(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, consumer_exchange['common.ALLTYPES_NAME'], range1['common.ALLTYPES_NAME'])
273+
274+
modify_exchange(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, consumer_exchange['common.ALLTYPES_NAME'])
275+
delete_exchange(kepconfig.connectivity.egd.CONSUMER_EXCHANGE, consumer_exchange['common.ALLTYPES_NAME'])
276+
complete()
277+
278+
def test_producer_exchange():
279+
initialize()
280+
create_exchange(kepconfig.connectivity.egd.PRODUCER_EXCHANGE,[producer_exchange, producer_exchange10])
281+
get_exchange(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, [producer_exchange, producer_exchange10])
282+
283+
# Range Tests
284+
create_range(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, producer_exchange['common.ALLTYPES_NAME'], [range1, range2])
285+
get_range(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, producer_exchange['common.ALLTYPES_NAME'], [range1, range2])
286+
modify_range(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, producer_exchange['common.ALLTYPES_NAME'], range1['common.ALLTYPES_NAME'])
287+
delete_range(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, producer_exchange['common.ALLTYPES_NAME'], range1['common.ALLTYPES_NAME'])
288+
289+
modify_exchange(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, producer_exchange['common.ALLTYPES_NAME'])
290+
delete_exchange(kepconfig.connectivity.egd.PRODUCER_EXCHANGE, producer_exchange['common.ALLTYPES_NAME'])
291+
complete()
292+
293+
def test_name_resolutions():
294+
initialize()
295+
create_name([name1, name2])
296+
get_name([name1, name2])
297+
modify_name(name1['common.ALLTYPES_NAME'])
298+
delete_name(name1['common.ALLTYPES_NAME'])
299+
complete()
300+
301+
# runing the testing without pytest
302+
if __name__ == "__main__":
303+
test_consumer_exchange()
304+
test_producer_exchange()
305+
test_name_resolutions()

0 commit comments

Comments
 (0)