OSEK-VDX especifica, además del sistema operativo, un test para verificar que el mismo es conforme a las especificaciones.
Bajo www.osek-vdx.org se pueden encontrar los siguientes 3 documentos:
Hay que tener en cuenta que la última especificación de OSEK-VDX OS es la 2.2.3, sin embargo los documentos de testeo hacen referencia a la versión de OSEK-VDX OS 2.0 rev 1. Por ello algunos tests no pueden ser llevados a cabo.
Este documento explica la metodología de teste en general de OSEK/VDX (ver todas las partes del estándar). Entre otras cosas explica la configuración utilizada para testear el RTOS. Y que los tests se llevan a cabo utilizando las interfaces globales del RTOS. Se trata de un black box test.
El test de OSEK-VDX OS es una aplicación que utiliza el RTOS y verifica que se comporte de una forma determinada.
El test del sistema operativo se divide en las siguientes partes:
En cada parte se testea el grupo correspondiente de interfaces que el sistema operativo ofrece a tal fin (ver tabla TODO).
Type | OS Interface | Service Call |
---|---|---|
Task management services | Transfer task into read state | ActivateTask |
Terminate calling task | TerminateTask | |
Terminate calling task and activate succeeding task | ChainTask | |
Call scheduler | Schedule | |
Get currently active task | GetTaskId | |
Get state of a task | GetTaskState | |
Resource management services | Get resource and enter critical section | GetResource |
Release resource and leave critical section | ReleaseResource | |
Event control services | Set event of extended task | SetEvent |
Clear Event | ClearEvent | |
Get event mask of a task | GetEvent | |
Wait for setting of an event | WaitEvent | |
Alarms services | Read alarm base characteristics | GetAlarmBase |
::: | Occupy and set relative alarm | SetRelAlarm |
Occupy and set absolute alarm | GetAbsAlarm | |
::: | Cancel alarm | CancelAlarm |
::: | Get alarm value | GetAlarm |
Operating system execution control services | Get current application mode | GetApplicationmode |
::: | Start operating system | StartOS |
Shut down operating system | ShutdownOS | |
Hook routines | Called if OS service returns an error | ErrorHook |
Called at task switch before entering context of new task | PreTaskHook | |
Called at task switch after leaving context of old task | PostTaskHook | |
Called after start-up | StartupHook | |
Called before shutdown | ShutdownHook |
Dado que OSEK-VDX OS es un sistema operativo estático y el mismo necesita ser generado, los tests se deben llevar a cabo en múltiples configuraciones.
Se testearán las 4 clases de conformidad:
Para más información respecto a las clases de conformidad de OSEK-VDX OS le recomendamos repasar el TODO REF .
Se testearán los 3 tipos de scheduling:
Para más información respecto a los tipos de scheduling le recomendamos repasar TODO REF.
Por último se testearán los dos tipos de reporte de error:
Para más información respecto a los tipos de errores le recomendamos repasar TODO REF.
La combinatoria de los tipos de conformidad, los tipos de scheduling y tipos de errores reportados requieren que el sistema operativo sea generado y compilado en un proceso iterativo para poder testear todas las combinaciones definidas en el test.
Cada test case contiene los siguientes campos:
El documento especifica:
Un total de 139 test cases.
Veamos algunos ejemplos.
Test case No. | Sched. policy Conf. class Status | Action | Expected Result |
---|---|---|---|
7 | m, f | Call ActivateTask() from preemptive task on suspended extended task which has higher priority than running task. | Running task is preempted. Activated task becomes running and its events are cleared. Service returns E_OK |
E1, E2 | |||
s, e |
Este test case indica que se debe llamar a ActivateTask de una preemptive task a una tarea extendida suspendida con una prioridad mayor a la de la tarea actual.
Como resultado la tarea que ejecuta el ActivateTask debe ser interrumpida (preempted) y la tarea extendida deberá ser ejecutada y todos sus eventos colocados a cero. La llamada ActivateTask debe haber retornado E_OK. El test case debe ser ejecutado en un sistema mixed y un full preemptive (ref), en ECC1 y ECC2 (ref) y tanto en standard error como con extended errors (ref).
Para implementar este test se necesita un OSEK configurado con las tareas necesarias, además de poder detectar cuando una tarea es interrumpida y luego recuperar el control. Pero esto ya no es parte de esta especificación sino de procedimiento del test.
Finalmente el test procedure describe como se debe ejecutar cada test case especificado en (REF). Para ello especifica secuencias de test por cada tipo (task management, interrupt processing, event mechanism, etc.)
Por ejemplo la *secuencia 1* de task management ejecutará los test cases: 1, 10, 15, 20, 21, 22, 24, 25, 26, 27, 30, 35, 36, 37, 38, 40 (orden ascendente no el de ejecución). Esta secuencia se ejecutará en todas las conformidades (BCC1, BCC2, ECC1, ECC2), en todos los schedulings (mixed, non, full) y en modo extended.
También se especifican 2 tareas:
Y dos interrupciones. Es importante tener en cuenta que las ISR3 no existen más en OSEK/VDX OS 2.2.3 por lo que todos los tests referentes a ISR3 no podrán ser ejecutados.
Luego se describe uno a uno los pasos a ser llevados a cabo.
Habilitar las interrupciones. Esto no es parte del test en sí, es más bien una pre condición. Luego se deben ejecutar los test cases: 1, 40 y 24 en el respectivo orden, ….
De esta forma en el documento de procedimiento de test (REF) son ejecutados los test especificados en el plan del test (ref).
En total el documento define:
Lo que hace un total de 226 proyectos (configuraciones) diferentes.
En la sección anterior se explicaron los documentos que especifican como testear un OSEK/VDX OS para validar su conformidad.
Esta sección explica como es testeado el RTOS de la CIAA Firmware.
Los tests del RTOS se encuentran en:
La abreviatura tst se refiere a test y ctest al test de conformidad (conformance tests). Este directorio contiene los siguientes subdirectorios:
Corriendo el comando: make rtostests
Cada proyecto (configuración) incluye un archivo de configuración OIL, código fuente y un makefile y se encuentra en un directorio diferente.
La CIAA-Firmware utiliza un script escrito en perl para llevar a cabo la tarea de testeo en los siguientes pasos: