Pruebas para /dev/hwbusc

Lista Consolidada de Pruebas

  • 1. Verificación de Presencia y Registro (hwbus_io01)

    • Comprobación de nodo /dev: Validar la existencia del archivo de dispositivo /dev/hwbusc mediante access() o stat().

    • Registro en /proc/devices: Inspeccionar /proc/devices para confirmar que el driver está registrado con su número Major (240).

    • Registro de Clase SysFS: Validar la existencia del directorio /sys/class/hwbusc/hwbusc/ y sus archivos asociados (dev, uevent).

  • 2. Validación de Lecturas y Contenido PCI vía IOCTL (hwbus_io02)

    • Lectura atómica de registros: Invocar comandos _IOR (como HWBUS_IOC_READ_VENDOR y HWBUS_IOC_READ_DEVICE) y verificar que devuelvan exactamente el tamaño del registro (u16) y coincidan con SysFS (/sys/bus/pci/devices/0000:02:00.0/vendor y device) en ordenamiento little-endian.

    • Cobertura de ancho de datos: Validar transferencias de 8, 16 y 32 bits mediante ioctls específicas (ej. PCI_REVISION_ID como u8, PCI_COMMAND como u16 y PCI_BASE_ADDRESS_0 como u32).

    • Rechazo de comandos IOCTL no válidos: Enviar una orden ioctl no definida en la cabecera y confirmar la devolución de error -1 con errno == ENOTTY.

  • 3. Auditoría y Rechazo de Operaciones POSIX Tradicionales (lseek, read, write) (hwbus_io03)

    • Rechazo de posicionamiento (lseek): Confirmar que cualquier intento de invocación de lseek() devuelva (off_t)-1 con errno == ESPIPE o EINVAL, certificando que el archivo de dispositivo no soporta despliegue de puntero de archivo.

    • Rechazo de lecturas no estructuradas (read): Intentar invocar read() sobre el descriptor y validar que retorne error -1 con errno == EINVAL o EBADF, garantizando la denegación de accesos en formato stream.

    • Rechazo de escrituras (write): Intentar invocar write() sobre /dev/hwbusc (abierto en cualquier modo) y confirmar la devolución de error -1 con errno == EBADF o EINVAL

  • 4. Verificación de Parámetros de Módulo (hwbus_io04r)

    • Atributo hwbus_bdf_param: Leer la ruta /sys/module/hwbus_io/parameters/hwbus_bdf_param para comprobar que refleja la dirección PCI objetivo ("0000:02:00.0").

  • 5. Concurrencia y Mapeo de Memoria (hwbus_io05)

    • Acceso concurrente vía IOCTL: Abrir múltiples descriptores simultáneos de /dev/hwbusc desde distintos hilos/procesos para asegurar que la ejecución de comandos ioctl() sea atómica y segura entre descriptores independientes.

    • Rechazo de mapeo mmap(): Confirmar que invocaciones a mmap() sobre el descriptor fallen devolviendo MAP_FAILED con errno == ENODEV o ENOSYS.

  1. Reseteo y Control de Ciclo de Vida del Dispositivo (hwbus_io06)

    • Comando IOCTL de Reseteo: Invocar la orden HWBUS_IOCRESET codificada sin transferencia de datos (operación de tipo _IO).

    • Validación de Ejecución: Confirmar que el controlador procesa la orden correctamente, ejecutando la limpieza de estado interno y retornando código de éxito (0).

  2. Orquestación Automatizada e Infraestructura LTP (hwbus_io_suite00r)

    • Ejecución Secuencial Integrada: Orquestar de forma automatizada los sub-tests individuales (hwbus_io01 a hwbus_io06) gestionando el aislamiento de procesos mediante SAFE_FORK() y recopilando los códigos de salida.

    • Verificación Dinámica del Entorno: Comprobar la disponibilidad del nodo /dev/hwbusc y recargar automáticamente el módulo del kernel hwbus_io.ko mediante la API de LTP en caso de ausencia previa a las pruebas.

    • Restauración y Cleanup Global: Garantizar la restauración del estado del dispositivo al finalizar la suite mediante la invocación automática de HWBUS_IOCRESET en la fase de limpieza.