Example #1
0
    def setUp(self):
        from ydk.services import CRUDService
        crud = CRUDService()
        runner = ysanity.Runner()
        crud.delete(self.ncc, runner)

        print '\nIn method', self._testMethodName + ':'
    def test_delete_container(self):
        # Build loopback configuration
        address = Native.Interface.Loopback.Ipv4.Address()
        address.ip = "2.2.2.2"
        address.netmask = "255.255.255.255"

        loopback = Native.Interface.Loopback()
        loopback.name = 2222
        loopback.ipv4.address.append(address)

        native = Native()
        native.interface.loopback.append(loopback)

        crud = CRUDService()
        result = crud.create(self.ncc, native)
        self.assertTrue(result)

        # Remove ipv4 configuration
        native = Native()
        loopback = Native.Interface.Loopback()
        loopback.name = 2222
        native.interface.loopback.append(loopback)
        result = crud.delete(self.ncc, loopback.ipv4)
        self.assertTrue(result)

        # Delete configuration
        native = Native()
        result = crud.delete(self.ncc, native)
        self.assertEqual(result, True)
Example #3
0
	def deleteDestination(self):
		'''
		Delete desntination group only
		'''
		returncode = 0
		xr,returncode = self.access_router()

		if returncode > 0:
			print "\n"+self.OUTPUT.get(returncode)+"\n"
			return returncode
		
		try:
			rpc_service = CRUDService()
			dgroup = xr_telemetry.TelemetryModelDriven.DestinationGroups.DestinationGroup()
			dgroup.destination_id = self.DgroupName
			
			'''
			dgroup = oc_telemetry.TelemetrySystem.DestinationGroups.DestinationGroup()
			dgroup.group_id = self.DgroupName
			dgroup.config.group_id = self.DgroupName
			'''
			rpc_service.delete(xr, dgroup)			
		except:
			returncode = 11
		
		xr.close()

		print "\n"+self.OUTPUT.get(returncode)+"\n"
		return returncode
Example #4
0
    def setUp(self):
        from ydk.services import CRUDService
        crud = CRUDService()
        runner = ysanity.Runner()
        crud.delete(self.ncc, runner)

        print '\nIn method', self._testMethodName + ':'
Example #5
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)
        interface_configurations = xr_ifmgr_cfg.InterfaceConfigurations()
        interface_configuration = interface_configurations.InterfaceConfiguration(
        )
        interface_configuration.active = "act"
        interface_configuration.interface_name = attributes.value('name')
        interface_configuration.interface_virtual = Empty()
        # name is a mandatory arguments
        #keep = string.digits
        #ydk_obj.name =  int(''.join(i for i in attributes.value('name') if i in keep))

        if unconfig and attributes.iswildcard:
            pass
        else:
            vrf = attributes.value('vrf')
            if vrf:
                interface_configuration.vrf = vrf.name

            ipv4 = attributes.value('ipv4')
            if ipv4:
                primary = interface_configuration.ipv4_network.addresses.Primary(
                )
                primary.address = str(ipv4.ip)
                primary.netmask = str(ipv4.netmask)
                interface_configuration.ipv4_network.addresses.primary = primary
        # instantiate crud service
        crud_service = CRUDService()
        if apply:

            # create netconf connection
            ncp = NetconfServiceProvider(self.device)

            if unconfig:
                crud_service.delete(ncp, interface_configuration)
            else:
                crud_service.create(ncp, interface_configuration)
        else:
            if unconfig:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=interface_configuration,
                                  crud_service=crud_service.delete)
            else:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=interface_configuration,
                                  crud_service=crud_service.create)
Example #6
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            vrfs = xr_infra_rsi_cfg.Vrfs()
            if not unconfig:
                vrf = vrfs.Vrf()
                if attributes.value('name'):
                    vrf.vrf_name = attributes.value('name')
                vrf.create = Empty()

                vrfs.vrf.append(vrf)
                #crud_service = CRUDService()
                #ncp = NetconfServiceProvider(self.device)
                #x = crud_service.read(ncp, vrf)
                #abc = YangConfig(device=self.device, ydk_obj=x, ncp=ncp, crud_service=crud_service)
                #print(abc)
                # iosxr: vrf vrf1 / address-family ipv4 unicast (config-vrf-af)
                for key, sub, attributes2 in attributes.mapping_items(
                        'address_family_attr',
                        keys=self.address_families,
                        sort=True):
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     vrf=vrf)

            # instantiate crud service
            crud_service = CRUDService()
            if apply:

                # create netconf connection
                ncp = NetconfServiceProvider(self.device)

                crud_service.create(ncp, vrfs)

                if unconfig:
                    crud_service.delete(ncp, vrfs)
            else:
                if unconfig:
                    return YangConfig(device=self.device,
                                      ydk_obj=vrfs,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.delete)
                else:
                    return YangConfig(device=self.device,
                                      ydk_obj=vrfs,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.create)
Example #7
0
 def setUp(self):
     # start a brand new session for every single test case
     # so test_close_session_rpc will not interfere with other test cases
     # self.ncc = NetconfServiceProvider('127.0.0.1', 'admin', 'admin', 12022)
     self.ncc = NetconfServiceProvider(self.hostname, self.username,
                                       self.password, self.port,
                                       self.protocol, self.on_demand,
                                       self.common_cache)
     from ydk.services import CRUDService
     crud = CRUDService()
     runner = ysanity.Runner()
     crud.delete(self.ncc, runner)
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)
Example #10
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):

            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            ospf = xr_ipv4_ospf_cfg.Ospf()
            process = ospf.processes.Process()
            id = attributes.value('ospf_name', force=True)
            process.process_name = str(id)
            ospf.processes.process.append(process)
            if not unconfig:
                process.start = Empty()
                # crud_service = CRUDService()
                # ncp = NetconfServiceProvider(self.device)
                # x = crud_service.read(ncp, process)
                # abc = YangConfig(device=self.device, ydk_obj=x, ncp=ncp, crud_service=crud_service)
                # print(abc)
                v = attributes.value('nsr')
                if v == True:
                    process.nsr = "true"
                for sub, attributes2 in attributes.mapping_values(
                        'vrf_attr', sort=VrfSubAttributes._sort_key):
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     process=process,
                                     **kwargs)
            # instantiate crud service
            crud_service = CRUDService()
            if apply:

                # create netconf connection3
                ncp = NetconfServiceProvider(self.device)
                if unconfig:
                    crud_service.delete(ncp, process)
                else:
                    crud_service.create(ncp, process)
            else:
                if unconfig:
                    return YangConfig(device=self.device,
                                      ydk_obj=process,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.delete)
                else:
                    return YangConfig(device=self.device,
                                      ydk_obj=process,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.create)
Example #11
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):

            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            ydk_obj = ned.Native.Router.Ospf()
            ospf_intfs = []
            for sub, attributes2 in attributes.mapping_values(
                    'vrf_attr', sort=VrfSubAttributes._sort_key):
                ospf_intfs.extend(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     ydk_obj=ydk_obj,
                                     **kwargs))

            # instantiate crud service
            crud_service = CRUDService()
            if apply:

                # create netconf connection
                ncp = NetconfServiceProvider(self.device)

                if unconfig:
                    crud_service.delete(ncp, ydk_obj)
                else:
                    crud_service.create(ncp, ydk_obj)
                    for inter in ospf_intfs:
                        inter.apply()
            else:
                ydks = []

                if unconfig:
                    ydks.append(
                        YangConfig(device=self.device,
                                   ydk_obj=ydk_obj,
                                   ncp=NetconfServiceProvider,
                                   crud_service=crud_service.delete))
                else:
                    ydks.append(
                        YangConfig(device=self.device,
                                   ydk_obj=ydk_obj,
                                   ncp=NetconfServiceProvider,
                                   crud_service=crud_service.create))

                    for inter in ospf_intfs:
                        ydks.append(inter)
                return ydks
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)
Example #13
0
    def build_config(self,
                     apply=True,
                     attributes=None,
                     unconfig=False,
                     **kwargs):
        attributes = AttributesHelper(self, attributes)
        configurations = CliConfigBuilder(unconfig=unconfig)
        ydk_obj = ned.Native.Interface.Loopback()
        # name is a mandatory arguments
        keep = string.digits
        ydk_obj.name = int(''.join(i for i in attributes.value('name')
                                   if i in keep))

        if unconfig and attributes.iswildcard:
            pass
        else:
            ipv4 = attributes.value('ipv4')
            if ipv4:
                ydk_obj.ip.address.primary.address = str(ipv4.ip)
                ydk_obj.ip.address.primary.mask = str(ipv4.netmask)

            vrf = attributes.value('vrf')
            if vrf:
                ydk_obj.vrf.forwarding = vrf.name
        # instantiate crud service
        crud_service = CRUDService()
        if apply:

            # create netconf connection
            ncp = NetconfServiceProvider(self.device)

            if unconfig:
                crud_service.delete(ncp, ydk_obj)
            else:
                crud_service.create(ncp, ydk_obj)
        else:
            if unconfig:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=ydk_obj,
                                  crud_service=crud_service.delete)
            else:
                return YangConfig(device=self.device,
                                  unconfig=unconfig,
                                  ncp=NetconfServiceProvider,
                                  ydk_obj=ydk_obj,
                                  crud_service=crud_service.create)
Example #14
0
    def test_ipv4(self):

        self.logger.info("IETF_INTERFACE_TEST_START_002")

        name = "host-vpp1"
        crud_service = CRUDService()

        interface = ietf_interfaces.Interfaces.Interface()
        interface.name = name
        interface.type = iana_if_type.EthernetCsmacd()
        interface.ipv4 = interface.Ipv4()
        addr = interface.Ipv4().Address()
        addr.ip = "192.168.0.1"
        addr.prefix_length = 24
        interface.ipv4.address.append(addr)
        addr1 = interface.Ipv4().Address()
        addr1.ip = "142.168.0.1"
        addr1.prefix_length = 14
        interface.ipv4.address.append(addr1)

        try:
            crud_service.create(self.netopeer_cli, interface)
        except YError as err:
            print("Error create services: {}".format(err))
            assert ()

        a = self.vppctl.show_address(name)
        self.assertIsNotNone(a)

        prefix = interface.ipv4.address[0].ip + "/" + \
                                str(interface.ipv4.address[0].prefix_length)
        self.assertIn(prefix, a.addr)

        prefix = interface.ipv4.address[1].ip + "/" + \
                                str(interface.ipv4.address[1].prefix_length)
        self.assertIn(prefix, a.addr)

        try:
            crud_service.delete(self.netopeer_cli, interface)
        except YError as err:
            print("Error create services: {}".format(err))
            assert ()

        a = self.vppctl.show_address(name)

        self.assertIsNone(a)

        self.logger.info("IETF_INTERFACE_TEST_FINISH_002")
Example #15
0
def deleteAsNeighbor(device,AsNeighbor):
    """
    Deletes AS neighbor device config via OpenConfig NETCONF/YANG model
    
    TODO:
    Add more granularlity for CRUD delete responses.

    Author:
    David J. Stern

    Date:
    DEC 2017
    
    Parameters: 
    device: (str): device type identifier being used.
        device = "asr" to use OpenConfig model
    asNeighbor: (int): AS number

    Returns:
    (boolean): True if successful, False otherwise
    
    On Error: 
    (YPYError): Prints to console. Returns False.
    """     
    if device=="asr":
        provider = NetconfServiceProvider(address=currentEdgeDeviceInfo['IPv4'],port=,username=currentEdgeDeviceInfo['username'],password=currentEdgeDeviceInfo['password'],protocol="ssh")
        crud = CRUDService()
        interfaces_filter = bgp_io.Neighbors().Neighbor()
        interfaces_filter.neighbor_address = str(AsNeighbor)
    try:
        respNodes = crud.delete(provider, interfaces_filter)
    except YPYError:
        print('An error occurred delete AS: '+str(AsNeighbor))	
        return False
    return True
Example #16
0
    def test_sanity_crud_read_interface(self):
        address = ysanity.Native.Interface.Loopback.Ipv4.Address()
        address.ip = "2.2.2.2"
        address.netmask = "255.255.255.255"

        loopback = ysanity.Native.Interface.Loopback()
        loopback.name = 2222
        loopback.ipv4.address.append(address)

        native = ysanity.Native()
        native.interface.loopback.append(loopback)

        crud = CRUDService()
        result = crud.create(self.ncc, native)
        self.assertEqual(result, True)

        native_read = ysanity.Native()
        interfaces = crud.read(self.ncc, native_read)

        codec_service = CodecService()
        codec_provider = CodecServiceProvider()
        codec_provider.encoding = EncodingFormat.XML

        xml_encode = codec_service.encode(codec_provider, interfaces)
        print('\n===== Printing entity: {}'.format(interfaces))
        print(xml_encode)

        # Delete configuration
        result = crud.delete(self.ncc, native)
        self.assertEqual(result, True)
Example #17
0
    def test_crud_read_list(self):
        crud = CRUDService()

        # Build configuration of multiple objects
        native = ysanity.Native()
        native.hostname = 'NativeHost'
        native.version = '0.1.0'

        bgp = openconfig.Bgp()
        bgp.global_.config.as_ = 65001
        bgp.global_.config.router_id = "1.2.3.4"

        create_list = [native, bgp]

        # Configure device
        result = crud.create(self.ncc, create_list)
        self.assertEqual(result, True)

        # Read configuration
        native_filter = ysanity.Native()
        bgp_filter = openconfig.Bgp()
        filter_list = [native_filter, bgp_filter]

        read_list = crud.read(self.ncc, filter_list)
        self.assertEqual(isinstance(read_list, list), True)
        self.assertEqual(len(read_list), 2)

        # Delete configuration
        result = crud.delete(self.ncc, create_list)
        self.assertEqual(result, True)
 def setUp(self):
     # start a brand new session for every single test case
     # so test_close_session_rpc will not interfere with other test cases
     # self.ncc = NetconfServiceProvider('127.0.0.1', 'admin', 'admin', 12022)
     self.ncc = NetconfServiceProvider(
         self.hostname,
         self.username,
         self.password,
         self.port,
         self.protocol,
         self.on_demand,
         self.common_cache,
         self.timeout)
     from ydk.services import CRUDService
     crud = CRUDService()
     runner = ysanity.Runner()
     crud.delete(self.ncc, runner)
Example #19
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            assert not kwargs
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            ydk_obj = ned.Native.Vrf()
            vrf_obj = ydk_obj.Definition()
            ydk_obj.definition.append(vrf_obj)
            if attributes.value('name'):
                vrf_obj.name = attributes.value('name')

            # iosxr: vrf vrf1 / address-family ipv4 unicast (config-vrf-af)
            for key, sub, attributes2 in attributes.mapping_items(
                    'address_family_attr', keys=self.address_families,
                    sort=True):
                sub.build_config(apply=False,
                                 attributes=attributes2,
                                 unconfig=unconfig,
                                 vrf_obj=vrf_obj)

            # instantiate crud service
            crud_service = CRUDService()
            if apply:

                # create netconf connection
                ncp = NetconfServiceProvider(self.device)

                crud_service.create(ncp, ydk_obj)

                if unconfig:
                    crud_service.delete(ncp, ydk_obj)
            else:
                if unconfig:
                    return YangConfig(device=self.device,
                                      ydk_obj=ydk_obj,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.delete)
                else:
                    return YangConfig(device=self.device,
                                      ydk_obj=ydk_obj,
                                      ncp=NetconfServiceProvider,
                                      crud_service=crud_service.create)
Example #20
0
    def del_conf(self):

        returncode = 0
        xr, returncode = self.access_router()

        if returncode > 0:
            print "\n" + self.OUTPUT.get(returncode) + "\n"
            return returncode

        try:
            rpc_service = CRUDService()
            rpc_service.delete(xr, oc_telemetry.TelemetrySystem())
        except:
            returncode = 11
        xr.close()

        print "\n" + self.OUTPUT.get(returncode) + "\n"
        return returncode
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)

    # Fill out your BGP object properly using the Openconfig Yang Model
    # You will need to bring up the IBGP neighbor between rtr1 and rtr4

    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
Example #22
0
	def del_conf(self):
		'''
		This function is duplicate to deleteMDTConfig()
		'''
		returncode = 0
		xr,returncode = self.access_router()

		if returncode > 0:
			print "\n"+self.OUTPUT.get(returncode)+"\n"
			return returncode

		try:
			rpc_service = CRUDService()
			rpc_service.delete(xr, oc_telemetry.TelemetrySystem())
		except:
			returncode = 11
		xr.close()

		print "\n"+self.OUTPUT.get(returncode)+"\n"
		return returncode
Example #23
0
def run_multiple_routing_bgp(netconf_service, session):
    crud = CRUDService()
    codec = CodecService()
    codec_provider = CodecServiceProvider()

    crud.delete(session, bgp())
    crud.delete(session, RoutingPolicy())

    multi_cfg = _get_bgp_routing_multiple_object()
    multi_payload_expected = codec.encode(codec_provider, multi_cfg)

    result = netconf_service.edit_config(session, Datastore.candidate, multi_cfg)
    assert 'ok' in result

    multi_filter = {'bgp':bgp(), 'routing-policy':RoutingPolicy()}
    multi_entity_read = netconf_service.get_config(session, Datastore.candidate, multi_filter)

    multi_payload_actual = codec.encode(codec_provider, multi_entity_read)

    assert multi_payload_expected == multi_payload_actual
Example #24
0
def run_multiple_routing_bgp(netconf_service, session):
    crud = CRUDService()
    codec = CodecService()
    codec_provider = CodecServiceProvider()

    crud.delete(session, bgp())
    crud.delete(session, RoutingPolicy())

    multi_cfg = _get_bgp_routing_multiple_object()
    multi_payload_expected = codec.encode(codec_provider, multi_cfg)

    result = netconf_service.edit_config(session, Datastore.candidate, multi_cfg)
    assert 'ok' in result

    multi_filter = {'bgp':bgp(), 'routing-policy':RoutingPolicy()}
    multi_entity_read = netconf_service.get_config(session, Datastore.candidate, multi_filter)

    multi_payload_actual = codec.encode(codec_provider, multi_entity_read)

    assert multi_payload_expected == multi_payload_actual
Example #25
0
        def build_config(self,
                         apply=True,
                         attributes=None,
                         unconfig=False,
                         **kwargs):
            attributes = AttributesHelper(self, attributes)
            configurations = CliConfigBuilder(unconfig=unconfig)
            ydk_obj = xr_ifmgr_cfg.InterfaceConfigurations()

            vlan_config = []

            for sub, attributes2 in attributes.mapping_values(
                    'interface_attr', keys=self.interface_attr):
                vlan_config.extend(
                    sub.build_config(apply=False,
                                     attributes=attributes2,
                                     unconfig=unconfig,
                                     ydk_obj=ydk_obj,
                                     **kwargs))

            # instantiate crud service
            crud_service = CRUDService()

            if apply:

                # create netconf connection
                ncp = NetconfServiceProvider(self.device)

                if unconfig:
                    crud_service.delete(ncp, ydk_obj)
                else:
                    crud_service.create(ncp, ydk_obj)

                for cfg in vlan_config:
                    cfg.apply()
            else:
                ydks = []
                for cfg in vlan_config:
                    ydks.append(cfg)

                return ydks
Example #26
0
def deleteVlanFromExisitingInterface(device,interface,vlan):
    """
    Deletes subinterface on a Cisco ASR9XXX. 
    
    TODO:
    Add multi device and multi vendor support
    Consider adding IPv6 support in the future
    When vendor has the OC model working implement it.

    Author:
    David J. Stern

    Date:
    DEC 2017
    
    Parameters: 
    device: (str): device type [UNUSED for future use]
    interface: (str): Vendor identifier of interface/subinterface
    vlan: (int): vlan number to use [will be casted to int if you send str]

    Returns:
    (boolean): True for success of the deletion.

    On Error: 
    (Any Exception to call): Returns False
    """     
    interface_configurations2 = xr_ifmgr_cfg.InterfaceConfigurations().InterfaceConfiguration()
    interface_configurations2.interface_name = str(interface)+"."+str(vlan) 
    interface_configurations2.interface_mode_non_physical = xr_ifmgr_cfg.InterfaceModeEnumEnum.default   
    interface_configurations2.active = "act" 
    provider = NetconfServiceProvider(address=currentEdgeDeviceInfo['IPv4'],port=,username=currentEdgeDeviceInfo['username'],password=currentEdgeDeviceInfo['password'],protocol="ssh")
    crud = CRUDService()
    try:
        crud.delete(provider, interface_configurations2)
    except:
        provider.close()
        return (False)
    provider.close()
    return(True)
Example #27
0
    def del_conf(self):
        # returncode = 0
        # xr = self.access_router()
        '''
		TODO: 
			develop the function for deleting the MDT confgiuration
		'''
        returncode = 0
        xr, returncode = self.access_router()

        if returncode > 0:
            print "\n" + self.OUTPUT.get(returncode) + "\n"
            return returncode

        try:
            rpc_service = CRUDService()
            rpc_service.delete(xr, oc_telemetry.TelemetrySystem())
        except:
            returncode = 11
        xr.close()

        print "\n" + self.OUTPUT.get(returncode) + "\n"
        return returncode
Example #28
0
	def deleteSub(self):
		'''
		Delete subscription only
		'''
		returncode = 0
		xr,returncode = self.access_router()

		if returncode > 0:
			print "\n"+self.OUTPUT.get(returncode)+"\n"
			return returncode
		
		try:
			rpc_service = CRUDService()
			sub = oc_telemetry.TelemetrySystem.Subscriptions.Persistent.Subscription()
			sub.subscription_id = long(self.SubId)
			sub.config.subscription_id = long(self.SubId)
			rpc_service.delete(xr, sub)			
		except:
			returncode = 11
		
		xr.close()

		print "\n"+self.OUTPUT.get(returncode)+"\n"
		return returncode
Example #29
0
	def deleteSensor(self):
		'''
		Delete sensor group only
		'''
		returncode = 0
		xr,returncode = self.access_router()

		if returncode > 0:
			print "\n"+self.OUTPUT.get(returncode)+"\n"
			return returncode
		
		try:
			rpc_service = CRUDService()
			sgroup = oc_telemetry.TelemetrySystem.SensorGroups.SensorGroup()
			sgroup.sensor_group_id = self.SGroupName
			sgroup.config.sensor_group_id = self.SGroupName
			rpc_service.delete(xr, sgroup)			
		except:
			returncode = 11
		
		xr.close()

		print "\n"+self.OUTPUT.get(returncode)+"\n"
		return returncode
    def takeaction(self, path):

        new_line = "\n"

        crud = CRUDService()
        if path == "active":
            try:
                router_static = xr_ip_static_cfg.RouterStatic()
                self.config_router_static(router_static,
                                          BACKUP_PREFIX_DICT_LIST)
                crud.delete(self.provider, router_static)
            except:
                print "No existing backup route configured, continue with activation of active path"

            router_static = xr_ip_static_cfg.RouterStatic()
            self.config_router_static(router_static, ACTIVE_PREFIX_DICT_LIST)
            crud.create(self.provider, router_static)
            print(10 * new_line)
        elif path == "backup":
            try:
                router_static = xr_ip_static_cfg.RouterStatic()
                self.config_router_static(router_static,
                                          ACTIVE_PREFIX_DICT_LIST)
                crud.delete(self.provider, router_static)
            except:
                print "No existing active route configured, continue with activation of backup path"

            router_static = xr_ip_static_cfg.RouterStatic()
            self.config_router_static(router_static, BACKUP_PREFIX_DICT_LIST)
            crud.create(self.provider, router_static)
            print(10 * new_line)
        else:
            try:
                router_static = xr_ip_static_cfg.RouterStatic()
                self.config_router_static(router_static,
                                          BACKUP_PREFIX_DICT_LIST)
                crud.delete(self.provider, router_static)

                router_static = xr_ip_static_cfg.RouterStatic()
                self.config_router_static(router_static,
                                          ACTIVE_PREFIX_DICT_LIST)
                crud.delete(self.provider, router_static)
            except:
                print "Ignoring exceptions as we clean up"
Example #31
0
    def test_crud_read_collection(self):
        crud = CRUDService()

        # Build configuration of multiple objects
        create_list = Config()

        native = ysanity.Native()
        native.hostname = 'NativeHost'
        native.version = '0.1.0'
        create_list.append(native)

        bgp = openconfig.Bgp()
        bgp.global_.config.as_ = 65001
        bgp.global_.config.router_id = "1.2.3.4"
        create_list.append(bgp)

        create_list = Config([native, bgp])

        # Configure device
        result = crud.create(self.ncc, create_list)
        self.assertEqual(result, True)

        # Read configuration
        read_filter = Filter([ysanity.Native(),
                              openconfig.Bgp()])
        read_config = crud.read(self.ncc, read_filter)
        self.assertEqual(isinstance(read_config, Config), True)
        self.assertEqual(len(read_config), 2)

        # Print configuration
        codec_service = CodecService()
        codec_provider = CodecServiceProvider()
        codec_provider.encoding = EncodingFormat.XML
        for entity in read_config:
            xml = codec_service.encode(codec_provider, entity)
            print('\n===== Printing entity: {}'.format(entity))
            print(xml)

        # Delete configuration
        result = crud.delete(self.ncc, create_list)
        self.assertEqual(result, 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.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
    # delete configuration on NETCONF device
    crud.delete(provider,
                router_static.default_vrf.address_family.vrfipv6.vrf_unicast)

    provider.close()
    exit()
# End of script
Example #33
0
                        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.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

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

    exit()
# End of script
    parser.add_argument("device",
                        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.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
    # delete configuration on NETCONF device
    crud.delete(provider, ip_domain)

    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 object
    # delete configuration on NETCONF device
    crud.delete(provider, isis)

    provider.close()
    exit()
# End of script
#CRUDSerice provides the CRUD functions
crud_service = CRUDService()

#Configuration entity for BGP
bgp_config = oc_bgp.Bgp()

#Read and print the initial value
initial_bgp = crud_service.read(xr_provider, bgp_config)
print("The initial BGP ASN value is - " + str(initial_bgp.global_.config.as_))

#Set a new value
if initial_bgp.global_.config.as_:
    bgp_config.global_.config.as_ = initial_bgp.global_.config.as_ - 1
    #Delete the configuration entity so that we can create a new one
    crud_service.delete(xr_provider, bgp_config)
else:
    bgp_config.global_.config.as_ = 65000
#Create the configuration
crud_service.create(xr_provider, bgp_config)

#Read and print the new value
new_bgp = crud_service.read(xr_provider, bgp_config)
print("The new BGP ASN value is - " + str(new_bgp.global_.config.as_))

if initial_bgp.global_.config.as_:
    #Reset to initial value
    crud_service.delete(xr_provider, bgp_config)
    crud_service.create(xr_provider, initial_bgp)
    #Read and print the value now that we have reset it
    initial_bgp = crud_service.read(xr_provider, bgp_config)
                        action="store_true")
    parser.add_argument("device",
                        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
    crud.delete(provider, isis)  # delete object on NETCONF device
    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.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

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

    exit()
# End of script
                        action="store_true")
    parser.add_argument("device",
                        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()

    routing_policy = xr_policy_repository_cfg.RoutingPolicy()  # create object
    crud.delete(provider, routing_policy)  # delete object on NETCONF device
    provider.close()
    exit()
# End of script
Example #40
0
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):
        runner = ysanity.Runner()
        self.crud.delete(self.ncc, runner)
        print '\nIn method', self._testMethodName + ':'

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

    def test_delete_object_on_leaf(self):
        # create runner with two leaves, one and two
        runner_create = ysanity.Runner()
        runner_create.one.name = 'one'
        runner_create.two.name = 'two'
        self.crud.create(self.ncc, runner_create)

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

        # use DELETE object to remove leaf one
        runner_delete = runner_read
        runner_delete.one.name = DELETE()
        self.crud.update(self.ncc, runner_delete)

        # manually create remaining runner with leaf two
        runner_read = self.crud.read(self.ncc, runner_read_filter)
        runner_left = runner_create
        runner_left.one.name = None

        self.assertEqual(is_equal(runner_read, runner_left), True)

    @unittest.skip('DELETE object for leaf-list')
    def test_delete_object_on_leaflist(self):
        # create runner with a leaf and a leaflist
        runner_create = ysanity.Runner()
        runner_create.one.name = 'one'
        runner_create.ytypes.built_in_t.llstring = [str(i) for i in range(5)]
        self.crud.create(self.ncc, runner_create)

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

        # user DELETE object to remove leaflist
        runner_delete = runner_read
        runner_delete.ytypes.built_in_t.llstring = DELETE()
        self.crud.update(self.ncc, runner_delete)

        # manually create remaining runner with leaf one
        runner_read = self.crud.read(self.ncc, runner_read_filter)
        runner_left = runner_create
        del runner_left.ytypes.built_in_t.llstring[:]

        self.assertEqual(is_equal(runner_read, runner_left), True)

    def test_delete_operation_on_container(self):
        # create runner with a container
        runner_create = ysanity.Runner()
        runner_create.one.name = 'one'
        runner_create.two.name = 'two'
        self.crud.create(self.ncc, runner_create)

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

        # delete contianer two
        self.crud.delete(self.ncc, runner_read.two)

        runner_read = self.crud.read(self.ncc, runner_read_filter)
        runner_left = runner_create
        runner_left.two.name = None

        self.assertEqual(is_equal(runner_read, runner_left), True)

    def test_delete_operation_on_list(self):
        # create runner with a container and a list
        runner_create = ysanity.Runner()
        runner_create.one.name = 'one'

        elem1 = ysanity.Runner.OneList.Ldata()
        elem2 = ysanity.Runner.OneList.Ldata()
        elem1.number = 1
        elem2.name = 'foo'
        elem2.number = 1
        elem2.name = 'bar'
        runner_create.one_list.ldata.extend([elem1, elem2])

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

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

        self.crud.delete(self.ncc, runner_read.one_list.ldata)

        runner_read = self.crud.read(self.ncc, runner_read_filter)
        runner_left = runner_create
        del runner_left.one_list.ldata[:]

        self.assertEqual(is_equal(runner_read, runner_left), True)
class SanityTest(unittest.TestCase):

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

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

    def setUp(self):
        print "\nIn method", self._testMethodName

    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

    # changed to type int16
    def test_int8(self):
        # Create Runner
        runner = self._create_runner()
        runner.ytypes.built_in_t.number8 = 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)

    # changed to type int32
    def test_int16(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.number16 = 20000
        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)

    # changed to type int64
    def test_int32(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.number32 = -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)

    # changed to type uint8
    def test_int64(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.number64 = -9223372036854775808
        self.assertRaises(YPYDataValidationError,
            self.crud.create, self.ncc, runner)

    # changed to type uint16
    def test_uint8(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.u_number8 = 256
        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)

    # changed to type uint32
    def test_uint16(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.u_number16 = 65536
        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)

    # changed to type uint64
    def test_uint32(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.u_number32 = 4294967296
        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)

    # changed to type string
    def test_decimal64(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.deci64 = 'string'
        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)

    # changed to tye decimal64
    def test_leafref(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.leaf_ref = 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)

    # changed to type empty
    def test_string(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.name = 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)

    # changed to type YdkEnumTestEnum
    def test_boolean(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.bool_value = YdkEnumTestEnum.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)

        runner = self._create_runner()
        runner.ytypes.built_in_t.bool_value = False
        self.assertRaises(YPYDataValidationError,
            self.crud.update, self.ncc, runner)


    # max val changed to 7
    def test_leaflist_max_elements(self):
        runner = self._create_runner()
        runner.ytypes.built_in_t.llstring = [str(i) for i in range(8)]
        self.assertRaises(YPYDataValidationError,
            self.crud.create, self.ncc, runner)

    # not supported leaf
    def test_not_supported_leaf(self):
        runner = self._create_runner()
        runner.not_supported_1.not_supported_leaf = 'leaf value'
        self.assertRaises(YPYDataValidationError,
            self.crud.create, self.ncc, runner)

    # not supported container
    def test_not_supported_container(self):
        runner = self._create_runner()
        runner.not_supported_1.not_supported_1_2.some_leaf = 'some leaf'
        self.assertRaises(YPYDataValidationError,
            self.crud.create, self.ncc, runner)

    # not supported list
    def test_not_supported_list(self):
        runner = self._create_runner()
        elems = []
        for i in range(5):
            elems.append(runner.NotSupported2())
        runner.not_supported_2.extend(elems)
        self.assertRaises(YPYDataValidationError,
            self.crud.create, self.ncc, runner)
    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

    # delete object on NETCONF device
    crud.delete(provider,
                router_static.default_vrf.address_family.vrfipv4.vrf_unicast.vrf_prefixes.vrf_prefix[0])
    provider.close()
    exit()
# End of script
    parser.add_argument("device",
                        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.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 = xr_policy_repository_cfg.RoutingPolicy()  # create object
    # delete configuration on NETCONF device
    crud.delete(provider, routing_policy)

    exit()
# End of script
Example #44
0
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)
    parser.add_argument("device",
                        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.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
    # delete configuration on NETCONF device
    crud.delete(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.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_lsd = xr_mpls_lsd_cfg.MplsLsd()  # create object

    # delete configuration on NETCONF device
    crud.delete(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.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)
    # delete configuration on NETCONF device
    crud.delete(provider, syslog)

    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 object
    # delete configuration on NETCONF device
    crud.delete(provider, locale)

    provider.close()
    exit()
# End of script
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):
        runner = ysanity.Runner()
        self.crud.delete(self.ncc, runner)
        print '\nIn method', self._testMethodName + ':'

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

    def test_read_on_ref_class(self):
        r_1 = ysanity.Runner()
        r_1.one.number, r_1.one.name = 1, 'runner:one:name'
        self.crud.create(self.ncc, r_1)
        r_2 = ysanity.Runner()

        r_2.one = READ()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)

    def test_read_on_leaf(self):
        r_1 = ysanity.Runner()
        r_1.one.number, r_1.one.name = 1, 'runner:one:name'
        self.crud.create(self.ncc, r_1)
        r_2 = ysanity.Runner()
        r_2.one.number = READ()
        r_2 = self.crud.read(self.ncc, r_2)        
        self.assertEqual(r_2.one.number, r_1.one.number)

        # this will also read r_2.one.name, not able to read only one of them
        r_2 = ysanity.Runner()
        r_2.one.number = 1
        r_2 = self.crud.read(self.ncc, r_2)        
        self.assertEqual(r_2.one.number, r_1.one.number)

        # no such value, will return empty data
        r_2 = ysanity.Runner()
        r_2.one.number = 2
        r_2 = self.crud.read(self.ncc, r_2)        
        self.assertNotEqual(r_2.one.number, r_1.one.number)

    def test_read_on_ref_enum_class(self):
        from ydk.models.ydktest.ydktest_sanity import YdkEnumTestEnum
        r_1 = ysanity.Runner.Ytypes.BuiltInT()
        r_1.enum_value = YdkEnumTestEnum.LOCAL
        self.crud.create(self.ncc, r_1)

        r_2 = ysanity.Runner.Ytypes.BuiltInT()
        r_2.enum_value = READ()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)

        r_2 = ysanity.Runner.Ytypes.BuiltInT()
        r_2.enum_value = YdkEnumTestEnum.LOCAL
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)

        # no such value, nothing returned
        r_2 = ysanity.Runner.Ytypes.BuiltInT()
        r_2.enum_value = YdkEnumTestEnum.REMOTE
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertNotEqual(is_equal(r_1, r_2), True)

    def test_read_on_ref_list(self):
        r_1 = ysanity.Runner.OneList()
        l_1, l_2 = ysanity.Runner.OneList.Ldata(), ysanity.Runner.OneList.Ldata()
        l_1.number, l_2.number = 1, 2
        r_1.ldata.extend([l_1, l_2])
        self.crud.create(self.ncc, r_1)

        r_2 = ysanity.Runner.OneList()
        r_2.ldata = READ()
        r_2 = self.crud.read(self.ncc, r_2)

        self.assertEqual(is_equal(r_1, r_2), True)


    def test_read_on_list_with_key(self):
        r_1 = ysanity.Runner.OneList()
        l_1, l_2 = ysanity.Runner.OneList.Ldata(), ysanity.Runner.OneList.Ldata()
        l_1.number, l_2.number = 1, 2
        r_1.ldata.extend([l_1, l_2])
        self.crud.create(self.ncc, r_1)

        r_2 = ysanity.Runner.OneList()
        r_2.ldata.extend([l_1])
        r_2 = self.crud.read(self.ncc, r_2)

        r_3 = ysanity.Runner.OneList()
        r_3.ldata.extend([l_1])
        self.assertEqual(is_equal(r_2, r_3), True)

    def test_read_on_leaflist(self):
        r_1 = ysanity.Runner.Ytypes.BuiltInT()
        r_1.llstring = ['1', '2', '3']
        self.crud.create(self.ncc, r_1)
        r_2 = ysanity.Runner.Ytypes.BuiltInT()
        r_2.llstring = READ()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)

        r_2 = ysanity.Runner.Ytypes.BuiltInT()
        # invalid input, user should use READ() 
        # or the same data on device
        r_2.llstring = ['something emaillse']
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertNotEqual(is_equal(r_1, r_2), True)


    def test_read_on_identity_ref(self):
        r_1 = ysanity.Runner.Ytypes.BuiltInT()
        r_1.identity_ref_value = ysanity.ChildIdentity_Identity()
        self.crud.create(self.ncc, r_1)
        r_2 = ysanity.Runner.Ytypes.BuiltInT()
        r_2.identity_ref_value = READ()
        r_2 = self.crud.read(self.ncc, r_2)
        self.assertEqual(is_equal(r_1, r_2), True)

        # # read issue for identity_ref with namespace, if using netsim
        # r_2 = ysanity.Runner.Ytypes.BuiltInT()
        # r_2.identity_ref_value = ysanity.ChildIdentity_Identity()
        # r_2 = self.crud.read(self.ncc, r_2)
        # self.assertEqual(is_equal(r_1, r_2), True)

    def test_read_only_config(self):
        r_1 = ysanity.Runner()
        r_1.one.number, r_1.one.name = 1, 'runner:one:name'
        self.crud.create(self.ncc, r_1)
        r_2, r_3 = ysanity.Runner(), ysanity.Runner()
        r_2.one.number, r_3.one.number = READ(), READ()
        # only_config=True will change
        # <get>XML</get>
        # to
        # <get-config><source><running/></source>XML</get-config>
        r_2 = self.crud.read(self.ncc, r_2, only_config=True)
        r_3 = self.crud.read(self.ncc, r_3)
        # ysanity only have config data, ok to compare
        self.assertEqual(is_equal(r_2, r_3), True)
    parser.add_argument("device",
                        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.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
    # delete configuration on NETCONF device
    crud.delete(provider, sr)

    exit()
# End of script
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)
                        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.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

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

    exit()
# End of script
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()
        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):
        print '\nIn method', self._testMethodName + ':'

    def tearDown(self):
        pass

    @classmethod
    def getInitEntity(self):
        """ set and return entity with 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/>
            <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"
        a.b.c = a.b.C()
        a.b.d.d1, a.b.d.d2, a.b.d.d3 = "some value d1", "value of d2", "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):
        a = ysanity.A()
        a = self.crud.read(self.ncc, a)
        # the whole thing
        _a = self.getInitEntity()
        self.assertEqual(is_equal(a, _a), True)

    def test_CASE2(self):
        a = ysanity.A()
        a.a1 = "some value"
        a = self.crud.read(self.ncc, a)
        # the whole thing        
        _a = self.getInitEntity()
        self.assertEqual(is_equal(a, _a), True)

    def test_CASE3(self):
        a = ysanity.A()
        a.a1 = READ()
        a = self.crud.read(self.ncc, a)
        _a = ysanity.A()
        _a.a1 = "some value"
        self.assertEqual(is_equal(a, _a), True)

    def test_CASE4(self):
        a = ysanity.A()
        a.b.b1 = "some value"
        a = self.crud.read(self.ncc, a)
        _a = self.getInitEntity()
        _a.lst, _a.a1, _a.a2, _a.a3 = YList(), None, None, None
        self.assertEqual(is_equal(a, _a), True)

    def test_CASE5(self):
        a = ysanity.A()
        e = a.b.d.e
        e.e1 = "some value e1"
        a = self.crud.read(self.ncc, a)
        _a = ysanity.A()
        _a.b.d.e.e1, _a.b.d.e.e2 = "some value e1", "value of e2"
        self.assertEqual(is_equal(a, _a), True)        

    def test_CASE6(self):
        a = ysanity.A()
        a.b.c = a.b.C()
        a = self.crud.read(self.ncc, a)
        _a = ysanity.A()
        _a.b.c = _a.b.C()
        self.assertEqual(is_equal(a, _a), True)

    def test_CASE7(self):
        a = ysanity.A()
        l1, l2 = a.Lst(), a.Lst()
        l1.number, l2.number = 1, 2
        a.lst.extend([l1, l2])
        a = self.crud.read(self.ncc, a)
        _a = ysanity.A()
        l1.value, l2.value = "one", "two"
        _a.lst.extend([l1, l2])
        self.assertEqual(is_equal(a, _a), True)
Example #54
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()

    ipv4_acl_and_prefix_list = xr_ipv4_acl_cfg.Ipv4AclAndPrefixList(
    )  # create object

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

    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.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

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

    exit()
# End of script
    parser.add_argument("device",
                        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.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 = oc_bgp.Bgp()  # create object
    # delete configuration on NETCONF device
    crud.delete(provider, bgp)

    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()

    lldp = xr_ethernet_lldp_cfg.Lldp()  # create object
    # delete configuration on NETCONF device
    crud.delete(provider, lldp)

    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.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

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

    exit()
# End of script
    parser.add_argument("device",
                        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.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()

    ospf = xr_ipv4_ospf_cfg.Ospf()  # create object
    # delete configuration on NETCONF device
    crud.delete(provider, ospf)

    exit()
# End of script