On 20/05/2021 17:35, Joel Sherrill wrote:


On Thu, May 20, 2021, 10:33 AM Sebastian Huber <sebastian.hu...@embedded-brains.de <mailto:sebastian.hu...@embedded-brains.de>> wrote:

    On 20/05/2021 17:30, Joel Sherrill wrote:
     > Is there a test case for this situation?

    Not in the current test suite. I write currently the specification for
    rtems_task_restart() and the validation tests. My plan is to start with
    the integration of the new validation test suites after they are
    finished in Q3 this year.


Ok.

Fwiw there are a number of places where score coverage is missing a d needs attention

The table based specification approach covers a lot of cases and paths through the code. I think we will get MC/DC at source code level (not binary code level) for most functions (maybe except some thread queue code). For example, the rtems_task_restart() work in progress table looks currently like this:

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = Nop, RestartExtensions = Yes

* Id = Executing, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Initial, ThreadDispatch = Enabled

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = UpdatePriority, RestartExtensions = Yes

* Id = Executing, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Changed, ThreadDispatch = Enabled

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = Unblock, RestartExtensions = Yes

* Id = Executing, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Initial, ThreadDispatch = Enabled

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = UnblockUpdatePriority, RestartExtensions = Yes

* Id = Executing, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Changed, ThreadDispatch = Enabled

Status = NA, FatalError = Yes, Argument = NA, Scheduler = Nop, RestartExtensions = Nop

* Id = Executing, Dormant = No, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = { Initial, Changed }, ThreadDispatch = Disabled

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = Nop, RestartExtensions = Nop

* Id = { Other, Executing }, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Initial, ThreadDispatch = Disabled

* Id = { Other, Executing }, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = Ready, Timer = Inactive, RealPriority = Initial, ThreadDispatch = Disabled

* Id = Other, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Initial, ThreadDispatch = { Enabled, Disabled }

* Id = Other, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Initial, ThreadDispatch = { Enabled, Disabled }

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = UpdatePriority, RestartExtensions = Nop

* Id = { Other, Executing }, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Changed, ThreadDispatch = Disabled

* Id = { Other, Executing }, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = Ready, Timer = Inactive, RealPriority = Changed, ThreadDispatch = Disabled

* Id = Other, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Changed, ThreadDispatch = { Enabled, Disabled }

* Id = Other, Dormant = No, Suspended = No, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Changed, ThreadDispatch = { Enabled, Disabled }

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = Unblock, RestartExtensions = Nop

* Id = { Other, Executing }, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Initial, ThreadDispatch = Disabled

* Id = { Other, Executing }, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = Ready, Timer = Inactive, RealPriority = Initial, ThreadDispatch = Disabled

* Id = Other, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Initial, ThreadDispatch = { Enabled, Disabled }

* Id = Other, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Initial, ThreadDispatch = { Enabled, Disabled }

Status = Ok, FatalError = Nop, Argument = Set, Scheduler = UnblockUpdatePriority, RestartExtensions = Nop

* Id = { Other, Executing }, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Changed, ThreadDispatch = Disabled

* Id = { Other, Executing }, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = Ready, Timer = Inactive, RealPriority = Changed, ThreadDispatch = Disabled

* Id = Other, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = Changed, ThreadDispatch = { Enabled, Disabled }

* Id = Other, Dormant = No, Suspended = Yes, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Inactive, RealPriority = Changed, ThreadDispatch = { Enabled, Disabled }

Status = IncStat, FatalError = Nop, Argument = Nop, Scheduler = Nop, RestartExtensions = Nop

* Id = Other, Dormant = Yes, Suspended = No, Restarting = NA, Terminating = { No, Yes }, Protected = NA, Context = Interrupt, State = NA, Timer = NA, RealPriority = { Initial, Changed }, ThreadDispatch = Disabled

* Id = Other, Dormant = Yes, Suspended = No, Restarting = NA, Terminating = { No, Yes }, Protected = NA, Context = Task, State = NA, Timer = NA, RealPriority = { Initial, Changed }, ThreadDispatch = { Enabled, Disabled }

* Id = Other, Dormant = Yes, Suspended = { No, Yes }, Restarting = NA, Terminating = Yes, Protected = NA, Context = Task, State = NA, Timer = NA, RealPriority = { Initial, Changed }, ThreadDispatch = { Enabled, Disabled }

* Id = Other, Dormant = Yes, Suspended = Yes, Restarting = NA, Terminating = { No, Yes }, Protected = NA, Context = Interrupt, State = NA, Timer = NA, RealPriority = { Initial, Changed }, ThreadDispatch = Disabled

* Id = Other, Dormant = Yes, Suspended = Yes, Restarting = NA, Terminating = No, Protected = NA, Context = Task, State = NA, Timer = NA, RealPriority = { Initial, Changed }, ThreadDispatch = { Enabled, Disabled }

Status = InvId, FatalError = Nop, Argument = Nop, Scheduler = Nop, RestartExtensions = Nop

* Id = Invalid, Dormant = NA, Suspended = NA, Restarting = NA, Terminating = NA, Protected = NA, Context = Interrupt, State = NA, Timer = NA, RealPriority = NA, ThreadDispatch = Disabled

* Id = Invalid, Dormant = NA, Suspended = NA, Restarting = NA, Terminating = NA, Protected = NA, Context = Task, State = NA, Timer = NA, RealPriority = NA, ThreadDispatch = { Enabled, Disabled }

ExecutingIsNotDormant

* Id = Executing, Dormant = Yes, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = { Enqueued, Blocked, Ready }, Timer = { Active, Inactive }, RealPriority = { Initial, Changed }, ThreadDispatch = Disabled

* Id = Executing, Dormant = Yes, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = { Enqueued, Blocked, Ready }, Timer = { Active, Inactive }, RealPriority = { Initial, Changed }, ThreadDispatch = { Enabled, Disabled }

ExecutingIsNotBlocked

* Id = Executing, Dormant = No, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = { Enqueued, Blocked }, Timer = { Active, Inactive }, RealPriority = { Initial, Changed }, ThreadDispatch = { Enabled, Disabled }

NotBlockedHasInactiveTimer

* Id = { Other, Executing }, Dormant = No, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = Ready, Timer = Active, RealPriority = { Initial, Changed }, ThreadDispatch = Disabled

* Id = { Other, Executing }, Dormant = No, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Task, State = Ready, Timer = Active, RealPriority = { Initial, Changed }, ThreadDispatch = { Enabled, Disabled }

ISRThreadDispatchDisabled

* Id = { Other, Invalid, Executing }, Dormant = { No, Yes }, Suspended = { No, Yes }, Restarting = { Yes, No }, Terminating = { No, Yes }, Protected = { Yes, No }, Context = Interrupt, State = { Enqueued, Blocked, Ready }, Timer = { Active, Inactive }, RealPriority = { Initial, Changed }, ThreadDispatch = Enabled

--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to