Testeo de OSEK

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.

OSEK/VDX Conformance Testing Methodology

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.

OSEK-VDX OS Test Plan

Cada test case contiene los siguientes campos:

El documento especifica:

Un total de 139 test cases.

Veamos algunos ejemplos.

Task Management test case 7

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.

OSEK/VDX Operating System Test Procedure

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.

Test Sequence 1

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.

Corriendo los tests de conformidad de OSEK/VDX OS en la CIAA-Firmware

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: