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/hwbuscmedianteaccess()ostat().Registro en
/proc/devices: Inspeccionar/proc/devicespara 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(comoHWBUS_IOC_READ_VENDORyHWBUS_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/vendorydevice) en ordenamiento little-endian.Cobertura de ancho de datos: Validar transferencias de 8, 16 y 32 bits mediante ioctls específicas (ej.
PCI_REVISION_IDcomou8,PCI_COMMANDcomou16yPCI_BASE_ADDRESS_0comou32).Rechazo de comandos IOCTL no válidos: Enviar una orden ioctl no definida en la cabecera y confirmar la devolución de error
-1conerrno == 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
-1conerrno == EINVALoEBADF, 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_parampara 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 == ENODEVoENOSYS.
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).
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.