def restartConnection(self): try: self.sr = sr.Connection(self.name, self.conn) except RuntimeError as r: if self.conn == sr.SR_CONN_DAEMON_REQUIRED and r.message == "The peer disconnected": sleep(1) #wait for daemon to start self.sr = sr.Connection(self.name, self.conn) else: raise r self.session = sr.Session(self.sr, self.ds)
def test_move_last_first(self): conn = sr.Connection("move_test4") self.session = sr.Session(conn, sr.SR_DS_STARTUP) self.session.move_item("/test-module:user[name='nameC']", sr.SR_MOVE_LAST) items = self.session.get_items("/test-module:user") self.compareListItems(items, ["A", "B", "D", "C"])
def test_move_after_unknown(self): conn = sr.Connection("move_test3") self.session = sr.Session(conn, sr.SR_DS_STARTUP) with self.assertRaises(RuntimeError): self.session.move_item("/test-module:user[name='nameB']", sr.SR_MOVE_AFTER, "/test-module:user[name='nameXY']")
def create_example_module(): connection = sr.Connection("test-module") session = sr.Session(connection, sr.SR_DS_STARTUP) session.delete_item("/example-module:*") v = sr.Val("Leaf value", sr.SR_STRING_T) session.set_item("/example-module:container/list[key1='key1'][key2='key2']/leaf", v) session.commit()
def test_move_before_first(self): conn = sr.Connection("move_test2") self.session = sr.Session(conn, sr.SR_DS_STARTUP) self.session.move_item("/test-module:user[name='nameC']", sr.SR_MOVE_BEFORE, "/test-module:user[name='nameA']") items = self.session.get_items("/test-module:user") self.compareListItems(items, ["C", "A", "B", "D"])
def subscribe(): conn = sr.Connection("subscriber") sess = sr.Session(conn, sr.SR_DS_RUNNING) subscribe1 = sr.Subscribe(sess) subscribe1.module_change_subscribe('nemea-test-1', change_cb) subscribe2 = sr.Subscribe(sess) subscribe2.module_change_subscribe('link-traffic-test-1', change_cb) sr.global_loop()
def test_move_after_last(self): conn = sr.Connection("move_test1") self.session = sr.Session(conn, sr.SR_DS_STARTUP) print("move") self.session.move_item("/test-module:user[name='nameB']", sr.SR_MOVE_AFTER, "/test-module:user[name='nameD']") items = self.session.get_items("/test-module:user") self.compareListItems(items, ["A", "C", "D", "B"])
def setUp(self): conn = sr.Connection("move_test") session = sr.Session(conn, sr.SR_DS_STARTUP) session.delete_item("/test-module:*") session.set_item("/test-module:user[name='nameA']", None) session.set_item("/test-module:user[name='nameB']", None) session.set_item("/test-module:user[name='nameC']", None) session.set_item("/test-module:user[name='nameD']", None) session.commit()
def sysrepo_setup(state): """ Initialize sysrepo context which program uses """ state['connection'] = sr.Connection("measure performance") assert state['connection'] is not None return
def test_commit_empty(self): TestModule.create_test_module() connection = sr.Connection("name") session = sr.Session(self.conn, sr.SR_DS_STARTUP) v_old = self.session.get_item("/test-module:main/string") self.session.delete_item("/test-module:*") self.session.commit() #test random leaf that was deleted v_none = self.session.get_item("/test-module:main/string") self.assertIsNone(v_none) self.session.set_item("/test-module:main/string", v_old) self.session.commit() TestModule.create_test_module()
def createDataTreeLargeExampleModule(count, datastore): """ Add data to example-module. """ conn = sr.Connection("load test") sess = sr.Session(conn, datastore) subs = sr.Subscribe(sess) for i in range(count): xpath = "/example-module:container/list[key1='key" + str( i) + "'][key2='key" + str(i) + "']/leaf" val = sr.Val("leaf" + str(i), sr.SR_STRING_T) sess.set_item(xpath, val) sess.commit()
def create_ietf_interfaces(): connection = sr.Connection("ietf-interfaces") session = sr.Session(connection, sr.SR_DS_STARTUP) session.delete_item("/ietf-interfaces:*") v = sr.Val("iana-if-type:ethernetCsmacd", sr.SR_IDENTITYREF_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth0']/type", v) v = sr.Val("Ethernet 0", sr.SR_STRING_T); session.set_item("/ietf-interfaces:interfaces/interface[name='eth0']/description", v) v = sr.Val(True, sr.SR_BOOL_T); session.set_item("/ietf-interfaces:interfaces/interface[name='eth0']/enabled", v) v = sr.Val(24, sr.SR_UINT8_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth0']/ietf-ip:ipv4/address[ip='192.168.2.100']/prefix-length", v) v = sr.Val(True, sr.SR_BOOL_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth0']/ietf-ip:ipv4/enabled", v) v = sr.Val(1500, sr.SR_UINT16_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth0']/ietf-ip:ipv4/mtu", v) v = sr.Val("iana-if-type:ethernetCsmacd", sr.SR_IDENTITYREF_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth1']/type", v) v = sr.Val("Ethernet 1", sr.SR_STRING_T); session.set_item("/ietf-interfaces:interfaces/interface[name='eth1']/description", v) v = sr.Val(True, sr.SR_BOOL_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth1']/ietf-ip:ipv4/enabled", v) v = sr.Val(1500, sr.SR_UINT16_T) session.set_item("/ietf-interfaces:interfaces/interface[name='eth1']/ietf-ip:ipv4/mtu", v) v = sr.Val("iana-if-type:ethernetCsmacd", sr.SR_IDENTITYREF_T) session.set_item("/ietf-interfaces:interfaces/interface[name='gigaeth0']/type", v) v = sr.Val("GigabitEthernet 0", sr.SR_STRING_T); session.set_item("/ietf-interfaces:interfaces/interface[name='gigaeth0']/description", v) v = sr.Val(False, sr.SR_BOOL_T); session.set_item("/ietf-interfaces:interfaces/interface[name='gigaeth0']/enabled", v) session.commit()
def createDataTreeLargeIETFinterfacesModule(count, datastore): """ Add data to ietf-interfaces. """ conn = sr.Connection("load test") sess = sr.Session(conn, datastore) subs = sr.Subscribe(sess) for i in range(count): xpath = "/ietf-interfaces:interfaces/interface[name='eth" + str( i) + "']" xpath_ip = xpath + "/ietf-ip:ipv4/address[ip='192.168.1." + str( i) + "]" x_name = xpath + "/name" x_type = xpath + "/type" x_desc = xpath + "/description" x_enabled = xpath + "/enabled" x_ipv4_enabled = xpath + "/ietf-ip:ipv4/enabled" x_ipv4_mtu = xpath + "/ietf-ip:ipv4/mtu" x_ipv4_forward = xpath + "/ietf-ip:ipv4/forwarding" x_prefix_len = xpath_ip + "/prefix-length" val = sr.Val("Ethernet 0", sr.SR_STRING_T) sess.set_item(x_desc, val) val = sr.Val("iana-if-type:ethernetCsmacd", sr.SR_IDENTITYREF_T) sess.set_item(x_type, val) val = sr.Val(True, sr.SR_BOOL_T) sess.set_item(x_enabled, val) val = sr.Val(True, sr.SR_BOOL_T) sess.set_item(x_ipv4_enabled, val) val = sr.Val(1500, sr.SR_UINT16_T) sess.set_item(x_ipv4_mtu, val) val = sr.Val(False, sr.SR_BOOL_T) sess.set_item(x_ipv4_forward, val) sess.commit()
def clearDataTree(module_name, datastore): """ Clear yang model. """ conn = sr.Connection("clear") sess = sr.Session(conn, datastore) subs = sr.Subscribe(sess) xpath = "/" + module_name + ":*//*" values = sess.get_items(xpath) if values == None: return for i in range(values.val_cnt()): sess.delete_item(values.val(i).xpath()) sess.commit()
def setup(self): if self.autoconnect: self.sr = sr.Connection(self.name, self.conn) self.session = sr.Session(self.sr, self.ds)
#!/usr/bin/env python3 import libsysrepoPython3 as sr import sys import traceback from time import sleep sleep(0.1) # wait for test to get into loop conn = sr.Connection("asynch_stats.py") sess = sr.Session(conn, sr.SR_DS_RUNNING) action = sys.argv[1] if action == "intable_module_stats": xpath_base = "/nemea-test-1:supervisor/instance[name='Intable1']/stats/" try: s = sess.get_items(xpath_base + "*") if s.val_cnt() != 6: exit(1) if s.val(0).xpath() != xpath_base + "running": exit(22) if s.val(0).data().get_bool() != True: exit(2) if s.val(1).xpath() != xpath_base + "restart-counter": exit(33) if s.val(1).data().get_uint8() != 2: exit(3) if s.val(2).xpath() != xpath_base + "cpu-user": exit(44)
def setUpClass(self): TestModule.create_test_module() self.conn = sr.Connection("abc", sr.SR_DS_STARTUP)
def create_test_module(): connection = sr.Connection("test-module") session = sr.Session(connection, sr.SR_DS_STARTUP) session.delete_item("/test-module:*") v = sr.Val(XP_TEST_MODULE_ENUM_VALUE, sr.SR_ENUM_T) session.set_item(XP_TEST_MODULE_ENUM, v) v = sr.Val(XP_TEST_MODULE_RAW_VALUE, sr.SR_BINARY_T) session.set_item(XP_TEST_MODULE_RAW, v) v = sr.Val(XP_TEST_MODULE_BITS_VALUE, sr.SR_BITS_T) session.set_item(XP_TEST_MODULE_BITS, v) v = sr.Val(XP_TEST_MODULE_BOOL_VALUE_T, sr.SR_BOOL_T) session.set_item(XP_TEST_MODULE_BOOL, v) v = sr.Val(XP_TEST_MODULE_DEC64_VALUE_T) session.set_item(XP_TEST_MODULE_DEC64, v) v = sr.Val(None, sr.SR_LEAF_EMPTY_T) session.set_item(XP_TEST_MODULE_EMPTY, v) v = sr.Val(XP_TEST_MODULE_IDREF_VALUE, sr.SR_IDENTITYREF_T) session.set_item(XP_TEST_MODULE_IDREF, v) v = sr.Val(XP_TEST_MODULE_STRING_VALUE, sr.SR_STRING_T) session.set_item(XP_TEST_MODULE_STRING, v) v = sr.Val(XP_TEST_MODULE_INT8_VALUE_T, sr.SR_INT8_T) session.set_item(XP_TEST_MODULE_INT8, v) v = sr.Val(XP_TEST_MODULE_INT16_VALUE_T, sr.SR_INT16_T) session.set_item(XP_TEST_MODULE_INT16, v) v = sr.Val(XP_TEST_MODULE_INT32_VALUE_T, sr.SR_INT32_T) session.set_item(XP_TEST_MODULE_INT32, v) v = sr.Val(XP_TEST_MODULE_INT64_VALUE_T, sr.SR_INT64_T) session.set_item(XP_TEST_MODULE_INT64, v) v = sr.Val(XP_TEST_MODULE_UINT8_VALUE_T, sr.SR_UINT8_T) session.set_item(XP_TEST_MODULE_UINT8, v) v = sr.Val(XP_TEST_MODULE_UINT16_VALUE_T, sr.SR_UINT16_T) session.set_item(XP_TEST_MODULE_UINT16, v) v = sr.Val(XP_TEST_MODULE_UINT32_VALUE_T, sr.SR_UINT32_T) session.set_item(XP_TEST_MODULE_UINT32, v) v = sr.Val(XP_TEST_MODULE_UINT64_VALUE_T, sr.SR_UINT64_T) session.set_item(XP_TEST_MODULE_UINT64, v) for num in [1, 2, 42]: v = sr.Val(num, sr.SR_UINT8_T) session.set_item("/test-module:main/numbers", v) session.set_item("/test-module:list[key='k1']", None) v = sr.Val("id_1", sr.SR_IDENTITYREF_T) session.set_item("/test-module:list[key='k1']/id_ref", v) v = sr.Val(None, sr.SR_CONTAINER_PRESENCE_T) session.set_item("/test-module:list[key='k1']/wireless", v) session.set_item("/test-module:list[key='k2']", None) v = sr.Val("id_2", sr.SR_IDENTITYREF_T) session.set_item("/test-module:list[key='k2']/id_ref", v) session.commit()
return sr.SR_ERR_OK # Notable difference between c implementation is using exception mechanism for open handling unexpected events. # Here it is useful because `Conenction`, `Session` and `Subscribe` could throw an exception. try: module_name = "ietf-interfaces" if len(sys.argv) > 1: module_name = sys.argv[1] else: print( "\nYou can pass the module name to be subscribed as the first argument" ) # connect to sysrepo conn = sr.Connection("example_application") # start session sess = sr.Session(conn) # subscribe for changes in running config */ subscribe = sr.Subscribe(sess) subscribe.module_change_subscribe( module_name, module_change_cb, None, 0, sr.SR_SUBSCR_DEFAULT | sr.SR_SUBSCR_APPLY_ONLY) print("\n\n ========== READING STARTUP CONFIG: ==========\n") try: print_current_config(sess, module_name) except Exception as e:
import libsysrepoPython3 as sr import sys conn = sr.Connection("get_subtree.py") sess = sr.Session(conn, sr.SR_DS_STARTUP) invalid_xpath = "/nemea-tests-1:nemea-supervisor/module-group[name='Detectors']/module[name['m1']" values = sess.get_subtree(invalid_xpath)
#!/usr/bin/env python3 import libsysrepoPython3 as sr import sys from time import sleep sleep(0.1) # wait for test to get into loop conn = sr.Connection("asynch_change.py") sess = sr.Session(conn, sr.SR_DS_RUNNING) action = sys.argv[1] if action == "create_available_module_with_instance": sess.set_item("/nemea-test-1:supervisor/available-module[name='m5']/path", sr.Val("/m1path")) sess.set_item( "/nemea-test-1:supervisor/available-module[name='m5']/description", sr.Val("lorem ipsum")) sess.set_item( "/nemea-test-1:supervisor/available-module[name='m5']/trap-monitorable", sr.Val(True)) sess.set_item( "/nemea-test-1:supervisor/available-module[name='m5']/is-sysrepo-ready", sr.Val(False)) sess.set_item( "/nemea-test-1:supervisor/available-module[name='m5']/trap-ifces-cli", sr.Val(False)) sess.set_item("/nemea-test-1:supervisor/instance[name='i5']/enabled", sr.Val(False)) sess.set_item("/nemea-test-1:supervisor/instance[name='i5']/module-ref", sr.Val('m5'))
print(values.val(i).to_string(), end=" ") # Function to be called for subscribed client of given session whenever configuration changes. def module_change_cb(sess, module_name, event, private_ctx): print("\n\n ========== CONFIG HAS CHANGED, CURRENT RUNNING CONFIG: ==========\n") print_current_config(sess, module_name) return sr.SR_ERR_OK # Notable difference between c implementation is using exception mechanism for open handling unexpected events. # Here it is useful because `Conenction`, `Session` and `Subscribe` could throw an exception. try: module_name = "nemea" # connect to sysrepo conn = sr.Connection("nemea_supervisor_python3_test") print('connected') # start session sess = sr.Session(conn) print('session created') # subscribe for changes in running config */ subscribe = sr.Subscribe(sess) print('subscribed') subscribe.module_change_subscribe(module_name, module_change_cb, None, 0, sr.SR_SUBSCR_DEFAULT) #subscribe.module_change_subscribe(mod_name, module_change_cb, None, 0, sr.SR_SUBSCR_DEFAULT | sr.SR_SUBSCR_APPLY_ONLY) print("\n\n ========== READING STARTUP CONFIG: ==========\n") try: