def test_interating_over_hardware_resources(lib_mock):
    side_effect_functions = (
        func for func in
        [
            NextResourceSideEffect(10),
            NextResourceSideEffect(11),
            NextResourceSideEffect(12),
            lambda *x: nisyscfg.errors.Status.END_OF_ENUM,
        ]
    )

    def next_resource_side_effect(session_handle, resource_enum_handle, resource_handle):
        return next(side_effect_functions)(session_handle, resource_enum_handle, resource_handle)

    lib_mock.return_value.NISysCfgNextResource.side_effect = next_resource_side_effect

    with nisyscfg.Session() as session:
        resources = list(session.find_hardware())
        assert len(resources) == 3

    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY),
        mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY),
        mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY),
        mock.call().NISysCfgNextResource(CVoidPMatcher(SESSION_HANDLE), CVoidPMatcher(RESOURCE_ENUM_HANDLE), mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(12)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(11)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(10)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_get_system_experts_with_two_experts(lib_mock):
    side_effect_functions = (
        func for func in
        [
            ExpertInfoSideEffect(b'sync', b'NI-Sync', b'1.2.0'),
            ExpertInfoSideEffect(b'xnet', b'NI-XNET', b'10.0'),
            lambda *x: nisyscfg.errors.Status.END_OF_ENUM,
        ]
    )

    def expert_info_side_effect(handle, expert_name, display_name, version):
        return next(side_effect_functions)(handle, expert_name, display_name, version)

    lib_mock.return_value.NISysCfgNextExpertInfo.side_effect = expert_info_side_effect

    with nisyscfg.Session() as session:
        expert_info = list(session.get_system_experts())
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgGetSystemExperts(CVoidPMatcher(SESSION_HANDLE), b'', mock.ANY),
        mock.call().NISysCfgNextExpertInfo(CVoidPMatcher(EXPERT_ENUM_HANDLE), mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgNextExpertInfo(CVoidPMatcher(EXPERT_ENUM_HANDLE), mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgNextExpertInfo(CVoidPMatcher(EXPERT_ENUM_HANDLE), mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(EXPERT_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
    assert len(expert_info) == 2
    assert expert_info[0]['expert_name'] == 'sync'
    assert expert_info[0]['display_name'] == 'NI-Sync'
    assert expert_info[0]['version'] == '1.2.0'
    assert expert_info[1]['expert_name'] == 'xnet'
    assert expert_info[1]['display_name'] == 'NI-XNET'
    assert expert_info[1]['version'] == '10.0'
def test_get_system_experts_with_list_of_expert_names(lib_mock):
    with nisyscfg.Session() as session:
        session.get_system_experts(['xnet', 'sync'])
    expected_calls = [
        mock.call().NISysCfgGetSystemExperts(CVoidPMatcher(SESSION_HANDLE), b'xnet,sync', mock.ANY),
    ]
    assert lib_mock().NISysCfgGetSystemExperts.mock_calls == expected_calls
def test_get_hardware_resource_property_raises_library_error_when_error_code_is_not_prop_does_not_exist(lib_mock, config_next_resource_side_effect_mock):
    lib_mock.return_value.NISysCfgGetResourceProperty.return_value = nisyscfg.errors.Status.OUT_OF_MEMORY

    with nisyscfg.Session() as session:
        resource = next(session.find_hardware())
        with pytest.raises(nisyscfg.errors.LibraryError):
            resource[nisyscfg.ResourceProperties.IS_DEVICE]
def test_get_hardware_resource_property_catches_prop_does_not_exist_and_raises_attribute_error(lib_mock, config_next_resource_side_effect_mock):
    lib_mock.return_value.NISysCfgGetResourceProperty.return_value = nisyscfg.errors.Status.PROP_DOES_NOT_EXIST

    with nisyscfg.Session() as session:
        resource = next(session.find_hardware())
        with pytest.raises(AttributeError):
            getattr(resource, 'IsDevice')
def test_session_passes_username_and_password_to_initialize_session(lib_mock):
    with nisyscfg.Session('localhost', 'username', 'password'):
        pass
    expected_calls = [
        mock.call().NISysCfgInitializeSession(mock.ANY, b'username', b'password', mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
    ]
    assert lib_mock().NISysCfgInitializeSession.mock_calls == expected_calls
def test_session_passes_target_name_to_initialize_session(lib_mock):
    with nisyscfg.Session('localhost'):
        pass
    expected_calls = [
        mock.call().NISysCfgInitializeSession(b'localhost', mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
    ]
    assert lib_mock().NISysCfgInitializeSession.mock_calls == expected_calls
def test_find_hardware_with_list_of_expert_names(lib_mock):
    with nisyscfg.Session() as session:
        session.find_hardware(expert_names=['xnet', 'sync'])
    expected_calls = [
        mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, b'xnet,sync', mock.ANY),
    ]
    assert lib_mock().NISysCfgFindHardware.mock_calls == expected_calls
Exemple #9
0
def assign_xnet_port_name(serial_number, port_number, port_name):
    with nisyscfg.Session() as session:
        try:
            device_filter = session.create_filter()
            device_filter.is_device = True
            device_filter.serial_number = serial_number
            resource = next(
                session.find_hardware(filter=device_filter,
                                      expert_names=_XNET_EXPERT_NAME))

            interface_filter = session.create_filter()
            interface_filter.is_device = False
            interface_filter.connects_to_link_name = resource.provides_link_name
            for interface_resource in session.find_hardware(
                    filter=interface_filter, expert_names=_XNET_EXPERT_NAME):
                if interface_resource.xnet.port_number == port_number:
                    interface_resource.rename(port_name)
                    return
            raise PortNotFoundError(
                port_number,
                'Device with serial number "{}" does not have port number {}'.
                format(serial_number, port_number))
        except StopIteration:
            raise PortNotFoundError(
                port_number,
                'Could not find a device with serial number "{}"'.format(
                    serial_number))
def test_open_close_session_invokes_nisyscfg_c_api(lib_mock):
    session = nisyscfg.Session()
    session.close()
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_session_in_with_statement_invokes_nisyscfg_c_api(lib_mock):
    with nisyscfg.Session():
        pass
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_restart_with_default_arguments(lib_mock):
    with nisyscfg.Session() as session:
        session.restart()
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgRestart(CVoidPMatcher(SESSION_HANDLE), True, False, False, mock.ANY, mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_get_system_experts_with_no_experts(lib_mock):
    with nisyscfg.Session() as session:
        session.get_system_experts()
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgGetSystemExperts(CVoidPMatcher(SESSION_HANDLE), b'', mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(EXPERT_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_create_filter(lib_mock):
    with nisyscfg.Session() as session:
        session.create_filter()
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test__get_status_description(lib_mock):
    with nisyscfg.Session() as session:
        assert 'description' == session._get_status_description(nisyscfg.errors.Status.OUT_OF_MEMORY)
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgGetStatusDescription(CVoidPMatcher(SESSION_HANDLE), nisyscfg.errors.Status.OUT_OF_MEMORY, mock.ANY),
        mock.call().NISysCfgFreeDetailedString(CVoidPMatcher(STATUS_DESCRIPTION_VOID_P.value)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_find_hardware_with_default_arguments(lib_mock):
    with nisyscfg.Session() as session:
        session.find_hardware()
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgFindHardware(CVoidPMatcher(SESSION_HANDLE), nisyscfg.enums.FilterMode.MATCH_VALUES_ALL, None, b'', mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_get_installed_software_components_with_default_arguments(lib_mock):
    with nisyscfg.Session() as session:
        session.get_installed_software_components()
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgGetInstalledSoftwareComponents(CVoidPMatcher(SESSION_HANDLE), mock.ANY, False, mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SOFTWARE_COMPONENT_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
Exemple #18
0
def rename_xnet_port_name(current_port_name, new_port_name):
    with nisyscfg.Session() as session:
        try:
            filter = session.create_filter()
            filter.is_device = False
            filter.user_alias = current_port_name
            resource = next(
                session.find_hardware(filter=filter,
                                      expert_names=_XNET_EXPERT_NAME))
            resource.rename(new_port_name)
        except StopIteration:
            raise PortNotFoundError(current_port_name)
Exemple #19
0
def get_xnet_expert_version():
    if platform.system() == 'Linux':
        # nisyscfg does not support NISysCfgGetInstalledSoftwareComponents on Linux desktop systems, directly get ni-xnet version from nixntcfg.ini
        parser = configparser.ConfigParser()
        parser.read('/usr/share/ni-xnet/nixntcfg.ini')
        print("ni-xnet", parser.get('Version', 'VersionString'))
    else:
        with nisyscfg.Session() as session:
            sw = session.get_installed_software_components()
            for component in sw:
                if component.id == 'ni-xnet':
                    print(component.id, component.version)
def test_create_filter_and_set_syscfg_filter_property(lib_mock):
    with nisyscfg.Session() as session:
        filter = session.create_filter()
        filter[nisyscfg.FilterProperties.EXPERT_NAME] = 'my_expert'
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY),
        mock.call().NISysCfgSetFilterPropertyWithType(CVoidPMatcher(FILTER_HANDLE), nisyscfg.FilterProperties.EXPERT_NAME._id, nisyscfg.enums.PropertyType.STRING, b'my_expert'),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_get_hardware_index_property(lib_mock, property_name, count_property, expected_values):
    side_effect_functions = (
        func for func in
        [
            NextResourceSideEffect(10),
            lambda *x: nisyscfg.errors.Status.END_OF_ENUM,
        ]
    )

    def next_resource_side_effect(session_handle, resource_enum_handle, resource_handle):
        return next(side_effect_functions)(session_handle, resource_enum_handle, resource_handle)

    def get_resource_property_mock(resource_handle, property_id, property_value):
        property_value.contents.value = len(expected_values)
        return nisyscfg.errors.Status.OK

    def get_indexed_property_mock(resource_handle, property_id, index, property_value):
        if property_value.__class__.__name__.startswith('c_char_Array'):
            property_value.value = expected_values[index].encode('ascii')
        else:
            property_value.contents.value = expected_values[index]
        return nisyscfg.errors.Status.OK

    lib_mock.return_value.NISysCfgNextResource.side_effect = next_resource_side_effect
    lib_mock.return_value.NISysCfgGetResourceProperty.side_effect = get_resource_property_mock
    lib_mock.return_value.NISysCfgGetResourceIndexedProperty.side_effect = get_indexed_property_mock

    with nisyscfg.Session() as session:
        resource = next(session.find_hardware())
        property = resource[getattr(nisyscfg.IndexedResourceProperties, property_name)]
        assert expected_values == list(property)
        count_property_id = getattr(nisyscfg.ResourceProperties, count_property)._id
        property_id = getattr(nisyscfg.IndexedResourceProperties, property_name)._id

    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgNextResource(mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgGetResourceProperty(CVoidPMatcher(10), count_property_id, mock.ANY),
    ]
    expected_calls += [
        mock.call().NISysCfgGetResourceIndexedProperty(CVoidPMatcher(10), property_id, i, mock.ANY)
        for i in range(len(expected_values))
    ]
    expected_calls += [
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(10)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
Exemple #22
0
def upgrade_xnet_firmware(serial_number):
    with nisyscfg.Session() as session:
        try:
            filter = session.create_filter()
            filter.is_device = True
            filter.serial_number = serial_number
            resource = next(
                session.find_hardware(filter=filter,
                                      expert_names=_XNET_EXPERT_NAME))
            logger.info('Starting firmware upgrade')
            resource.upgrade_firmware(version="0")
            logger.info('Completed firmware upgrade')
        except StopIteration:
            raise DeviceWithSerialNumberNotFoundError(serial_number)
Exemple #23
0
def blink_xnet_port(port_name, mode):
    with nisyscfg.Session() as session:
        try:
            filter = session.create_filter()
            filter.is_device = False
            filter.user_alias = port_name
            resource = next(
                session.find_hardware(filter=filter,
                                      expert_names=_XNET_EXPERT_NAME))
            resource.xnet.blink = {'on': 1, 'off': 0}[mode]
            resource.save_changes()
            logger.info(port_name + ': blink-LED is ' + mode)
        except StopIteration:
            raise PortNotFoundError(port_name)
Exemple #24
0
def self_test_xnet_device(serial_number):
    with nisyscfg.Session() as session:
        try:
            filter = session.create_filter()
            filter.is_device = True
            filter.serial_number = serial_number
            resource = next(
                session.find_hardware(filter=filter,
                                      expert_names=_XNET_EXPERT_NAME))
            logger.info('Starting self test')
            # TODO  xnet sysapi expert will report its error code when a function failed, include self_test,
            #       but we may need to catch LibraryError for error code that is not defined in class Status(CtypesEnum)
            resource.self_test()
            logger.info('Completed self test')
        except StopIteration:
            raise DeviceWithSerialNumberNotFoundError(serial_number)
def test_find_hardware_with_filter_properties_specified(lib_mock):
    with nisyscfg.Session() as session:
        filter = session.create_filter()
        filter[nisyscfg.FilterProperties.EXPERT_NAME] = 'my_expert'
        session.find_hardware(filter)
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY),
        mock.call().NISysCfgSetFilterPropertyWithType(CVoidPMatcher(FILTER_HANDLE), nisyscfg.FilterProperties.EXPERT_NAME._id, nisyscfg.enums.PropertyType.STRING, b'my_expert'),
        mock.call().NISysCfgFindHardware(CVoidPMatcher(SESSION_HANDLE), nisyscfg.enums.FilterMode.MATCH_VALUES_ALL, mock.ANY, b'', mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_get_hardware_resource_property(lib_mock, config_next_resource_side_effect_mock, config_get_resource_property_mock, property_name, expected_value):
    with nisyscfg.Session() as session:
        resource = next(session.find_hardware())
        assert expected_value == resource[getattr(nisyscfg.ResourceProperties, property_name)]
        property_id = getattr(nisyscfg.ResourceProperties, property_name)._id

    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgFindHardware(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgNextResource(mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgGetResourceProperty(CVoidPMatcher(10), property_id, mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(10)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
def test_find_hardware_with_passed_filter_properties_specified(lib_mock, property_name, property_type, assigned_value, expected_value):
    with nisyscfg.Session() as session:
        filter = session.create_filter()
        filter[getattr(nisyscfg.FilterProperties, property_name)] = assigned_value
        session.find_hardware(filter)
        property_id = getattr(nisyscfg.FilterProperties, property_name)._id
    expected_calls = [
        mock.call(mock.ANY),
        mock.call().NISysCfgInitializeSession(mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY),
        mock.call().NISysCfgCreateFilter(CVoidPMatcher(SESSION_HANDLE), mock.ANY),
        mock.call().NISysCfgSetFilterPropertyWithType(CVoidPMatcher(FILTER_HANDLE), property_id, property_type, expected_value),
        mock.call().NISysCfgFindHardware(CVoidPMatcher(SESSION_HANDLE), nisyscfg.enums.FilterMode.MATCH_VALUES_ALL, mock.ANY, b'', mock.ANY),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(RESOURCE_ENUM_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(FILTER_HANDLE)),
        mock.call().NISysCfgCloseHandle(CVoidPMatcher(SESSION_HANDLE)),
    ]
    assert lib_mock.mock_calls == expected_calls
Exemple #28
0
def nixnet_blink_port_led(port_name, mode):
    with nisyscfg.Session() as session:
        # Search for the NI-XNET interface with port name.
        interface_filter = session.create_filter()
        interface_filter[nisyscfg.FilterProperties.IS_DEVICE] = False
        interface_filter[nisyscfg.FilterProperties.USER_ALIAS] = port_name

        try:
            # Assume only one interface will be found
            interface = next(
                session.find_hardware(filter=interface_filter,
                                      expert_names='xnet'))
        except StopIteration:
            raise PortNotFoundError(
                'Could not find a port "{}"'.format(port_name))

        # Set blink property and apply changes.
        interface[nisyscfg.xnet.ResourceProperties.BLINK] = mode
        interface.save_changes()
def nixnet_upgrade_firmware(serial_number):
    with nisyscfg.Session() as session:
        # Search for the NI-XNET device with the specified serial number.
        device_filter = session.create_filter()
        device_filter[nisyscfg.FilterProperties.IS_DEVICE] = True
        device_filter[nisyscfg.FilterProperties.SERIAL_NUMBER] = serial_number

        try:
            # Assume only one device will be found
            device = next(
                session.find_hardware(filter=device_filter,
                                      expert_names='xnet'))
        except StopIteration:
            raise DeviceNotFoundError(
                'Could not find a device with serial number "{}"'.format(
                    serial_number))

        print('Starting firmware upgrade')
        device.upgrade_firmware(version='0')
        print('Completed firmware upgrade')
def nixnet_assign_port_name(serial_number, port_number, port_name):
    with nisyscfg.Session() as session:
        # Search for the NI-XNET device with the specified serial number.
        device_filter = session.create_filter()
        device_filter[nisyscfg.FilterProperties.IS_DEVICE] = True
        device_filter[nisyscfg.FilterProperties.SERIAL_NUMBER] = serial_number

        try:
            # Assume only one device will be found
            device = next(
                session.find_hardware(filter=device_filter,
                                      expert_names='xnet'))
        except StopIteration:
            raise DeviceNotFoundError(
                'Could not find a device with serial number "{}"'.format(
                    serial_number))

        # Search for the interface connected to the NI-XNET device with the
        # specified port number.
        interface_filter = session.create_filter()
        interface_filter[nisyscfg.FilterProperties.IS_DEVICE] = False
        interface_filter[nisyscfg.FilterProperties.CONNECTS_TO_LINK_NAME] = (
            device[nisyscfg.ResourceProperties.PROVIDES_LINK_NAME])
        interface_filter[
            nisyscfg.xnet.FilterProperties.PORT_NUMBER] = port_number

        try:
            # Assume only one interface will be found
            interface = next(
                session.find_hardware(filter=interface_filter,
                                      expert_names='xnet'))
        except StopIteration:
            raise PortNotFoundError(
                'Device with serial number "{}" does not have port number {}'.
                format(serial_number, port_number))

        interface.rename(port_name)