def test_create_gre_tunnel_on_demand(self):
        enable_logging(logging.ERROR)

        from ydk.providers import NetconfServiceProvider
        from ydk.services  import CRUDService
        try:
            from ydk.models.ydktest.ydktest_sanity import Native
        except ImportError:
            # bundle is generated with 'one_class_per_module' flag
            from ydk.models.ydktest.ydktest_sanity.native.native import Native

        provider = NetconfServiceProvider(
            "127.0.0.1",
            "admin",
            "admin",
            12022)

        native = Native()

        tunnel = native.interface.Tunnel()
        tunnel.name = 521
        tunnel.description = "test tunnel"
        
        # Configure protocol-over-protocol tunneling
        tunnel.tunnel.source = "1.2.3.4"
        tunnel.tunnel.destination = "4.3.2.1"
        tunnel.tunnel.bandwidth.receive = 100000
        tunnel.tunnel.bandwidth.transmit = 100000
        
        native.interface.tunnel.append(tunnel)
        
        crud_service = CRUDService();
        crud_service.create(provider, native)
class SanityYang(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        self.ncc = NetconfServiceProvider(address='127.0.0.1',
                                          username='******',
                                          password='******',
                                          protocol='ssh',
                                          port=12022)
        self.crud = CRUDService()

    @classmethod
    def tearDownClass(self):
        self.ncc.close()

    def setUp(self):
        self.crud.delete(self.ncc, ietf_aug_base_1.Cpython())
        self.crud.delete(self.ncc, ietf_aug_base_2.Cpython())

    def tearDown(self):
        self.crud.delete(self.ncc, ietf_aug_base_1.Cpython())
        self.crud.delete(self.ncc, ietf_aug_base_2.Cpython())

    def test_aug_base_1(self):
        cpython = ietf_aug_base_1.Cpython()
        cpython.doc.ydktest_aug_1.aug_one = 'aug one'
        cpython.doc.ydktest_aug_2.aug_two = 'aug two'
        cpython.doc.ydktest_aug_4.aug_four = 'aug four'
        cpython.lib.ydktest_aug_1.ydktest_aug_nested_1.aug_one = 'aug one'
        cpython.lib.ydktest_aug_2.ydktest_aug_nested_2.aug_two = 'aug two'
        cpython.lib.ydktest_aug_4.ydktest_aug_nested_4.aug_four = 'aug four'
        cpython.doc.disutils.four_aug_list.enabled = True

        item1 = cpython.doc.disutils.four_aug_list.Ldata()
        item2 = cpython.doc.disutils.four_aug_list.Ldata()

        item1.name, item1.number = 'one', 1
        item2.name, item1.number = 'two', 2

        self.crud.create(self.ncc, cpython)
        cpython_read = self.crud.read(self.ncc, ietf_aug_base_1.Cpython())

        self.assertEqual(is_equal(cpython, cpython_read), True)

    def test_aug_base_2(self):
        cpython = ietf_aug_base_2.Cpython()
        cpython.tools.aug_four = 'aug four'

        self.crud.create(self.ncc, cpython)
        cpython_read = self.crud.read(self.ncc, ietf_aug_base_2.Cpython())

        self.assertEqual(is_equal(cpython, cpython_read), True)
class SanityTest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        self.ncc = NetconfServiceProvider(
            "127.0.0.1",
            "admin",
            "admin",
            12022,
            )
        self.crud = CRUDService()

    def setUp(self):
        runner = Runner()
        self.crud.delete(self.ncc, runner)

    def test_delete_on_list_with_identitykey(self):
        a1 = Runner.OneList.IdentityList()
        a1.config.id = ChildIdentity()
        a1.id_ref =  a1.config.id
        self.crud.create(self.ncc, a1)

        k = Runner.OneList.IdentityList()
        k.config.id = ChildIdentity()
        k.id_ref = k.config.id
        k.yfilter = YFilter.delete
        self.crud.update(self.ncc, k)

        runner_read = self.crud.read(self.ncc, Runner())
        self.assertIsNone(runner_read)

    def test_iden_list(self):
        # CREATE
        il = Runner.OneList.IdentityList()
        il.config.id = ChildIdentity()
        il.id_ref = ChildIdentity()
        self.crud.create(self.ncc, il)

        # READ & VALIDATE
        runner_filter = Runner.OneList()
        read_one = self.crud.read(self.ncc, runner_filter)
        self.assertIsNotNone(read_one)

        read_il = read_one.identity_list.get(ChildIdentity().to_string())
        self.assertIsNotNone(read_il)
        read_il.parent = None
        self.assertEqual(read_il, il)

        # DELETE & VALIDATE
        self.crud.delete(self.ncc, il)
        runner_read = self.crud.read(self.ncc, Runner())
        self.assertIsNone(runner_read)
class SanityTest(unittest.TestCase):

    @classmethod
    def setUpClass(self):
        # Need to keep a local reference for repo to keep it alive,
        # as the first argument for OpenDaylightServiceProvider in libydk
        # is a reference.
        repo_path = os.path.dirname(__file__)
        repo_path = os.path.join(repo_path, '..', '..', '..', 'cpp', 'core', 'tests', 'models')
        self.repo = Repository(repo_path)
        self.odl = OpenDaylightServiceProvider(self.repo, 'localhost', 'admin', 'admin', 12306, EncodingFormat.JSON)
        self.crud = CRUDService()

    def test_read_ODL(self):
        bgp_filter = oc_bgp.Bgp()
        node_provider = self.odl.get_node_provider('xr')
        bgp_read = self.crud.read_config(node_provider, bgp_filter)

        self.assertEqual(bgp_read.global_.config.as_, 65172)
        self.assertEqual(bgp_read.global_.config.router_id, '1.2.3.4')

    def test_create_ODL(self):
        bgp = oc_bgp.Bgp()
        bgp.global_.config.as_ = 65172
        bgp.global_.config.router_id = '1.2.3.4'

        neighbor = oc_bgp.Bgp.Neighbors.Neighbor()
        neighbor.neighbor_address = '6.7.8.9'
        neighbor.config.neighbor_address = '6.7.8.9'
        neighbor.config.peer_as = 65001
        neighbor.config.local_as = 65001
        neighbor.config.peer_group = 'IBGP'

        bgp.neighbors.neighbor.append(neighbor)

        peer_group = oc_bgp.Bgp.PeerGroups.PeerGroup()
        peer_group.peer_group_name = 'IBGP'
        peer_group.config.peer_group_name = 'IBGP'
        peer_group.config.description = 'test description'
        peer_group.config.peer_as = 65001
        peer_group.config.local_as = 65001

        bgp.peer_groups.peer_group.append(peer_group)

        node_provider = self.odl.get_node_provider('xr')
        self.crud.create(node_provider, bgp)

        bgp_read = self.crud.read_config(node_provider, oc_bgp.Bgp())
        self.assertEqual(bgp_read, bgp)
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    telemetry_model_driven = xr_telemetry_model_driven_cfg.TelemetryModelDriven()  # create object
    config_telemetry_model_driven(telemetry_model_driven)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, telemetry_model_driven)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    sr = xr_segment_routing_ms_cfg.Sr()  # create object
    config_sr(sr)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, sr)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    native = xe_native.Native()  # create object
    config_native(native)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, native)

    #provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    mpls_oam = xr_mpls_oam_cfg.MplsOam()  # create object
    config_mpls_oam(mpls_oam)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, mpls_oam)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    clock = xr_infra_infra_clock_linux_cfg.Clock()  # create object
    config_clock(clock)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, clock)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    ospfv3 = xr_ipv6_ospfv3_cfg.Ospfv3()  # create object
    config_ospfv3(ospfv3)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, ospfv3)

    provider.close()
    exit()
# End of script
                        help="NETCONF device (ssh://user:password@host:port)")
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    locale = xr_infra_infra_locale_cfg.Locale()  # create config object
    config_locale(locale)  # add object configuration

    crud.create(provider, locale)  # create object on NETCONF device
    provider.close()
    exit()
# End of script
Exemple #12
0
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    ip_domain = xr_ip_domain_cfg.IpDomain()  # create object
    config_ip_domain(ip_domain)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, ip_domain)

    exit()
# End of script
Exemple #13
0
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    native = xe_native.Native()  # create object
    config_native(native)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, native)

    exit()
# End of script
Exemple #14
0
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    keychains = xr_lib_keychain_cfg.Keychains()  # create object
    config_keychains(keychains)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, keychains)

    exit()
# End of script
Exemple #15
0
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    sr = xr_segment_routing_ms_cfg.Sr()  # create object
    config_sr(sr)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, sr)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    bgp = xr_ipv4_bgp_cfg.Bgp()  # create object
    config_bgp(bgp)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, bgp)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    syslog_service = xr_infra_syslog_cfg.SyslogService()  # create object
    config_syslog_service(syslog_service)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, syslog_service)

    exit()
# End of script
    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    telemetry_model_driven = xr_telemetry_model_driven_cfg.TelemetryModelDriven(
    )  # create object
    config_telemetry_model_driven(
        telemetry_model_driven)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, telemetry_model_driven)

    provider.close()
    exit()
# End of script
class SanityTest(unittest.TestCase):

	@classmethod
	def setUpClass(self):
		self.ncc = NetconfServiceProvider(address='127.0.0.1', 
			username='******', password='******', port=12022)
		self.crud = CRUDService()

	@classmethod
	def tearDownClass(self):
		self.ncc.close()

	def setUp(self):
		print "\nIn method", self._testMethodName
		runner = ysanity.Runner()
		self.crud.delete(self.ncc, runner)

	def tearDown(self):
		runner = ysanity.Runner()
		self.crud.delete(self.ncc, runner)

	def _create_runner(self):
		runner = ysanity.Runner()
		runner.ytypes = runner.Ytypes()
		runner.ytypes.built_in_t = runner.ytypes.BuiltInT()

		return runner

	# def test_invalids(self):
	# 	runner = self._create_runner()  
	# 	runner.ytypes.built_in_t.name = []
	# 	runner.ytypes.built_in_t.u_number8 = -1
	# 	runner.ytypes.built_in_t.enum_value = ''
		
	# 	self.crud.create(self.ncc, runner)
	# 	with self.assertRaises(YPYDataValidationError):
	# 	self.crud.create(self.ncc, runner)

	def test_int8(self):
		# Create Runner
		runner = self._create_runner()
		runner.ytypes.built_in_t.number8 = 0
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	@unittest.skip('skip till validation in place')
	def test_int8_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number8 = 8.5
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # invalid object is not equal
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_int16(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number16 = 126	
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)
		
	@unittest.skip('skip till validation in place')
	def test_int16_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number16 = {}	
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_int32(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number32 = 200000
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	@unittest.skip('skip till validation in place')
	def test_int32_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number32 = []
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_bits(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.bits_value['disable-nagle'] = True
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)
		
	def test_int64(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number64 = -9223372036854775808
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	@unittest.skip('skip till validation in place')
	def test_int64_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.number64 = 9223372036854775808
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_uint8(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number8 = 0
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	@unittest.skip('skip till validation in place')
	def test_uint8_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number8 = -1
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_uint16(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number16 = 65535
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)
	
	@unittest.skip('skip till validation in place')
	def test_unint16_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number16 = 'not an uint'
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_uint32(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number32 = 5927
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)
	
	@unittest.skip('skip till validation in place')
	def test_unint32_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number32 = 4294967296
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)
	
	def test_decimal64(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.deci64 = Decimal64('3.14')
		self.crud.create(self.ncc, runner)
		
		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)
		
		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	@unittest.skip('Revisit implementation')
	def test_uint64(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number64 = 18446744073709551615
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	@unittest.skip('skip till validation in place')
	def test_uint64_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.u_number64 = 18446744073709551616
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)

	def test_string(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.name = 'name_str'
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	# but invalid input is sent to the device
	def test_string_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.name = ['name_str']
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)
		# self.crud.create(self.ncc, runner)

		# Read into Runner2
		#runner1 = ysanity.Runner()
		#runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		#result = is_equal(runner, runner1)
		#self.assertEqual(result, False)

	def test_empty(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.emptee = Empty()
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)
		
		# explicit DELETE not support at the moment
		# runner1.ytypes.built_in_t.emptee = DELETE()
		# self.crud.update(self.ncc, runner1)
		
		# runner2 = self.crud.read(self.ncc, self._create_runner())
		
		# self.assertEqual(runner2.ytypes.built_in_t.emptee, None)
		
	
	def test_empty_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.emptee = 0
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# Read into Runner2
		#runner1 = ysanity.Runner()
		# self.assertRaises(YPYDataValidationError, 
			# self.crud.create, self.ncc, runner)
		#runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		#result = is_equal(runner, runner1)
		#self.assertEqual(result, False)

	def test_boolean(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.bool_value = True
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

		runner = self._create_runner()
		runner.ytypes.built_in_t.bool_value = False
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)


	@unittest.skip('boolean type will convert empty string to false')
	def test_boolean_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.bool_value = ''
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, True)

	def test_enum(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.enum_value = YdkEnumTest_Enum.NONE
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	def test_enum_invalid(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.enum_value = 'not an enum'
		# self.crud.create(self.ncc, runner)
		self.assertRaises(YPYDataValidationError, 
			self.crud.create, self.ncc, runner)

		# OLD
		# with self.assertRaises(YPYError) as e:
		# 	self.crud.create(self.ncc, runner)

		# # Read into Runner2
		# runner1 = ysanity.Runner()
		# runner1 = self.crud.read(self.ncc, runner1)

		# # # Compare runners
		# result = is_equal(runner, runner1)
		# self.assertEqual(result, False)
		
	def test_union(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.younion = YdkEnumTest_Enum.NONE
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)

	def test_identityref(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.identity_ref_value = \
			ysanity.ChildIdentity_Identity()
		self.crud.create(self.ncc, runner)

		# Read into Runner2
		runner1 = ysanity.Runner()
		runner1 = self.crud.read(self.ncc, runner1)

		# Compare runners
		result = is_equal(runner, runner1)
		self.assertEqual(result, True)
	
	# Will only test max-elements. If min-elements is set, then this
	# constraint is required for every READ/UPDATE operation. So it will fail all other cases.
	def test_leaflist_max_elements(self):
		runner = self._create_runner()
		runner.ytypes.built_in_t.llstring = [str(i) for i in range(30)]
		runner.ytypes.built_in_t.llstring.extend([None for i in range(20)])
		self.assertRaises(YPYDataValidationError,
			self.crud.create, self.ncc, runner)

	def test_list_max_elements(self):
		runner = self._create_runner()
		elems = []
		n = 10
		for i in range(n):
			l = ysanity.Runner.OneList.Ldata()
			l.number = i
			l.name = str(i)
			elems.append(l)
		runner.one_list.ldata.extend(elems)
		self.assertRaises(YPYDataValidationError,
			self.crud.create, self.ncc, runner)
class SanityYang(unittest.TestCase):
    PROVIDER_TYPE = "non-native"

    @classmethod
    def setUpClass(self):
        if SanityYang.PROVIDER_TYPE == "native":
            self.ncc = NativeNetconfServiceProvider(address='127.0.0.1',
                                                    username='******',
                                                    password='******',
                                                    protocol='ssh',
                                                    port=12022)
        else:
            self.ncc = NetconfServiceProvider(address='127.0.0.1',
                                              username='******',
                                              password='******',
                                              protocol='ssh',
                                              port=12022)
        self.crud = CRUDService()
        # config device with entity a
        a = self.getInitEntity()
        self.crud.delete(self.ncc, a)
        self.crud.create(self.ncc, a)

    @classmethod
    def tearDownClass(self):
        self.ncc.close()

    def setUp(self):
        pass

    def tearDown(self):
        pass

    @classmethod
    def getInitEntity(self):
        """ Set and return entity with following XML:

        <a>
          <a1>some value</a1>
          <a2>value of a2</a2>
          <a3>value of a3</a3>
          <b>
            <b1>some value</b1>
            <b2>value of b2</b2>
            <b3>value of b3</b3>
            <c/>
            <f>
              <f1>f</f1>
            </f>
            <d>
              <d1>some value d1</d1>
              <d2>value of d2</d2>
              <d3>value of d3</d3>
              <e>
                <e1>some value e1</e1>
                <e2>value of e2</e2>
              </e>
            </d>
          </b>
          <lst>
            <number>1</number>
            <value>one</value>
          </lst>
          <lst>
            <number>2</number>
            <value>two</value>
          </lst>
          <lst>
            <number>3</number>
            <value>three</value>
          </lst>
        </a>
        """
        a = ysanity.A()
        a.a1, a.a2, a.a3 = "some value", "value of a2", "value of a3"
        a.b.b1, a.b.b2, a.b.b3 = "some value", "value of b2", "value of b3"
        # config presence container
        a.b.f = a.b.F()
        a.b.f.f1 = 'f'
        a.b.c = a.b.C()
        a.b.d.d1 = "some value d1"
        a.b.d.d2 = "value of d2"
        a.b.d.d3 = "value of d3"
        a.b.d.e.e1, a.b.d.e.e2 = "some value e1", "value of e2"
        l1, l2, l3 = a.Lst(), a.Lst(), a.Lst()
        l1.number, l1.value = 1, "one"
        l2.number, l2.value = 2, "two"
        l3.number, l3.value = 3, "three"
        a.lst.extend([l1, l2, l3])
        return a

    def test_CASE1(self):
        """Use crud read with top level entity returns all data."""
        a = ysanity.A()
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = self.getInitEntity()
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE2(self):
        """ According to https://tools.ietf.org/html/rfc6241#section-6.2.5,
        `a.a1` is a content match node. Uses crud read on `a` returns all data.
        """
        a = ysanity.A()
        a.a1 = "some value"
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = self.getInitEntity()
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE3(self):
        """Assign a READ object to `a.a1` should only return data on this leaf."""
        a = ysanity.A()
        a.a1 = READ()
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = ysanity.A()
        preconfig_a.a1 = "some value"
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE4(self):
        """Now `a.b.b1` serves as a content match node."""
        a = ysanity.A()
        a.b.b1 = "some value"
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = self.getInitEntity()
        del preconfig_a.lst[:]
        preconfig_a.a1 = None
        preconfig_a.a2 = None
        preconfig_a.a3 = None
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE5(self):
        """Now `a.b.d.e` serves as a content match node."""
        a = ysanity.A()
        e = a.b.d.e
        e.e1 = "some value e1"
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = ysanity.A()
        preconfig_a.b.d.e.e1 = "some value e1"
        preconfig_a.b.d.e.e2 = "value of e2"
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE6(self):
        """Assign `a.b.c` serves as an empty presence container."""
        a = ysanity.A()
        a.b.c = a.b.C()
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = ysanity.A()
        preconfig_a.b.c = preconfig_a.b.C()
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE7(self):
        """`item1.number` and `item2.number` serves as content match nodes."""
        a = ysanity.A()
        item1, item2 = a.Lst(), a.Lst()
        item1.number, item2.number = 1, 2
        a.lst.extend([item1, item2])
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = ysanity.A()
        item1.value, item2.value = "one", "two"
        preconfig_a.lst.extend([item1, item2])
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_CASE8(self):
        """Assign presence class F to `a.b.f`."""
        a = ysanity.A()
        a.b.f = a.b.F()
        a.b.f.f1 = 'f'
        a_read = self.crud.read(self.ncc, a)
        preconfig_a = a
        self.assertEqual(is_equal(a_read, preconfig_a), True)

    def test_read_oc_patttern(self):
        obj_A = oc_pattern.OcA()
        obj_A.a = 'hello'
        obj_A.b.b = obj_A.a  # 'world' --> YPYServiceProviderError: illegal reference
        self.crud.create(self.ncc, obj_A)

        obj_A_read = self.crud.read(self.ncc, oc_pattern.OcA(), True)

        self.assertEqual(is_equal(obj_A, obj_A_read), True)
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    grpc = xr_man_ems_cfg.Grpc()  # create object
    config_grpc(grpc)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, grpc)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    syslog = xr_infra_syslog_cfg.Syslog()  # create object
    config_syslog(syslog)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, syslog)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    rsvp = xr_ip_rsvp_cfg.Rsvp()  # create object
    config_rsvp(rsvp)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, rsvp)

    exit()
# End of script
                        help="NETCONF device (ssh://user:password@host:port)")
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    clock = xr_infra_infra_clock_linux_cfg.Clock()  # create config object
    config_clock(clock)  # add object configuration

    crud.create(provider, clock)  # create object on NETCONF device
    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    arpgmp = xr_ipv4_arp_cfg.Arpgmp()  # create object
    config_arpgmp(arpgmp)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, arpgmp)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    network_instances = oc_network_instance.NetworkInstances()
    config_mpls(network_instances)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, network_instances)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    global_interface_configuration = xr_ifmgr_cfg.GlobalInterfaceConfiguration()  # create object
    config_global_interface_configuration(global_interface_configuration)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, global_interface_configuration)

    provider.close()
    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    router_static = xr_ip_static_cfg.RouterStatic()  # create object
    config_router_static(router_static)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, router_static)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    mpls = oc_mpls.Mpls()  # create object
    config_mpls(mpls)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, mpls)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    syslog_service = xr_infra_syslog_cfg.SyslogService()  # create object
    config_syslog_service(syslog_service)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, syslog_service)

    exit()
# End of script
def config_bgp_ipv4(yang_repo="",
                    address="",
                    grpc_port="",
                    username="",
                    password="",
                    crud_op="add",
                    bgp={}):

    repository = Repository(yang_repo)
    provider = gNMIServiceProvider(repo=repository,
                                   address=address,
                                   port=int(grpc_port),
                                   username=username,
                                   password=password)

    gnmi_service = gNMIService()
    crud = CRUDService()

    ni = oc_ni.NetworkInstances.NetworkInstance()

    if "vrf" in list(bgp.keys()):
        ni.name = bgp["vrf"]
    else:
        print("Vrf for network Instance not specified")
        sys.exit(1)

    protocol = ni.protocols.Protocol()

    protocol.identifier = oc_policy_types.BGP()
    protocol.name = "default"
    protocol.config.identifier = oc_policy_types.BGP()
    protocol.config.name = "default"

    if "as" in list(bgp.keys()):
        protocol.bgp.global_.config.as_ = int(bgp["as"])
    else:
        print("AS for BGP instance not specified")
        sys.exit(1)

    if "router_id" in list(bgp.keys()):
        protocol.bgp.global_.config.router_id = bgp["router_id"]

    afi_safi = protocol.bgp.global_.afi_safis.AfiSafi()
    afi_safi.afi_safi_name = oc_bgp_types.IPV4UNICAST()
    afi_safi.config.afi_safi_name = oc_bgp_types.IPV4UNICAST()
    afi_safi.config.enabled = True
    protocol.bgp.global_.afi_safis.afi_safi.append(afi_safi)

    if "peer-group-name" in list(bgp.keys()):
        peer_group = protocol.bgp.peer_groups.PeerGroup()
        peer_group.peer_group_name = bgp["peer-group-name"]
        peer_group.config.peer_group_name = bgp["peer-group-name"]
        if "peer-as" in list(bgp.keys()):
            peer_group.config.peer_as = int(bgp["peer-as"])
        if "peer-group-local-address" in list(bgp.keys()):
            peer_group.transport.config.local_address = bgp[
                "peer-group-local-address"]

        afi_safi = peer_group.afi_safis.AfiSafi()
        afi_safi.afi_safi_name = oc_bgp_types.IPV4UNICAST()
        afi_safi.config.afi_safi_name = oc_bgp_types.IPV4UNICAST()
        afi_safi.config.enabled = True
        peer_group.afi_safis.afi_safi.append(afi_safi)
        protocol.bgp.peer_groups.peer_group.append(peer_group)

    if "neighbor" in list(bgp.keys()):
        neighbor = protocol.bgp.neighbors.Neighbor()
        neighbor.neighbor_address = bgp["neighbor"]
        neighbor.config.neighbor_address = bgp["neighbor"]
        #neighbor.config.peer_as = bgp["peer-as"]
        if "peer-group-name" in list(bgp.keys()):
            neighbor.config.peer_group = bgp["peer-group-name"]

        afi_safi = neighbor.afi_safis.AfiSafi()
        afi_safi.afi_safi_name = oc_bgp_types.IPV4UNICAST()
        afi_safi.config.afi_safi_name = oc_bgp_types.IPV4UNICAST()
        afi_safi.config.enabled = True
        neighbor.afi_safis.afi_safi.append(afi_safi)

        protocol.bgp.neighbors.neighbor.append(neighbor)

    ni.protocols.protocol.append(protocol)

    if crud_op == "add":
        response = crud.create(provider, ni)
    elif crud_op == "delete":
        response = crud.delete(provider, ni)
    elif crud_op is "update":
        response = crud.update(provider, ni)
    else:
        print(
            "Invalid operation requested, allowed values =  add, update, delete"
        )
        return False
    return response
Exemple #32
0
class SanityTest(unittest.TestCase):
    PROVIDER_TYPE = "non-native"

    @classmethod
    def setUpClass(self):
        if SanityTest.PROVIDER_TYPE == "native":
            self.ncc = NativeNetconfServiceProvider(address='127.0.0.1',
                                                    username='******',
                                                    password='******',
                                                    protocol='ssh',
                                                    port=12022)
        else:
            self.ncc = NetconfServiceProvider(address='127.0.0.1',
                                              username='******',
                                              password='******',
                                              protocol='ssh',
                                              port=12022)
        self.crud = CRUDService()

    @classmethod
    def tearDownClass(self):
        runner = ysanity.Runner()
        self.crud.delete(self.ncc, runner)
        self.ncc.close()

    def setUp(self):
        runner = ysanity.Runner()
        self.crud.delete(self.ncc, runner)

    def _create_runner(self):
        runner = ysanity.Runner()
        runner.ytypes = runner.Ytypes()
        runner.ytypes.built_in_t = runner.ytypes.BuiltInT()
        return runner

    def test_int8_invalid(self):
        try:
            runner = self._create_runner()
            runner.yvalidate = False
            runner.ytypes.built_in_t.number8 = 8.5
            self.crud.create(self.ncc, runner)
        except YPYServiceProviderError as err:
            expected_msg = '<error-message xml:lang="en">"8.5" is not a valid value.</error-message>'
            self.assertTrue(expected_msg in err.message)
        else:
            raise Exception(
                'YPYServiceProviderError was not raised as expected')

    def test_uint_invalid(self):
        try:
            runner = self._create_runner()
            runner.ytypes.built_in_t.u_number8 = -1
            runner.ytypes.built_in_t.yvalidate = False
            self.crud.create(self.ncc, runner)
        except YPYServiceProviderError as err:
            expected_msg = '<error-message xml:lang="en">"-1" is not a valid value.</error-message>'
            self.assertTrue(expected_msg in err.message)
        else:
            raise Exception(
                'YPYServiceProviderError was not raised as expected')

    def test_string_invalid(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.name = ['name_str']
        runner.ytypes.yvalidate = False
        self.crud.create(self.ncc, runner)

    def test_empty_invalid(self):
        try:
            runner = self._create_runner()
            runner.ytypes.built_in_t.emptee = 1
            runner.ytypes.built_in_t.yvalidate = False
            self.crud.create(self.ncc, runner)
        except YPYServiceProviderError as err:
            expected_msg = '<error-message xml:lang="en">got unexpected data "1" for a container</error-message>'
            self.assertTrue(expected_msg in err.message.strip())
        else:
            raise Exception(
                'YPYServiceProviderError was not raised as expected')

    def test_enum_invalid(self):
        try:
            runner = self._create_runner()
            runner.ytypes.built_in_t.enum_value = 'not an enum'
            runner.ytypes.built_in_t.yvalidate = False
            self.crud.create(self.ncc, runner)
        except YPYServiceProviderError as err:
            expected_msg = '<error-message xml:lang="en">"" is an invalid value.</error-message><error-info><bad-element>enum-value</bad-element>'
            self.assertTrue(expected_msg in err.message)
        else:
            raise Exception(
                'YPYServiceProviderError was not raised as expected')

    def test_enum_range_invalid(self):
        try:
            runner = self._create_runner()
            runner.ytypes.built_in_t.enum_int_value = 20000
            runner.ytypes.built_in_t.yvalidate = False
            self.crud.create(self.ncc, runner)
        except YPYServiceProviderError as err:
            expected_msg = '<error-message xml:lang="en">"20000" is not a valid value.</error-message>'
            self.assertTrue(expected_msg in err.message)
        except YPYError as err:
            raise Exception('Unexpected exception occured: %s' %
                            err.message.strip())
        else:
            raise Exception(
                'YPYServiceProviderError was not raised as expected')

    def test_str_pattern_invalid(self):
        try:
            one = ysanity.Runner.LeafRef.One()
            one.name_of_one = '1.2.3'
            one.yvalidate = False
            self.crud.create(self.ncc, one)
        except YPYServiceProviderError as err:
            expected_msg = '<error-message xml:lang="en">"1.2.3" is an invalid value.</error-message>'
            self.assertTrue(expected_msg in err.message)
        except YPYError as err:
            raise Exception('Unexpected exception occured: %s' %
                            err.message.strip())
        else:
            raise Exception(
                'YPYServiceProviderError was not raised as expected')
class SanityYang(unittest.TestCase):
    PROVIDER_TYPE = "non-native"

    @classmethod
    def setUpClass(self):
        if SanityYang.PROVIDER_TYPE == "native":
            self.ncc = NativeNetconfServiceProvider(address='127.0.0.1',
                                                    username='******',
                                                    password='******',
                                                    protocol='ssh',
                                                    port=12022)
        else:
            self.ncc = NetconfServiceProvider(address='127.0.0.1',
                                              username='******',
                                              password='******',
                                              protocol='ssh',
                                              port=12022)
        self.crud = CRUDService()

    @classmethod
    def tearDownClass(self):
        self.ncc.close()

    def setUp(self):
        runner = ysanity.Runner()
        self.crud.delete(self.ncc, runner)

    def tearDown(self):
        runner = ysanity.Runner()
        self.crud.delete(self.ncc, runner)

    def test_one_level_pos(self):
        # READ
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.one.number, r_1.one.name = 1, 'runner:one:name'
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.one.number, r_1.one.name = 10, 'runner/one/name'
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_two_level_pos(self):
        # READ
        r_1 = ysanity.Runner()
        r_1.two.number, r_1.two.name, r_1.two.sub1.number = 2, 'runner:two:name', 21
        self.crud.create(self.ncc, r_1)
        r_2 = ysanity.Runner()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.two.number, r_1.two.name, r_1.two.sub1.number = 20, 'runner/two/name', 210
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_three_level_pos(self):
        # READ
        r_1 = ysanity.Runner()
        r_1.three.number, r_1.three.name, \
            r_1.three.sub1.number, r_1.three.sub1.sub2.number = 3, 'runner:three:name', 31, 311
        self.crud.create(self.ncc, r_1)
        r_2 = ysanity.Runner()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.three.number, r_1.three.name, \
            r_1.three.sub1.number, r_1.three.sub1.sub2.number = 30, 'runner/three/name', 310, 3110
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)


    def test_onelist_neg_dupkey(self):
        # netsim/enxr not complaining
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1, e_2 = ysanity.Runner.OneList.Ldata(), ysanity.Runner.OneList.Ldata()
        e_1.number = 1
        e_2.name = 'foo'
        e_2.number = 1
        e_2.name = 'bar'
        r_1.one_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)

    def test_onelist_neg_update_key_nonexist(self):
        # will create a nonexist elem
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1, e_2 = ysanity.Runner.OneList.Ldata(), ysanity.Runner.OneList.Ldata()
        e_1.number = 1
        e_1.name = 'runner:onelist:ldata['+str(e_1.number)+']:name'
        r_1.one_list.ldata.extend([e_1])
        self.crud.create(self.ncc, r_1)
        r_1.one_list.ldata[0].number = 2
        r_1.one_list.ldata[0].name = '2'
        # assuming update on nonexist key will raise Exception
        with self.assertRaises(Exception):
            self.crud.update(self.ncc, r_1.one_list.ldata[0])


    def test_onelsit_pos(self):
        # READ
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1, e_2 = ysanity.Runner.OneList.Ldata(), ysanity.Runner.OneList.Ldata()
        e_1.number = 1
        e_1.name = 'runner:onelist:ldata['+str(e_1.number)+']:name'
        e_2.number = 2
        e_2.name = 'runner:onelist:ldata['+str(e_2.number)+']:name'
        r_1.one_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1, e_2 = ysanity.Runner.OneList.Ldata(), ysanity.Runner.OneList.Ldata()
        e_1.number = 1
        e_1.name = 'runner:onelist:ldata['+str(e_1.number)+']:name'
        e_2.number = 2
        e_2.name = 'runner:onelist:ldata['+str(e_2.number)+']:name'
        r_1.one_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)


    def test_twolist_pos(self):
        # READ
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1, e_2 = ysanity.Runner.TwoList.Ldata(), ysanity.Runner.TwoList.Ldata()
        e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1()
        e_1.number = 21
        e_1.name = 'runner:twolist:ldata['+str(e_1.number)+']:name'
        e_11.number = 211
        e_11.name = 'runner:twolist:ldata['+str(e_1.number)+']:subl1['+str(e_11.number)+']:name'
        e_12.number = 212
        e_12.name = 'runner:twolist:ldata['+str(e_1.number)+']:subl1['+str(e_12.number)+']:name'
        e_1.subl1.extend([e_11, e_12])
        e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1()
        e_2.number = 22
        e_2.name = 'runner:twolist:ldata['+str(e_2.number)+']:name'
        e_21.number = 221
        e_21.name = 'runner:twolist:ldata['+str(e_2.number)+']:subl1['+str(e_21.number)+']:name'
        e_22.number = 222
        e_22.name = 'runner:twolist:ldata['+str(e_2.number)+']:subl1['+str(e_22.number)+']:name'
        e_2.subl1.extend([e_21, e_22])
        r_1.two_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1, e_2 = ysanity.Runner.TwoList.Ldata(), ysanity.Runner.TwoList.Ldata()
        e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1()
        e_1.number = 21
        e_1.name = 'runner/twolist/ldata['+str(e_1.number)+']/name'
        e_11.number = 211
        e_11.name = 'runner/twolist/ldata['+str(e_1.number)+']/subl1['+str(e_11.number)+']/name'
        e_12.number = 212
        e_12.name = 'runner/twolist/ldata['+str(e_1.number)+']/subl1['+str(e_12.number)+']/name'
        e_1.subl1.extend([e_11, e_12])
        e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1()
        e_2.number = 22
        e_2.name = 'runner/twolist/ldata['+str(e_2.number)+']/name'
        e_21.number = 221
        e_21.name = 'runner/twolist/ldata['+str(e_2.number)+']/subl1['+str(e_21.number)+']/name'
        e_22.number = 222
        e_22.name = 'runner/twolist/ldata['+str(e_2.number)+']/subl1['+str(e_22.number)+']/name'
        e_2.subl1.extend([e_21, e_22])
        r_1.two_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)


    def test_threelist_pos(self):
        # READ
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1 = ysanity.Runner.ThreeList.Ldata()
        e_1.number = 31
        e_1.name = 'runner:threelist:ldata['+str(e_1.number)+']:name'
        e_2 = ysanity.Runner.ThreeList.Ldata()
        e_2.number = 32
        e_2.name = 'runner:threelist:ldata['+str(e_2.number)+']:name'
        e_11 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_12 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_11.number = 311
        e_11.name = 'runner:threelist:ldata['+str(e_1.number)+']:subl1['+str(e_11.number)+']:name'
        e_12.number = 312
        e_12.name = 'runner:threelist:ldata['+str(e_1.number)+']:subl1['+str(e_12.number)+']:name'
        e_111 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_112 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_111.number = 3111
        e_111.name = 'runner:threelist:ldata['+str(e_1.number)+']:subl1['+str(e_11.number)+']:subsubl1['+str(e_111.number)+']:name'
        e_112.number = 3112
        e_112.name = 'runner:threelist:ldata['+str(e_1.number)+']:subl1['+str(e_11.number)+']:subsubl1['+str(e_112.number)+']:name'
        e_11.sub_subl1.extend([e_111, e_112])
        e_121 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_122 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_121.number = 3121
        e_121.name = 'runner:threelist:ldata['+str(e_1.number)+']:subl1['+str(e_12.number)+']:subsubl1['+str(e_121.number)+']:name'
        e_122.number = 3122
        e_121.name = 'runner:threelist:ldata['+str(e_1.number)+']:subl1['+str(e_12.number)+']:subsubl1['+str(e_122.number)+']:name'
        e_12.sub_subl1.extend([e_121, e_122])
        e_1.subl1.extend([e_11, e_12])
        e_21 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_22 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_21.number = 321
        e_21.name = 'runner:threelist:ldata['+str(e_2.number)+']:subl1['+str(e_21.number)+']:name'
        e_22.number = 322
        e_22.name = 'runner:threelist:ldata['+str(e_2.number)+']:subl1['+str(e_22.number)+']:name'
        e_211 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_212 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_211.number = 3211
        e_211.name = 'runner:threelist:ldata['+str(e_2.number)+']:subl1['+str(e_21.number)+']:subsubl1['+str(e_211.number)+']:name'
        e_212.number = 3212
        e_212.name = 'runner:threelist:ldata['+str(e_2.number)+']:subl1['+str(e_21.number)+']:subsubl1['+str(e_212.number)+']:name'
        e_21.sub_subl1.extend([e_211, e_212])
        e_221 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_222 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_221.number = 3221
        e_221.name = 'runner:threelist:ldata['+str(e_2.number)+']:subl1['+str(e_22.number)+']:subsubl1['+str(e_221.number)+']:name'
        e_222.number = 3222
        e_222.name = 'runner:threelist:ldata['+str(e_2.number)+']:subl1['+str(e_22.number)+']:subsubl1['+str(e_222.number)+']:name'
        e_22.sub_subl1.extend([e_221, e_222])
        e_2.subl1.extend([e_21, e_22])
        r_1.three_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1 = ysanity.Runner.ThreeList.Ldata()
        e_1.number = 31
        e_1.name = 'runner/threelist/ldata['+str(e_1.number)+']/name'
        e_2 = ysanity.Runner.ThreeList.Ldata()
        e_2.number = 32
        e_2.name = 'runner/threelist/ldata['+str(e_2.number)+']/name'
        e_11 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_12 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_11.number = 311
        e_11.name = 'runner/threelistldata['+str(e_1.number)+']/subl1['+str(e_11.number)+']/name'
        e_12.number = 312
        e_12.name = 'runner/threelist/ldata['+str(e_1.number)+']/subl1['+str(e_12.number)+']/name'
        e_111 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_112 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_111.number = 3111
        e_111.name = 'runner/threelist/ldata['+str(e_1.number)+']/subl1['+str(e_11.number)+']/subsubl1['+str(e_111.number)+']/name'
        e_112.number = 3112
        e_112.name = 'runner/threelist/ldata['+str(e_1.number)+']/subl1['+str(e_11.number)+']/subsubl1['+str(e_112.number)+']/name'
        e_11.sub_subl1.extend([e_111, e_112])
        e_121 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_122 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_121.number = 3121
        e_121.name = 'runner/threelist/ldata['+str(e_1.number)+']/subl1['+str(e_12.number)+']/subsubl1['+str(e_121.number)+']/name'
        e_122.number = 3122
        e_121.name = 'runner/threelist/ldata['+str(e_1.number)+']/subl1['+str(e_12.number)+']/subsubl1['+str(e_122.number)+']/name'
        e_12.sub_subl1.extend([e_121, e_122])
        e_1.subl1.extend([e_11, e_12])
        e_21 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_22 = ysanity.Runner.ThreeList.Ldata.Subl1()
        e_21.number = 321
        e_21.name = 'runner/threelist/ldata['+str(e_2.number)+']/subl1['+str(e_21.number)+']/name'
        e_22.number = 322
        e_22.name = 'runner/threelist/ldata['+str(e_2.number)+']/subl1['+str(e_22.number)+']/name'
        e_211 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_212 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_211.number = 3211
        e_211.name = 'runner/threelist/ldata['+str(e_2.number)+']/subl1['+str(e_21.number)+']/subsubl1['+str(e_211.number)+']/name'
        e_212.number = 3212
        e_212.name = 'runner/threelist/ldata['+str(e_2.number)+']/subl1['+str(e_21.number)+']/subsubl1['+str(e_212.number)+']/name'
        e_21.sub_subl1.extend([e_211, e_212])
        e_221 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_222 = ysanity.Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_221.number = 3221
        e_221.name = 'runner/threelist/ldata['+str(e_2.number)+']/subl1['+str(e_22.number)+']/subsubl1['+str(e_221.number)+']/name'
        e_222.number = 3222
        e_222.name = 'runner/threelist/ldata['+str(e_2.number)+']/subl1['+str(e_22.number)+']/subsubl1['+str(e_222.number)+']/name'
        e_22.sub_subl1.extend([e_221, e_222])
        e_2.subl1.extend([e_21, e_22])
        r_1.three_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)


    def test_InbtwList_pos(self):
        # READ
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1 = ysanity.Runner.InbtwList.Ldata()
        e_2 = ysanity.Runner.InbtwList.Ldata()
        e_1.number = 11
        e_1.name = 'runner:inbtwlist:['+str(e_1.number)+']:name'
        e_1.subc.number = 111
        e_1.subc.name = 'runner:inbtwlist:['+str(e_1.number)+']:subc:name'
        e_2.number = 12
        e_2.name = 'runner:inbtwlist:['+str(e_2.number)+']:name'
        e_2.subc.number = 121
        e_2.subc.name = 'runner:inbtwlist:['+str(e_2.number)+']:name'
        e_11 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_11.name = 'runner:inbtwlist:['+str(e_1.number)+']:subc:subcsubl1['+str(e_11.number)+']:name'
        e_12 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12.number = 112
        e_12.name = 'runner:inbtwlist:['+str(e_1.number)+']:subc:subcsubl1['+str(e_12.number)+']:name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 121
        e_21.name = 'runner:inbtwlist:['+str(e_2.number)+']:subc:subcsubl1['+str(e_21.number)+']:name'
        e_22 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22.number = 122
        e_22.name = 'runner:inbtwlist:['+str(e_2.number)+']:subc:subcsubl1['+str(e_22.number)+']:name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1 = ysanity.Runner.InbtwList.Ldata()
        e_2 = ysanity.Runner.InbtwList.Ldata()
        e_1.number = 11
        e_1.name = 'runner/inbtwlist/['+str(e_1.number)+']/name'
        e_1.subc.number = 111
        e_1.subc.name = 'runnerinbtwlist/['+str(e_1.number)+']/subc/name'
        e_2.number = 12
        e_2.name = 'runner/inbtwlist/['+str(e_2.number)+']/name'
        e_2.subc.number = 121
        e_2.subc.name = 'runner/inbtwlist/['+str(e_2.number)+']/name'
        e_11 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_11.name = 'runner/inbtwlist/['+str(e_1.number)+']/subc/subcsubl1['+str(e_11.number)+']/name'
        e_12 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12.number = 112
        e_12.name = 'runner/inbtwlist/['+str(e_1.number)+']/subc/subcsubl1['+str(e_12.number)+']/name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 121
        e_21.name = 'runner/inbtwlist/['+str(e_2.number)+']/subc/subcsubl1['+str(e_21.number)+']/name'
        e_22 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22.number = 122
        e_22.name = 'runner/inbtwlist/['+str(e_2.number)+']/subc/subcsubl1['+str(e_22.number)+']/name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)


    def test_leafref_simple_pos(self):
        # change ref and original data together
        # READ
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.ytypes.built_in_t.number8 = 100
        r_1.ytypes.built_in_t.leaf_ref = r_1.ytypes.built_in_t.number8
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.ytypes.built_in_t.number8 = 110
        r_1.ytypes.built_in_t.leaf_ref = r_1.ytypes.built_in_t.number8
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_leafref_pos(self):
        # rfc: refer to leaf
        # 1.already exists
        # 2.has default value
        # create leafs will be referred to
        # CREATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.one.name = 'runner:one:name'
        r_1.two.sub1.number = 21
        r_1.three.sub1.sub2.number = 311
        e_1 = ysanity.Runner.InbtwList.Ldata()
        e_2 = ysanity.Runner.InbtwList.Ldata()
        e_1.number = 11
        e_2.number = 21
        e_1.name = 'runner:inbtwlist['+str(e_1.number)+']:name'
        e_2.name = 'runner:inbtwlist['+str(e_2.number)+']:name'
        e_1.subc.number = 111
        e_2.subc.number = 121
        e_1.subc.name = 'runner:inbtwlist['+str(e_1.number)+']:subc:name'
        e_2.subc.name = 'runner:inbtwlist['+str(e_2.number)+']:subc:name'
        e_11 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_12.number = 112
        e_11.name = 'runner:inbtwlist['+str(e_1.number)+']:subc:subcsubl1['+str(e_11.number)+']:name'
        e_12.name = 'runner:inbtwlist['+str(e_1.number)+']:subc:subcsubl1['+str(e_12.number)+']:name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 311
        e_22.number = 122
        e_21.name = 'runner:inbtwlist['+str(e_2.number)+']:subc:subcsubl1['+str(e_21.number)+']:name'
        e_22.name = 'runner:inbtwlist['+str(e_2.number)+']:subc:subcsubl1['+str(e_22.number)+']:name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])

        r_1.leaf_ref.ref_one_name = r_1.one.name
        r_1.leaf_ref.ref_two_sub1_number = r_1.two.sub1.number
        r_1.leaf_ref.ref_three_sub1_sub2_number = r_1.three.sub1.sub2.number
        r_1.leaf_ref.ref_inbtw = e_21.name
        r_1.leaf_ref.one.name = 'runner:leaf-ref:one:name'
        r_1.leaf_ref.one.two.self_ref_one_name = r_1.leaf_ref.ref_one_name
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(r_1.one.name, r_1.leaf_ref.ref_one_name)
        self.assertEqual(r_1.two.sub1.number, r_1.leaf_ref.ref_two_sub1_number)
        self.assertEqual(r_1.three.sub1.sub2.number, r_1.leaf_ref.ref_three_sub1_sub2_number)
        self.assertEqual(r_1.inbtw_list.ldata[1].subc.subc_subl1[0].name, r_1.leaf_ref.ref_inbtw)
        self.assertEqual(r_1.leaf_ref.ref_one_name, r_1.leaf_ref.one.two.self_ref_one_name)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.one.name = 'runner/one/name'
        r_1.two.sub1.number = 21
        r_1.three.sub1.sub2.number = 311
        e_1 = ysanity.Runner.InbtwList.Ldata()
        e_2 = ysanity.Runner.InbtwList.Ldata()
        e_1.number = 11
        e_2.number = 21
        e_1.name = 'runner/inbtwlist['+str(e_1.number)+']/name'
        e_2.name = 'runner/inbtwlist['+str(e_2.number)+']/name'
        e_1.subc.number = 111
        e_2.subc.number = 121
        e_1.subc.name = 'runner/inbtwlist['+str(e_1.number)+']/subc/name'
        e_2.subc.name = 'runner/inbtwlist['+str(e_2.number)+']/subc/name'
        e_11 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_12.number = 112
        e_11.name = 'runner/inbtwlist['+str(e_1.number)+']/subc/subcsubl1['+str(e_11.number)+']/name'
        e_12.name = 'runner/inbtwlist['+str(e_1.number)+']/subc/subcsubl1['+str(e_12.number)+']/name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22 = ysanity.Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 311
        e_22.number = 122
        e_21.name = 'runner/inbtwlist['+str(e_2.number)+']/subc/subcsubl1['+str(e_21.number)+']/name'
        e_22.name = 'runner/inbtwlist['+str(e_2.number)+']/subc/subcsubl1['+str(e_22.number)+']/name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])

        r_1.leaf_ref.ref_one_name = r_1.one.name
        r_1.leaf_ref.ref_two_sub1_number = r_1.two.sub1.number
        r_1.leaf_ref.ref_three_sub1_sub2_number = r_1.three.sub1.sub2.number
        r_1.leaf_ref.ref_inbtw = e_21.name
        r_1.leaf_ref.one.name = 'runner/leaf-ref/one/name'
        r_1.leaf_ref.one.two.self_ref_one_name = r_1.leaf_ref.ref_one_name
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(r_1.one.name, r_1.leaf_ref.ref_one_name)
        self.assertEqual(r_1.two.sub1.number, r_1.leaf_ref.ref_two_sub1_number)
        self.assertEqual(r_1.three.sub1.sub2.number, r_1.leaf_ref.ref_three_sub1_sub2_number)
        self.assertEqual(r_1.inbtw_list.ldata[1].subc.subc_subl1[0].name, r_1.leaf_ref.ref_inbtw)
        self.assertEqual(r_1.leaf_ref.ref_one_name, r_1.leaf_ref.one.two.self_ref_one_name)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_aug_one_pos(self):
        # CREATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.one.one_aug.number = 1
        r_1.one.one_aug.name =r_1.one.one_aug._common_path
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        r_1.one.one_aug.number = 10
        r_1.one.one_aug.name =r_1.one.one_aug._common_path.replace(':', '/')
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_aug_onelist_pos(self):
        # CREATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1 = ysanity.Runner.OneList.OneAugList.Ldata()
        e_2 = ysanity.Runner.OneList.OneAugList.Ldata()
        e_1.number = 1
        e_1.name = e_1._common_path
        e_2.number = 2
        e_2.name = e_2._common_path
        r_1.one_list.one_aug_list.ldata.extend([e_1, e_2])
        r_1.one_list.one_aug_list.enabled = True
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = ysanity.Runner(), ysanity.Runner()
        e_1 = ysanity.Runner.OneList.OneAugList.Ldata()
        e_2 = ysanity.Runner.OneList.OneAugList.Ldata()
        e_1.number = 1
        e_1.name = e_1._common_path.replace(':', '/')
        e_2.number = 2
        e_2.name = e_2._common_path.replace(':', '/')
        r_1.one_list.one_aug_list.ldata.extend([e_1, e_2])
        r_1.one_list.one_aug_list.enabled = True
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = ysanity.Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(r_2._has_data(), False)

    def test_parent_empty(self):
        runner = ysanity.Runner()
        runner.ytypes.enabled = Empty()
        runner.ytypes.built_in_t.emptee = Empty()

        self.crud.create(self.ncc, runner)

        runner_read = self.crud.read(self.ncc, ysanity.Runner())

        self.assertEqual(is_equal(runner_read, runner), True)
Exemple #34
0
class SanityYang(unittest.TestCase):
    PROVIDER_TYPE = "non-native"

    @classmethod
    def setUpClass(self):
        if SanityYang.PROVIDER_TYPE == "native":
            self.ncc = NativeNetconfServiceProvider(address='127.0.0.1',
                                                    username='******',
                                                    password='******',
                                                    protocol='ssh',
                                                    port=12022)
        else:
            self.ncc = NetconfServiceProvider(address='127.0.0.1',
                                              username='******',
                                              password='******',
                                              protocol='ssh',
                                              port=12022)
        self.crud = CRUDService()

    @classmethod
    def tearDownClass(self):
        self.ncc.close()

    def setUp(self):
        runner = Runner()
        self.crud.delete(self.ncc, runner)

    def tearDown(self):
        runner = Runner()
        self.crud.delete(self.ncc, runner)

    def test_one_level_pos(self):
        # READ
        r_1, r_2 = Runner(), Runner()
        r_1.one.number, r_1.one.name = 1, 'runner:one:name'
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        r_1.one.number, r_1.one.name = 10, 'runner/one/name'
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_two_level_pos(self):
        # READ
        r_1 = Runner()
        r_1.two.number, r_1.two.name, r_1.two.sub1.number = 2, 'runner:two:name', 21
        self.crud.create(self.ncc, r_1)
        r_2 = Runner()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        r_1.two.number, r_1.two.name, r_1.two.sub1.number = 20, 'runner/two/name', 210
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_three_level_pos(self):
        # READ
        r_1 = Runner()
        r_1.three.number, r_1.three.name, \
            r_1.three.sub1.number, r_1.three.sub1.sub2.number = 3, 'runner:three:name', 31, 311
        self.crud.create(self.ncc, r_1)
        r_2 = Runner()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        r_1.three.number, r_1.three.name, \
            r_1.three.sub1.number, r_1.three.sub1.sub2.number = 30, 'runner/three/name', 310, 3110
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_onelist_neg_dupkey(self):
        # netsim/enxr not complaining
        r_1, r_2 = Runner(), Runner()
        e_1, e_2 = Runner.OneList.Ldata(), Runner.OneList.Ldata()
        e_1.number = 1
        e_2.name = 'foo'
        e_2.number = 1
        e_2.name = 'bar'
        r_1.one_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)

    def test_onelist_neg_update_key_nonexist(self):
        # will create a nonexist elem
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        e_1, e_2 = Runner.OneList.Ldata(), Runner.OneList.Ldata()
        e_1.number = 1
        e_1.name = 'runner:onelist:ldata[' + str(e_1.number) + ']:name'
        r_1.one_list.ldata.extend([e_1])
        self.crud.create(self.ncc, r_1)
        r_1.one_list.ldata[0].number = 2
        r_1.one_list.ldata[0].name = '2'
        r_1.one_list.ldata[0].yfilter = DELETE()
        # assuming update on nonexist key will raise Exception
        with self.assertRaises(Exception):
            self.crud.update(self.ncc, r_1.one_list.ldata[0])

    def test_onelsit_pos(self):
        # READ
        r_1, r_2 = Runner(), Runner()
        e_1, e_2 = Runner.OneList.Ldata(), Runner.OneList.Ldata()
        e_1.number = 1
        e_1.name = 'runner:onelist:ldata[' + str(e_1.number) + ']:name'
        e_2.number = 2
        e_2.name = 'runner:onelist:ldata[' + str(e_2.number) + ']:name'
        r_1.one_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        e_1, e_2 = Runner.OneList.Ldata(), Runner.OneList.Ldata()
        e_1.number = 1
        e_1.name = 'runner:onelist:ldata[' + str(e_1.number) + ']:name'
        e_2.number = 2
        e_2.name = 'runner:onelist:ldata[' + str(e_2.number) + ']:name'
        r_1.one_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_twolist_pos(self):
        # READ
        r_1, r_2 = Runner(), Runner()
        e_1, e_2 = Runner.TwoList.Ldata(), Runner.TwoList.Ldata()
        e_11, e_12 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1()
        e_1.number = 21
        e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name'
        e_11.number = 211
        e_11.name = 'runner:twolist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_11.number) + ']:name'
        e_12.number = 212
        e_12.name = 'runner:twolist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_12.number) + ']:name'
        e_1.subl1.extend([e_11, e_12])
        e_21, e_22 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1()
        e_2.number = 22
        e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name'
        e_21.number = 221
        e_21.name = 'runner:twolist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_21.number) + ']:name'
        e_22.number = 222
        e_22.name = 'runner:twolist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_22.number) + ']:name'
        e_2.subl1.extend([e_21, e_22])
        r_1.two_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        e_1, e_2 = Runner.TwoList.Ldata(), Runner.TwoList.Ldata()
        e_11, e_12 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1()
        e_1.number = 21
        e_1.name = 'runner/twolist/ldata[' + str(e_1.number) + ']/name'
        e_11.number = 211
        e_11.name = 'runner/twolist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_11.number) + ']/name'
        e_12.number = 212
        e_12.name = 'runner/twolist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_12.number) + ']/name'
        e_1.subl1.extend([e_11, e_12])
        e_21, e_22 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1()
        e_2.number = 22
        e_2.name = 'runner/twolist/ldata[' + str(e_2.number) + ']/name'
        e_21.number = 221
        e_21.name = 'runner/twolist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_21.number) + ']/name'
        e_22.number = 222
        e_22.name = 'runner/twolist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_22.number) + ']/name'
        e_2.subl1.extend([e_21, e_22])
        r_1.two_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_threelist_pos(self):
        # READ
        r_1, r_2 = Runner(), Runner()
        e_1 = Runner.ThreeList.Ldata()
        e_1.number = 31
        e_1.name = 'runner:threelist:ldata[' + str(e_1.number) + ']:name'
        e_2 = Runner.ThreeList.Ldata()
        e_2.number = 32
        e_2.name = 'runner:threelist:ldata[' + str(e_2.number) + ']:name'
        e_11 = Runner.ThreeList.Ldata.Subl1()
        e_12 = Runner.ThreeList.Ldata.Subl1()
        e_11.number = 311
        e_11.name = 'runner:threelist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_11.number) + ']:name'
        e_12.number = 312
        e_12.name = 'runner:threelist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_12.number) + ']:name'
        e_111 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_112 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_111.number = 3111
        e_111.name = 'runner:threelist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_11.number) + ']:subsubl1[' + str(
                e_111.number) + ']:name'
        e_112.number = 3112
        e_112.name = 'runner:threelist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_11.number) + ']:subsubl1[' + str(
                e_112.number) + ']:name'
        e_11.sub_subl1.extend([e_111, e_112])
        e_121 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_122 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_121.number = 3121
        e_121.name = 'runner:threelist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_12.number) + ']:subsubl1[' + str(
                e_121.number) + ']:name'
        e_122.number = 3122
        e_121.name = 'runner:threelist:ldata[' + str(
            e_1.number) + ']:subl1[' + str(e_12.number) + ']:subsubl1[' + str(
                e_122.number) + ']:name'
        e_12.sub_subl1.extend([e_121, e_122])
        e_1.subl1.extend([e_11, e_12])
        e_21 = Runner.ThreeList.Ldata.Subl1()
        e_22 = Runner.ThreeList.Ldata.Subl1()
        e_21.number = 321
        e_21.name = 'runner:threelist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_21.number) + ']:name'
        e_22.number = 322
        e_22.name = 'runner:threelist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_22.number) + ']:name'
        e_211 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_212 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_211.number = 3211
        e_211.name = 'runner:threelist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_21.number) + ']:subsubl1[' + str(
                e_211.number) + ']:name'
        e_212.number = 3212
        e_212.name = 'runner:threelist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_21.number) + ']:subsubl1[' + str(
                e_212.number) + ']:name'
        e_21.sub_subl1.extend([e_211, e_212])
        e_221 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_222 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_221.number = 3221
        e_221.name = 'runner:threelist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_22.number) + ']:subsubl1[' + str(
                e_221.number) + ']:name'
        e_222.number = 3222
        e_222.name = 'runner:threelist:ldata[' + str(
            e_2.number) + ']:subl1[' + str(e_22.number) + ']:subsubl1[' + str(
                e_222.number) + ']:name'
        e_22.sub_subl1.extend([e_221, e_222])
        e_2.subl1.extend([e_21, e_22])
        r_1.three_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)

        # DEEPCOPY
        r_1_copy = copy.deepcopy(r_1)
        self.assertEqual(is_equal(r_1_copy, r_1), True)
        self.crud.create(self.ncc, r_1_copy)
        r_2_copy = self.crud.read(self.ncc, Runner())
        self.assertEqual(is_equal(r_2_copy, r_2), True)

        # UPDATE
        r_1, r_2 = Runner(), Runner()
        e_1 = Runner.ThreeList.Ldata()
        e_1.number = 31
        e_1.name = 'runner/threelist/ldata[' + str(e_1.number) + ']/name'
        e_2 = Runner.ThreeList.Ldata()
        e_2.number = 32
        e_2.name = 'runner/threelist/ldata[' + str(e_2.number) + ']/name'
        e_11 = Runner.ThreeList.Ldata.Subl1()
        e_12 = Runner.ThreeList.Ldata.Subl1()
        e_11.number = 311
        e_11.name = 'runner/threelistldata[' + str(
            e_1.number) + ']/subl1[' + str(e_11.number) + ']/name'
        e_12.number = 312
        e_12.name = 'runner/threelist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_12.number) + ']/name'
        e_111 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_112 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_111.number = 3111
        e_111.name = 'runner/threelist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_11.number) + ']/subsubl1[' + str(
                e_111.number) + ']/name'
        e_112.number = 3112
        e_112.name = 'runner/threelist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_11.number) + ']/subsubl1[' + str(
                e_112.number) + ']/name'
        e_11.sub_subl1.extend([e_111, e_112])
        e_121 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_122 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_121.number = 3121
        e_121.name = 'runner/threelist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_12.number) + ']/subsubl1[' + str(
                e_121.number) + ']/name'
        e_122.number = 3122
        e_121.name = 'runner/threelist/ldata[' + str(
            e_1.number) + ']/subl1[' + str(e_12.number) + ']/subsubl1[' + str(
                e_122.number) + ']/name'
        e_12.sub_subl1.extend([e_121, e_122])
        e_1.subl1.extend([e_11, e_12])
        e_21 = Runner.ThreeList.Ldata.Subl1()
        e_22 = Runner.ThreeList.Ldata.Subl1()
        e_21.number = 321
        e_21.name = 'runner/threelist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_21.number) + ']/name'
        e_22.number = 322
        e_22.name = 'runner/threelist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_22.number) + ']/name'
        e_211 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_212 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_211.number = 3211
        e_211.name = 'runner/threelist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_21.number) + ']/subsubl1[' + str(
                e_211.number) + ']/name'
        e_212.number = 3212
        e_212.name = 'runner/threelist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_21.number) + ']/subsubl1[' + str(
                e_212.number) + ']/name'
        e_21.sub_subl1.extend([e_211, e_212])
        e_221 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_222 = Runner.ThreeList.Ldata.Subl1.SubSubl1()
        e_221.number = 3221
        e_221.name = 'runner/threelist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_22.number) + ']/subsubl1[' + str(
                e_221.number) + ']/name'
        e_222.number = 3222
        e_222.name = 'runner/threelist/ldata[' + str(
            e_2.number) + ']/subl1[' + str(e_22.number) + ']/subsubl1[' + str(
                e_222.number) + ']/name'
        e_22.sub_subl1.extend([e_221, e_222])
        e_2.subl1.extend([e_21, e_22])
        r_1.three_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_InbtwList_pos(self):
        # READ
        r_1, r_2 = Runner(), Runner()
        e_1 = Runner.InbtwList.Ldata()
        e_2 = Runner.InbtwList.Ldata()
        e_1.number = 11
        e_1.name = 'runner:inbtwlist:[' + str(e_1.number) + ']:name'
        e_1.subc.number = 111
        e_1.subc.name = 'runner:inbtwlist:[' + str(e_1.number) + ']:subc:name'
        e_2.number = 12
        e_2.name = 'runner:inbtwlist:[' + str(e_2.number) + ']:name'
        e_2.subc.number = 121
        e_2.subc.name = 'runner:inbtwlist:[' + str(e_2.number) + ']:name'
        e_11 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_11.name = 'runner:inbtwlist:[' + str(
            e_1.number) + ']:subc:subcsubl1[' + str(e_11.number) + ']:name'
        e_12 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12.number = 112
        e_12.name = 'runner:inbtwlist:[' + str(
            e_1.number) + ']:subc:subcsubl1[' + str(e_12.number) + ']:name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 121
        e_21.name = 'runner:inbtwlist:[' + str(
            e_2.number) + ']:subc:subcsubl1[' + str(e_21.number) + ']:name'
        e_22 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22.number = 122
        e_22.name = 'runner:inbtwlist:[' + str(
            e_2.number) + ']:subc:subcsubl1[' + str(e_22.number) + ']:name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        e_1 = Runner.InbtwList.Ldata()
        e_2 = Runner.InbtwList.Ldata()
        e_1.number = 11
        e_1.name = 'runner/inbtwlist/[' + str(e_1.number) + ']/name'
        e_1.subc.number = 111
        e_1.subc.name = 'runnerinbtwlist/[' + str(e_1.number) + ']/subc/name'
        e_2.number = 12
        e_2.name = 'runner/inbtwlist/[' + str(e_2.number) + ']/name'
        e_2.subc.number = 121
        e_2.subc.name = 'runner/inbtwlist/[' + str(e_2.number) + ']/name'
        e_11 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_11.name = 'runner/inbtwlist/[' + str(
            e_1.number) + ']/subc/subcsubl1[' + str(e_11.number) + ']/name'
        e_12 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12.number = 112
        e_12.name = 'runner/inbtwlist/[' + str(
            e_1.number) + ']/subc/subcsubl1[' + str(e_12.number) + ']/name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 121
        e_21.name = 'runner/inbtwlist/[' + str(
            e_2.number) + ']/subc/subcsubl1[' + str(e_21.number) + ']/name'
        e_22 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22.number = 122
        e_22.name = 'runner/inbtwlist/[' + str(
            e_2.number) + ']/subc/subcsubl1[' + str(e_22.number) + ']/name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_leafref_simple_pos(self):
        # change ref and original data together
        # READ
        r_1, r_2 = Runner(), Runner()
        r_1.ytypes.built_in_t.number8 = 100
        r_1.ytypes.built_in_t.leaf_ref = r_1.ytypes.built_in_t.number8
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        r_1.ytypes.built_in_t.number8 = 110
        r_1.ytypes.built_in_t.leaf_ref = r_1.ytypes.built_in_t.number8
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_leafref_pos(self):
        # rfc: refer to leaf
        # 1.already exists
        # 2.has default value
        # create leafs will be referred to
        # CREATE
        r_1, r_2 = Runner(), Runner()
        r_1.one.name = 'runner:one:name'
        r_1.two.sub1.number = 21
        r_1.three.sub1.sub2.number = 311
        e_1 = Runner.InbtwList.Ldata()
        e_2 = Runner.InbtwList.Ldata()
        e_1.number = 11
        e_2.number = 21
        e_1.name = 'runner:inbtwlist[' + str(e_1.number) + ']:name'
        e_2.name = 'runner:inbtwlist[' + str(e_2.number) + ']:name'
        e_1.subc.number = 111
        e_2.subc.number = 121
        e_1.subc.name = 'runner:inbtwlist[' + str(e_1.number) + ']:subc:name'
        e_2.subc.name = 'runner:inbtwlist[' + str(e_2.number) + ']:subc:name'
        e_11 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_12.number = 112
        e_11.name = 'runner:inbtwlist[' + str(
            e_1.number) + ']:subc:subcsubl1[' + str(e_11.number) + ']:name'
        e_12.name = 'runner:inbtwlist[' + str(
            e_1.number) + ']:subc:subcsubl1[' + str(e_12.number) + ']:name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 311
        e_22.number = 122
        e_21.name = 'runner:inbtwlist[' + str(
            e_2.number) + ']:subc:subcsubl1[' + str(e_21.number) + ']:name'
        e_22.name = 'runner:inbtwlist[' + str(
            e_2.number) + ']:subc:subcsubl1[' + str(e_22.number) + ']:name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])

        r_1.leaf_ref.ref_one_name = r_1.one.name
        r_1.leaf_ref.ref_two_sub1_number = r_1.two.sub1.number
        r_1.leaf_ref.ref_three_sub1_sub2_number = r_1.three.sub1.sub2.number
        r_1.leaf_ref.ref_inbtw = e_21.name
        r_1.leaf_ref.one.name = 'runner:leaf-ref:one:name'
        r_1.leaf_ref.one.two.self_ref_one_name = r_1.leaf_ref.ref_one_name
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(r_1.one.name, r_1.leaf_ref.ref_one_name)
        self.assertEqual(r_1.two.sub1.number, r_1.leaf_ref.ref_two_sub1_number)
        self.assertEqual(r_1.three.sub1.sub2.number,
                         r_1.leaf_ref.ref_three_sub1_sub2_number)
        self.assertEqual(r_1.inbtw_list.ldata[1].subc.subc_subl1[0].name,
                         r_1.leaf_ref.ref_inbtw)
        self.assertEqual(r_1.leaf_ref.ref_one_name,
                         r_1.leaf_ref.one.two.self_ref_one_name)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        r_1.one.name = 'runner/one/name'
        r_1.two.sub1.number = 21
        r_1.three.sub1.sub2.number = 311
        e_1 = Runner.InbtwList.Ldata()
        e_2 = Runner.InbtwList.Ldata()
        e_1.number = 11
        e_2.number = 21
        e_1.name = 'runner/inbtwlist[' + str(e_1.number) + ']/name'
        e_2.name = 'runner/inbtwlist[' + str(e_2.number) + ']/name'
        e_1.subc.number = 111
        e_2.subc.number = 121
        e_1.subc.name = 'runner/inbtwlist[' + str(e_1.number) + ']/subc/name'
        e_2.subc.name = 'runner/inbtwlist[' + str(e_2.number) + ']/subc/name'
        e_11 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_12 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_11.number = 111
        e_12.number = 112
        e_11.name = 'runner/inbtwlist[' + str(
            e_1.number) + ']/subc/subcsubl1[' + str(e_11.number) + ']/name'
        e_12.name = 'runner/inbtwlist[' + str(
            e_1.number) + ']/subc/subcsubl1[' + str(e_12.number) + ']/name'
        e_1.subc.subc_subl1.extend([e_11, e_12])
        e_21 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_22 = Runner.InbtwList.Ldata.Subc.SubcSubl1()
        e_21.number = 311
        e_22.number = 122
        e_21.name = 'runner/inbtwlist[' + str(
            e_2.number) + ']/subc/subcsubl1[' + str(e_21.number) + ']/name'
        e_22.name = 'runner/inbtwlist[' + str(
            e_2.number) + ']/subc/subcsubl1[' + str(e_22.number) + ']/name'
        e_2.subc.subc_subl1.extend([e_21, e_22])
        r_1.inbtw_list.ldata.extend([e_1, e_2])

        r_1.leaf_ref.ref_one_name = r_1.one.name
        r_1.leaf_ref.ref_two_sub1_number = r_1.two.sub1.number
        r_1.leaf_ref.ref_three_sub1_sub2_number = r_1.three.sub1.sub2.number
        r_1.leaf_ref.ref_inbtw = e_21.name
        r_1.leaf_ref.one.name = 'runner/leaf-ref/one/name'
        r_1.leaf_ref.one.two.self_ref_one_name = r_1.leaf_ref.ref_one_name
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(r_1.one.name, r_1.leaf_ref.ref_one_name)
        self.assertEqual(r_1.two.sub1.number, r_1.leaf_ref.ref_two_sub1_number)
        self.assertEqual(r_1.three.sub1.sub2.number,
                         r_1.leaf_ref.ref_three_sub1_sub2_number)
        self.assertEqual(r_1.inbtw_list.ldata[1].subc.subc_subl1[0].name,
                         r_1.leaf_ref.ref_inbtw)
        self.assertEqual(r_1.leaf_ref.ref_one_name,
                         r_1.leaf_ref.one.two.self_ref_one_name)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_aug_one_pos(self):
        # CREATE
        r_1, r_2 = Runner(), Runner()
        r_1.one.one_aug.number = 1
        r_1.one.one_aug.name = r_1.one.one_aug._common_path
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        r_1.one.one_aug.number = 10
        r_1.one.one_aug.name = r_1.one.one_aug._common_path.replace(':', '/')
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_1)
        self.assertEqual(r_2._has_data(), False)

    def test_aug_onelist_pos(self):
        # CREATE
        r_1, r_2 = Runner(), Runner()
        e_1 = Runner.OneList.OneAugList.Ldata()
        e_2 = Runner.OneList.OneAugList.Ldata()
        e_1.number = 1
        e_1.name = e_1._common_path
        e_2.number = 2
        e_2.name = e_2._common_path
        r_1.one_list.one_aug_list.ldata.extend([e_1, e_2])
        r_1.one_list.one_aug_list.enabled = True
        self.crud.create(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # UPDATE
        r_1, r_2 = Runner(), Runner()
        e_1 = Runner.OneList.OneAugList.Ldata()
        e_2 = Runner.OneList.OneAugList.Ldata()
        e_1.number = 1
        e_1.name = e_1._common_path.replace(':', '/')
        e_2.number = 2
        e_2.name = e_2._common_path.replace(':', '/')
        r_1.one_list.one_aug_list.ldata.extend([e_1, e_2])
        r_1.one_list.one_aug_list.enabled = True
        self.crud.update(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)
        # DELETE
        r_1 = Runner()
        self.crud.delete(self.ncc, r_1)
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(r_2._has_data(), False)

    def test_parent_empty(self):
        runner = Runner()
        runner.ytypes.enabled = Empty()
        runner.ytypes.built_in_t.emptee = Empty()

        self.crud.create(self.ncc, runner)

        runner_read = self.crud.read(self.ncc, Runner())

        self.assertEqual(is_equal(runner_read, runner), True)
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    routing_policy = oc_routing_policy.RoutingPolicy()  # create object
    config_routing_policy(routing_policy)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, routing_policy)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create gNMI provider
    repository = Repository(YDK_REPO_DIR + device.hostname)
    provider = gNMIServiceProvider(repo=repository,
                                   address=device.hostname,
                                   port=device.port,
                                   username=device.username,
                                   password=device.password)
    # create CRUD service
    crud = CRUDService()

    lldp = xr_ethernet_lldp_cfg.Lldp()  # create object
    config_lldp(lldp)  # add object configuration

    # create configuration on gNMI device
    crud.create(provider, lldp)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    vrfs = xr_infra_rsi_cfg.Vrfs()  # create object
    config_vrfs(vrfs)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, vrfs)

    exit()
# End of script
                        help="NETCONF device (ssh://user:password@host:port)")
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    isis = xr_clns_isis_cfg.Isis()  # create config object
    config_isis(isis)  # add object configuration

    crud.create(provider, isis)  # create object on NETCONF device
    provider.close()
    exit()
# End of script
    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    # create config object
    interface_configurations = xr_ifmgr_cfg.InterfaceConfigurations()
    # add object configuration
    config_interface_configurations(interface_configurations)

    # create object on NETCONF device
    crud.create(provider, interface_configurations)
    provider.close()
    exit()
# End of script
Exemple #40
0
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create gNMI provider
    repository = Repository(YDK_REPO_DIR + device.hostname)
    provider = gNMIServiceProvider(repo=repository,
                                   address=device.hostname,
                                   port=device.port,
                                   username=device.username,
                                   password=device.password)
    # create CRUD service
    crud = CRUDService()

    mpls_lsd = xr_mpls_lsd_cfg.MplsLsd()  # create object
    config_mpls_lsd(mpls_lsd)  # add object configuration

    # create configuration on gNMI device
    crud.create(provider, mpls_lsd)

    exit()
# End of script
                        help="NETCONF device (ssh://user:password@host:port)")
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    mpls = oc_mpls.Mpls()  # create config object
    config_mpls(mpls)  # add object configuration

    crud.create(provider, mpls)  # create object on NETCONF device
    provider.close()
    exit()
# End of script
Exemple #42
0
    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create gNMI provider
    repository = Repository(YDK_REPO_DIR + device.hostname)
    provider = gNMIServiceProvider(repo=repository,
                                   address=device.hostname,
                                   port=device.port,
                                   username=device.username,
                                   password=device.password)
    # create CRUD service
    crud = CRUDService()

    global_interface_configuration = xr_ifmgr_cfg.GlobalInterfaceConfiguration(
    )  # create object
    config_global_interface_configuration(
        global_interface_configuration)  # add object configuration

    # create configuration on gNMI device
    crud.create(provider, global_interface_configuration)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    router_static = xr_ip_static_cfg.RouterStatic()  # create object
    config_router_static(router_static)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, router_static)

    exit()
# End of script
Exemple #44
0
    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create gNMI provider
    repository = Repository(YDK_REPO_DIR + device.hostname)
    provider = gNMIServiceProvider(repo=repository,
                                   address=device.hostname,
                                   port=device.port,
                                   username=device.username,
                                   password=device.password)
    # create CRUD service
    crud = CRUDService()

    ipv4_acl_and_prefix_list = xr_ipv4_acl_cfg.Ipv4AclAndPrefixList(
    )  # create object
    config_ipv4_acl_and_prefix_list(
        ipv4_acl_and_prefix_list)  # add object configuration

    # create configuration on gNMI device
    crud.create(provider, ipv4_acl_and_prefix_list)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    banners = xr_infra_infra_cfg.Banners()  # create object
    config_banners(banners)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, banners)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    isis = xr_clns_isis_cfg.Isis()  # create object
    config_isis(isis)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, isis)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    isis = xr_clns_isis_cfg.Isis()  # create object
    config_isis(isis)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, isis)

    exit()
# End of script
Exemple #48
0
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    interfaces = oc_interfaces.Interfaces()  # create object
    config_interfaces(interfaces,
                      name="GigabitEthernet0/0/0/0",
                      description="Peering with AS65002",
                      address_ip="192.168.0.1",
                      prefix_length=24)

    # create configuration on NETCONF device
    crud.create(provider, interfaces)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    aaa = xr_aaa_lib_cfg.Aaa()  # create object
    config_aaa(aaa)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, aaa)

    exit()
# End of script
Exemple #50
0
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    host_names = xr_shellutil_cfg.HostNames()  # create object
    config_host_names(host_names)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, host_names)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    ipv4_acl_and_prefix_list = xr_ipv4_acl_cfg.Ipv4AclAndPrefixList()  # create object
    config_ipv4_acl_and_prefix_list(ipv4_acl_and_prefix_list)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, ipv4_acl_and_prefix_list)

    exit()
# End of script
Exemple #52
0
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    mpls = oc_mpls.Mpls()  # create object
    config_mpls(mpls)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, mpls)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    ntp = xr_ip_ntp_cfg.Ntp()  # create object
    config_ntp(ntp)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, ntp)

    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    rsvp = xr_ip_rsvp_cfg.Rsvp()  # create object
    config_rsvp(rsvp)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, rsvp)

    exit()
# End of script
    device = urllib.parse.urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    # BGP configuration
    bgp = oc_bgp.Bgp()
    config_bgp_peer(bgp, args.local_as, args.peer_address, args.peer_as, args.peer_group)

    # create configuration on NETCONF device
    crud.create(provider, bgp)

    exit()
# End of script
Exemple #56
0
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create gNMI provider
    repository = Repository(YDK_REPO_DIR+device.hostname)
    provider = gNMIServiceProvider(repo=repository,
                                   address=device.hostname,
                                   port=device.port,
                                   username=device.username,
                                   password=device.password)
    # create CRUD service
    crud = CRUDService()

    ntp = xr_ip_ntp_cfg.Ntp()  # create object
    config_ntp(ntp)  # add object configuration

    # create configuration on gNMI device
    crud.create(provider, ntp)

    exit()
# End of script
                        help="NETCONF device (ssh://user:password@host:port)")
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    router_static = xr_ip_static_cfg.RouterStatic()  # create config object
    config_router_static(router_static)  # add object configuration

    crud.create(provider, router_static)  # create object on NETCONF device
    provider.close()
    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create gNMI provider
    repository = Repository(YDK_REPO_DIR + device.hostname)
    provider = gNMIServiceProvider(repo=repository,
                                   address=device.hostname,
                                   port=device.port,
                                   username=device.username,
                                   password=device.password)
    # create CRUD service
    crud = CRUDService()

    arp = xr_ipv4_arp_cfg.Arp()  # create object
    config_arp(arp)  # add object configuration

    # create configuration on gNMI device
    crud.create(provider, arp)

    exit()
# End of script
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.DEBUG)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                      "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    ip_domain = xr_ip_domain_cfg.IpDomain()  # create object
    config_ip_domain(ip_domain)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, ip_domain)

    provider.close()
    exit()
# End of script
    args = parser.parse_args()
    device = urlparse(args.device)

    # log debug messages if verbose argument specified
    if args.verbose:
        logger = logging.getLogger("ydk")
        logger.setLevel(logging.INFO)
        handler = logging.StreamHandler()
        formatter = logging.Formatter(("%(asctime)s - %(name)s - "
                                       "%(levelname)s - %(message)s"))
        handler.setFormatter(formatter)
        logger.addHandler(handler)

    # create NETCONF provider
    provider = NetconfServiceProvider(address=device.hostname,
                                      port=device.port,
                                      username=device.username,
                                      password=device.password,
                                      protocol=device.scheme)
    # create CRUD service
    crud = CRUDService()

    routing_policy = oc_routing_policy.RoutingPolicy()  # create object
    config_routing_policy(routing_policy)  # add object configuration

    # create configuration on NETCONF device
    crud.create(provider, routing_policy)

    exit()
# End of script