source: rtems/testsuites/validation/tc-barrier-create.c @ bfd1b6ee

Last change on this file since bfd1b6ee was bfd1b6ee, checked in by Sebastian Huber <sebastian.huber@…>, on 03/11/21 at 06:57:48

validation: Use common wording

  • Property mode set to 100644
File size: 29.5 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/**
4 * @file
5 *
6 * @ingroup RTEMSTestCaseRtemsBarrierReqCreate
7 */
8
9/*
10 * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34/*
35 * This file is part of the RTEMS quality process and was automatically
36 * generated.  If you find something that needs to be fixed or
37 * worded better please post a report or patch to an RTEMS mailing list
38 * or raise a bug report:
39 *
40 * https://www.rtems.org/bugs.html
41 *
42 * For information on updating and regenerating please refer to the How-To
43 * section in the Software Requirements Engineering chapter of the
44 * RTEMS Software Engineering manual.  The manual is provided as a part of
45 * a release.  For development sources please refer to the online
46 * documentation at:
47 *
48 * https://docs.rtems.org
49 */
50
51#ifdef HAVE_CONFIG_H
52#include "config.h"
53#endif
54
55#include <rtems.h>
56#include <string.h>
57
58#include <rtems/test.h>
59
60/**
61 * @defgroup RTEMSTestCaseRtemsBarrierReqCreate spec:/rtems/barrier/req/create
62 *
63 * @ingroup RTEMSTestSuiteTestsuitesValidation0
64 *
65 * @{
66 */
67
68typedef enum {
69  RtemsBarrierReqCreate_Pre_Name_Valid,
70  RtemsBarrierReqCreate_Pre_Name_Invalid,
71  RtemsBarrierReqCreate_Pre_Name_NA
72} RtemsBarrierReqCreate_Pre_Name;
73
74typedef enum {
75  RtemsBarrierReqCreate_Pre_Class_Default,
76  RtemsBarrierReqCreate_Pre_Class_Manual,
77  RtemsBarrierReqCreate_Pre_Class_Auto,
78  RtemsBarrierReqCreate_Pre_Class_NA
79} RtemsBarrierReqCreate_Pre_Class;
80
81typedef enum {
82  RtemsBarrierReqCreate_Pre_MaxWait_Zero,
83  RtemsBarrierReqCreate_Pre_MaxWait_Positive,
84  RtemsBarrierReqCreate_Pre_MaxWait_NA
85} RtemsBarrierReqCreate_Pre_MaxWait;
86
87typedef enum {
88  RtemsBarrierReqCreate_Pre_Id_Valid,
89  RtemsBarrierReqCreate_Pre_Id_Null,
90  RtemsBarrierReqCreate_Pre_Id_NA
91} RtemsBarrierReqCreate_Pre_Id;
92
93typedef enum {
94  RtemsBarrierReqCreate_Pre_Free_Yes,
95  RtemsBarrierReqCreate_Pre_Free_No,
96  RtemsBarrierReqCreate_Pre_Free_NA
97} RtemsBarrierReqCreate_Pre_Free;
98
99typedef enum {
100  RtemsBarrierReqCreate_Post_Status_Ok,
101  RtemsBarrierReqCreate_Post_Status_InvName,
102  RtemsBarrierReqCreate_Post_Status_InvAddr,
103  RtemsBarrierReqCreate_Post_Status_InvNum,
104  RtemsBarrierReqCreate_Post_Status_TooMany,
105  RtemsBarrierReqCreate_Post_Status_NA
106} RtemsBarrierReqCreate_Post_Status;
107
108typedef enum {
109  RtemsBarrierReqCreate_Post_Name_Valid,
110  RtemsBarrierReqCreate_Post_Name_Invalid,
111  RtemsBarrierReqCreate_Post_Name_NA
112} RtemsBarrierReqCreate_Post_Name;
113
114typedef enum {
115  RtemsBarrierReqCreate_Post_Class_NoObj,
116  RtemsBarrierReqCreate_Post_Class_Manual,
117  RtemsBarrierReqCreate_Post_Class_Auto,
118  RtemsBarrierReqCreate_Post_Class_NA
119} RtemsBarrierReqCreate_Post_Class;
120
121typedef enum {
122  RtemsBarrierReqCreate_Post_IdVar_Set,
123  RtemsBarrierReqCreate_Post_IdVar_Nop,
124  RtemsBarrierReqCreate_Post_IdVar_NA
125} RtemsBarrierReqCreate_Post_IdVar;
126
127/**
128 * @brief Test context for spec:/rtems/barrier/req/create test case.
129 */
130typedef struct {
131  void *seized_objects;
132
133  rtems_id worker_id;
134
135  rtems_id id_value;
136
137  uint32_t release_done;
138
139  uint32_t release_expected;
140
141  rtems_name name;
142
143  rtems_attribute attribute_set;
144
145  uint32_t maximum_waiters;
146
147  rtems_id *id;
148
149  rtems_status_code status;
150
151  /**
152   * @brief This member defines the pre-condition states for the next action.
153   */
154  size_t pcs[ 5 ];
155
156  /**
157   * @brief This member indicates if the test action loop is currently
158   *   executed.
159   */
160  bool in_action_loop;
161} RtemsBarrierReqCreate_Context;
162
163static RtemsBarrierReqCreate_Context
164  RtemsBarrierReqCreate_Instance;
165
166static const char * const RtemsBarrierReqCreate_PreDesc_Name[] = {
167  "Valid",
168  "Invalid",
169  "NA"
170};
171
172static const char * const RtemsBarrierReqCreate_PreDesc_Class[] = {
173  "Default",
174  "Manual",
175  "Auto",
176  "NA"
177};
178
179static const char * const RtemsBarrierReqCreate_PreDesc_MaxWait[] = {
180  "Zero",
181  "Positive",
182  "NA"
183};
184
185static const char * const RtemsBarrierReqCreate_PreDesc_Id[] = {
186  "Valid",
187  "Null",
188  "NA"
189};
190
191static const char * const RtemsBarrierReqCreate_PreDesc_Free[] = {
192  "Yes",
193  "No",
194  "NA"
195};
196
197static const char * const * const RtemsBarrierReqCreate_PreDesc[] = {
198  RtemsBarrierReqCreate_PreDesc_Name,
199  RtemsBarrierReqCreate_PreDesc_Class,
200  RtemsBarrierReqCreate_PreDesc_MaxWait,
201  RtemsBarrierReqCreate_PreDesc_Id,
202  RtemsBarrierReqCreate_PreDesc_Free,
203  NULL
204};
205
206#define NAME rtems_build_name( 'T', 'E', 'S', 'T' )
207
208#define INVALID_ID 0xffffffff
209
210typedef RtemsBarrierReqCreate_Context Context;
211
212typedef enum {
213  PRIO_NORMAL = 1,
214  PRIO_LOW
215} Priorities;
216
217static void Worker( rtems_task_argument arg )
218{
219  Context *ctx;
220
221  ctx = (Context *) arg;
222
223  while ( true ) {
224    rtems_status_code sc;
225    uint32_t          released;
226
227    ++ctx->release_done;
228
229    released = 0;
230    sc = rtems_barrier_release( ctx->id_value, &released );
231    T_rsc_success( sc );
232    T_eq_u32( released, 1 );
233  }
234}
235
236static rtems_status_code Create( void *arg, uint32_t *id )
237{
238  return rtems_barrier_create(
239    rtems_build_name( 'S', 'I', 'Z', 'E' ),
240    RTEMS_DEFAULT_ATTRIBUTES,
241    0,
242    id
243  );
244}
245
246static void RtemsBarrierReqCreate_Pre_Name_Prepare(
247  RtemsBarrierReqCreate_Context *ctx,
248  RtemsBarrierReqCreate_Pre_Name state
249)
250{
251  switch ( state ) {
252    case RtemsBarrierReqCreate_Pre_Name_Valid: {
253      /*
254       * The ``name`` parameter shall be valid.
255       */
256      ctx->name = NAME;
257      break;
258    }
259
260    case RtemsBarrierReqCreate_Pre_Name_Invalid: {
261      /*
262       * The ``name`` parameter shall be invalid.
263       */
264      ctx->name = 0;
265      break;
266    }
267
268    case RtemsBarrierReqCreate_Pre_Name_NA:
269      break;
270  }
271}
272
273static void RtemsBarrierReqCreate_Pre_Class_Prepare(
274  RtemsBarrierReqCreate_Context  *ctx,
275  RtemsBarrierReqCreate_Pre_Class state
276)
277{
278  switch ( state ) {
279    case RtemsBarrierReqCreate_Pre_Class_Default: {
280      /*
281       * The ``attribute_set`` parameter shall specify the default class.
282       */
283      /* Nothing to do */
284      break;
285    }
286
287    case RtemsBarrierReqCreate_Pre_Class_Manual: {
288      /*
289       * The ``attribute_set`` parameter shall specify the manual release
290       * class.
291       */
292      ctx->attribute_set |= RTEMS_BARRIER_MANUAL_RELEASE;
293      break;
294    }
295
296    case RtemsBarrierReqCreate_Pre_Class_Auto: {
297      /*
298       * The ``attribute_set`` parameter shall specify the automatic release
299       * class.
300       */
301      ctx->attribute_set |= RTEMS_BARRIER_AUTOMATIC_RELEASE;
302      break;
303    }
304
305    case RtemsBarrierReqCreate_Pre_Class_NA:
306      break;
307  }
308}
309
310static void RtemsBarrierReqCreate_Pre_MaxWait_Prepare(
311  RtemsBarrierReqCreate_Context    *ctx,
312  RtemsBarrierReqCreate_Pre_MaxWait state
313)
314{
315  switch ( state ) {
316    case RtemsBarrierReqCreate_Pre_MaxWait_Zero: {
317      /*
318       * The ``maximum_waiters`` parameter shall be zero.
319       */
320      ctx->maximum_waiters = 0;
321      break;
322    }
323
324    case RtemsBarrierReqCreate_Pre_MaxWait_Positive: {
325      /*
326       * The ``maximum_waiters`` parameter shall be positive.
327       */
328      ctx->maximum_waiters = 1;
329      break;
330    }
331
332    case RtemsBarrierReqCreate_Pre_MaxWait_NA:
333      break;
334  }
335}
336
337static void RtemsBarrierReqCreate_Pre_Id_Prepare(
338  RtemsBarrierReqCreate_Context *ctx,
339  RtemsBarrierReqCreate_Pre_Id   state
340)
341{
342  switch ( state ) {
343    case RtemsBarrierReqCreate_Pre_Id_Valid: {
344      /*
345       * The ``id`` parameter shall reference an object of type rtems_id.
346       */
347      ctx->id = &ctx->id_value;
348      break;
349    }
350
351    case RtemsBarrierReqCreate_Pre_Id_Null: {
352      /*
353       * The ``id`` parameter shall be NULL.
354       */
355      ctx->id = NULL;
356      break;
357    }
358
359    case RtemsBarrierReqCreate_Pre_Id_NA:
360      break;
361  }
362}
363
364static void RtemsBarrierReqCreate_Pre_Free_Prepare(
365  RtemsBarrierReqCreate_Context *ctx,
366  RtemsBarrierReqCreate_Pre_Free state
367)
368{
369  switch ( state ) {
370    case RtemsBarrierReqCreate_Pre_Free_Yes: {
371      /*
372       * The system shall have at least one inactive barrier object available.
373       */
374      /* Nothing to do */
375      break;
376    }
377
378    case RtemsBarrierReqCreate_Pre_Free_No: {
379      /*
380       * The system shall have no inactive partition object available.
381       */
382      ctx->seized_objects = T_seize_objects( Create, NULL );
383      break;
384    }
385
386    case RtemsBarrierReqCreate_Pre_Free_NA:
387      break;
388  }
389}
390
391static void RtemsBarrierReqCreate_Post_Status_Check(
392  RtemsBarrierReqCreate_Context    *ctx,
393  RtemsBarrierReqCreate_Post_Status state
394)
395{
396  switch ( state ) {
397    case RtemsBarrierReqCreate_Post_Status_Ok: {
398      /*
399       * The return status of rtems_barrier_create() shall be RTEMS_SUCCESSFUL.
400       */
401      T_rsc_success( ctx->status );
402      break;
403    }
404
405    case RtemsBarrierReqCreate_Post_Status_InvName: {
406      /*
407       * The return status of rtems_barrier_create() shall be
408       * RTEMS_INVALID_NAME.
409       */
410      T_rsc( ctx->status, RTEMS_INVALID_NAME );
411      break;
412    }
413
414    case RtemsBarrierReqCreate_Post_Status_InvAddr: {
415      /*
416       * The return status of rtems_barrier_create() shall be
417       * RTEMS_INVALID_ADDRESS.
418       */
419      T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
420      break;
421    }
422
423    case RtemsBarrierReqCreate_Post_Status_InvNum: {
424      /*
425       * The return status of rtems_barrier_create() shall be
426       * RTEMS_INVALID_NUMBER.
427       */
428      T_rsc( ctx->status, RTEMS_INVALID_NUMBER );
429      break;
430    }
431
432    case RtemsBarrierReqCreate_Post_Status_TooMany: {
433      /*
434       * The return status of rtems_barrier_create() shall be RTEMS_TOO_MANY.
435       */
436      T_rsc( ctx->status, RTEMS_TOO_MANY );
437      break;
438    }
439
440    case RtemsBarrierReqCreate_Post_Status_NA:
441      break;
442  }
443}
444
445static void RtemsBarrierReqCreate_Post_Name_Check(
446  RtemsBarrierReqCreate_Context  *ctx,
447  RtemsBarrierReqCreate_Post_Name state
448)
449{
450  rtems_status_code sc;
451  rtems_id          id;
452
453  switch ( state ) {
454    case RtemsBarrierReqCreate_Post_Name_Valid: {
455      /*
456       * The unique object name shall identify the barrier created by the
457       * rtems_barrier_create() call.
458       */
459      id = 0;
460      sc = rtems_barrier_ident( NAME, &id );
461      T_rsc_success( sc );
462      T_eq_u32( id, ctx->id_value );
463      break;
464    }
465
466    case RtemsBarrierReqCreate_Post_Name_Invalid: {
467      /*
468       * The unique object name shall not identify a barrier.
469       */
470      sc = rtems_barrier_ident( NAME, &id );
471      T_rsc( sc, RTEMS_INVALID_NAME );
472      break;
473    }
474
475    case RtemsBarrierReqCreate_Post_Name_NA:
476      break;
477  }
478}
479
480static void RtemsBarrierReqCreate_Post_Class_Check(
481  RtemsBarrierReqCreate_Context   *ctx,
482  RtemsBarrierReqCreate_Post_Class state
483)
484{
485  rtems_status_code sc;
486
487  switch ( state ) {
488    case RtemsBarrierReqCreate_Post_Class_NoObj: {
489      /*
490       * The barrier class is not applicable since there was no barrier
491       * created.
492       */
493      /* Not applicable */
494      break;
495    }
496
497    case RtemsBarrierReqCreate_Post_Class_Manual: {
498      /*
499       * The class of the barrier shall be manual release.
500       */
501      sc = rtems_barrier_wait( ctx->id_value, RTEMS_NO_TIMEOUT );
502      T_rsc_success( sc );
503
504      ++ctx->release_expected;
505      T_eq_u32( ctx->release_done, ctx->release_expected );
506      break;
507    }
508
509    case RtemsBarrierReqCreate_Post_Class_Auto: {
510      /*
511       * The class of the barrier shall be automatic release.
512       */
513      sc = rtems_barrier_wait( ctx->id_value, RTEMS_NO_TIMEOUT );
514      T_rsc_success( sc );
515
516      T_eq_u32( ctx->release_done, ctx->release_expected );
517      break;
518    }
519
520    case RtemsBarrierReqCreate_Post_Class_NA:
521      break;
522  }
523}
524
525static void RtemsBarrierReqCreate_Post_IdVar_Check(
526  RtemsBarrierReqCreate_Context   *ctx,
527  RtemsBarrierReqCreate_Post_IdVar state
528)
529{
530  switch ( state ) {
531    case RtemsBarrierReqCreate_Post_IdVar_Set: {
532      /*
533       * The value of the object referenced by the ``id`` parameter shall be
534       * set to the object identifier of the created barrier after the return
535       * of the rtems_barrier_create() call.
536       */
537      T_eq_ptr( ctx->id, &ctx->id_value );
538      T_ne_u32( ctx->id_value, INVALID_ID );
539      break;
540    }
541
542    case RtemsBarrierReqCreate_Post_IdVar_Nop: {
543      /*
544       * Objects referenced by the ``id`` parameter in past calls to
545       * rtems_barrier_create() shall not be accessed by the
546       * rtems_barrier_create() call.
547       */
548      T_eq_u32( ctx->id_value, INVALID_ID );
549      break;
550    }
551
552    case RtemsBarrierReqCreate_Post_IdVar_NA:
553      break;
554  }
555}
556
557static void RtemsBarrierReqCreate_Setup( RtemsBarrierReqCreate_Context *ctx )
558{
559  rtems_status_code sc;
560
561  memset( ctx, 0, sizeof( *ctx ) );
562  ctx->id_value = INVALID_ID;
563
564  sc = rtems_task_create(
565    rtems_build_name( 'W', 'O', 'R', 'K' ),
566    PRIO_LOW,
567    RTEMS_MINIMUM_STACK_SIZE,
568    RTEMS_DEFAULT_MODES,
569    RTEMS_DEFAULT_ATTRIBUTES,
570    &ctx->worker_id
571  );
572  T_assert_rsc_success( sc );
573
574  sc = rtems_task_start( ctx->worker_id, Worker, (rtems_task_argument) ctx );
575  T_assert_rsc_success( sc );
576}
577
578static void RtemsBarrierReqCreate_Setup_Wrap( void *arg )
579{
580  RtemsBarrierReqCreate_Context *ctx;
581
582  ctx = arg;
583  ctx->in_action_loop = false;
584  RtemsBarrierReqCreate_Setup( ctx );
585}
586
587static void RtemsBarrierReqCreate_Teardown(
588  RtemsBarrierReqCreate_Context *ctx
589)
590{
591  rtems_status_code sc;
592
593  if ( ctx->worker_id != 0 ) {
594    sc = rtems_task_delete( ctx->worker_id );
595    T_rsc_success( sc );
596  }
597}
598
599static void RtemsBarrierReqCreate_Teardown_Wrap( void *arg )
600{
601  RtemsBarrierReqCreate_Context *ctx;
602
603  ctx = arg;
604  ctx->in_action_loop = false;
605  RtemsBarrierReqCreate_Teardown( ctx );
606}
607
608static size_t RtemsBarrierReqCreate_Scope( void *arg, char *buf, size_t n )
609{
610  RtemsBarrierReqCreate_Context *ctx;
611
612  ctx = arg;
613
614  if ( ctx->in_action_loop ) {
615    return T_get_scope( RtemsBarrierReqCreate_PreDesc, buf, n, ctx->pcs );
616  }
617
618  return 0;
619}
620
621static T_fixture RtemsBarrierReqCreate_Fixture = {
622  .setup = RtemsBarrierReqCreate_Setup_Wrap,
623  .stop = NULL,
624  .teardown = RtemsBarrierReqCreate_Teardown_Wrap,
625  .scope = RtemsBarrierReqCreate_Scope,
626  .initial_context = &RtemsBarrierReqCreate_Instance
627};
628
629static const uint8_t RtemsBarrierReqCreate_TransitionMap[][ 4 ] = {
630  {
631    RtemsBarrierReqCreate_Post_Status_Ok,
632    RtemsBarrierReqCreate_Post_Name_Valid,
633    RtemsBarrierReqCreate_Post_Class_Manual,
634    RtemsBarrierReqCreate_Post_IdVar_Set
635  }, {
636    RtemsBarrierReqCreate_Post_Status_TooMany,
637    RtemsBarrierReqCreate_Post_Name_Invalid,
638    RtemsBarrierReqCreate_Post_Class_NoObj,
639    RtemsBarrierReqCreate_Post_IdVar_Nop
640  }, {
641    RtemsBarrierReqCreate_Post_Status_InvAddr,
642    RtemsBarrierReqCreate_Post_Name_Invalid,
643    RtemsBarrierReqCreate_Post_Class_NoObj,
644    RtemsBarrierReqCreate_Post_IdVar_Nop
645  }, {
646    RtemsBarrierReqCreate_Post_Status_InvAddr,
647    RtemsBarrierReqCreate_Post_Name_Invalid,
648    RtemsBarrierReqCreate_Post_Class_NoObj,
649    RtemsBarrierReqCreate_Post_IdVar_Nop
650  }, {
651    RtemsBarrierReqCreate_Post_Status_Ok,
652    RtemsBarrierReqCreate_Post_Name_Valid,
653    RtemsBarrierReqCreate_Post_Class_Manual,
654    RtemsBarrierReqCreate_Post_IdVar_Set
655  }, {
656    RtemsBarrierReqCreate_Post_Status_TooMany,
657    RtemsBarrierReqCreate_Post_Name_Invalid,
658    RtemsBarrierReqCreate_Post_Class_NoObj,
659    RtemsBarrierReqCreate_Post_IdVar_Nop
660  }, {
661    RtemsBarrierReqCreate_Post_Status_InvAddr,
662    RtemsBarrierReqCreate_Post_Name_Invalid,
663    RtemsBarrierReqCreate_Post_Class_NoObj,
664    RtemsBarrierReqCreate_Post_IdVar_Nop
665  }, {
666    RtemsBarrierReqCreate_Post_Status_InvAddr,
667    RtemsBarrierReqCreate_Post_Name_Invalid,
668    RtemsBarrierReqCreate_Post_Class_NoObj,
669    RtemsBarrierReqCreate_Post_IdVar_Nop
670  }, {
671    RtemsBarrierReqCreate_Post_Status_Ok,
672    RtemsBarrierReqCreate_Post_Name_Valid,
673    RtemsBarrierReqCreate_Post_Class_Manual,
674    RtemsBarrierReqCreate_Post_IdVar_Set
675  }, {
676    RtemsBarrierReqCreate_Post_Status_TooMany,
677    RtemsBarrierReqCreate_Post_Name_Invalid,
678    RtemsBarrierReqCreate_Post_Class_NoObj,
679    RtemsBarrierReqCreate_Post_IdVar_Nop
680  }, {
681    RtemsBarrierReqCreate_Post_Status_InvAddr,
682    RtemsBarrierReqCreate_Post_Name_Invalid,
683    RtemsBarrierReqCreate_Post_Class_NoObj,
684    RtemsBarrierReqCreate_Post_IdVar_Nop
685  }, {
686    RtemsBarrierReqCreate_Post_Status_InvAddr,
687    RtemsBarrierReqCreate_Post_Name_Invalid,
688    RtemsBarrierReqCreate_Post_Class_NoObj,
689    RtemsBarrierReqCreate_Post_IdVar_Nop
690  }, {
691    RtemsBarrierReqCreate_Post_Status_Ok,
692    RtemsBarrierReqCreate_Post_Name_Valid,
693    RtemsBarrierReqCreate_Post_Class_Manual,
694    RtemsBarrierReqCreate_Post_IdVar_Set
695  }, {
696    RtemsBarrierReqCreate_Post_Status_TooMany,
697    RtemsBarrierReqCreate_Post_Name_Invalid,
698    RtemsBarrierReqCreate_Post_Class_NoObj,
699    RtemsBarrierReqCreate_Post_IdVar_Nop
700  }, {
701    RtemsBarrierReqCreate_Post_Status_InvAddr,
702    RtemsBarrierReqCreate_Post_Name_Invalid,
703    RtemsBarrierReqCreate_Post_Class_NoObj,
704    RtemsBarrierReqCreate_Post_IdVar_Nop
705  }, {
706    RtemsBarrierReqCreate_Post_Status_InvAddr,
707    RtemsBarrierReqCreate_Post_Name_Invalid,
708    RtemsBarrierReqCreate_Post_Class_NoObj,
709    RtemsBarrierReqCreate_Post_IdVar_Nop
710  }, {
711    RtemsBarrierReqCreate_Post_Status_InvNum,
712    RtemsBarrierReqCreate_Post_Name_Invalid,
713    RtemsBarrierReqCreate_Post_Class_NoObj,
714    RtemsBarrierReqCreate_Post_IdVar_Nop
715  }, {
716    RtemsBarrierReqCreate_Post_Status_InvNum,
717    RtemsBarrierReqCreate_Post_Name_Invalid,
718    RtemsBarrierReqCreate_Post_Class_NoObj,
719    RtemsBarrierReqCreate_Post_IdVar_Nop
720  }, {
721    RtemsBarrierReqCreate_Post_Status_InvAddr,
722    RtemsBarrierReqCreate_Post_Name_Invalid,
723    RtemsBarrierReqCreate_Post_Class_NoObj,
724    RtemsBarrierReqCreate_Post_IdVar_Nop
725  }, {
726    RtemsBarrierReqCreate_Post_Status_InvAddr,
727    RtemsBarrierReqCreate_Post_Name_Invalid,
728    RtemsBarrierReqCreate_Post_Class_NoObj,
729    RtemsBarrierReqCreate_Post_IdVar_Nop
730  }, {
731    RtemsBarrierReqCreate_Post_Status_Ok,
732    RtemsBarrierReqCreate_Post_Name_Valid,
733    RtemsBarrierReqCreate_Post_Class_Auto,
734    RtemsBarrierReqCreate_Post_IdVar_Set
735  }, {
736    RtemsBarrierReqCreate_Post_Status_TooMany,
737    RtemsBarrierReqCreate_Post_Name_Invalid,
738    RtemsBarrierReqCreate_Post_Class_NoObj,
739    RtemsBarrierReqCreate_Post_IdVar_Nop
740  }, {
741    RtemsBarrierReqCreate_Post_Status_InvAddr,
742    RtemsBarrierReqCreate_Post_Name_Invalid,
743    RtemsBarrierReqCreate_Post_Class_NoObj,
744    RtemsBarrierReqCreate_Post_IdVar_Nop
745  }, {
746    RtemsBarrierReqCreate_Post_Status_InvAddr,
747    RtemsBarrierReqCreate_Post_Name_Invalid,
748    RtemsBarrierReqCreate_Post_Class_NoObj,
749    RtemsBarrierReqCreate_Post_IdVar_Nop
750  }, {
751    RtemsBarrierReqCreate_Post_Status_InvName,
752    RtemsBarrierReqCreate_Post_Name_Invalid,
753    RtemsBarrierReqCreate_Post_Class_NoObj,
754    RtemsBarrierReqCreate_Post_IdVar_Nop
755  }, {
756    RtemsBarrierReqCreate_Post_Status_InvName,
757    RtemsBarrierReqCreate_Post_Name_Invalid,
758    RtemsBarrierReqCreate_Post_Class_NoObj,
759    RtemsBarrierReqCreate_Post_IdVar_Nop
760  }, {
761    RtemsBarrierReqCreate_Post_Status_InvName,
762    RtemsBarrierReqCreate_Post_Name_Invalid,
763    RtemsBarrierReqCreate_Post_Class_NoObj,
764    RtemsBarrierReqCreate_Post_IdVar_Nop
765  }, {
766    RtemsBarrierReqCreate_Post_Status_InvName,
767    RtemsBarrierReqCreate_Post_Name_Invalid,
768    RtemsBarrierReqCreate_Post_Class_NoObj,
769    RtemsBarrierReqCreate_Post_IdVar_Nop
770  }, {
771    RtemsBarrierReqCreate_Post_Status_InvName,
772    RtemsBarrierReqCreate_Post_Name_Invalid,
773    RtemsBarrierReqCreate_Post_Class_NoObj,
774    RtemsBarrierReqCreate_Post_IdVar_Nop
775  }, {
776    RtemsBarrierReqCreate_Post_Status_InvName,
777    RtemsBarrierReqCreate_Post_Name_Invalid,
778    RtemsBarrierReqCreate_Post_Class_NoObj,
779    RtemsBarrierReqCreate_Post_IdVar_Nop
780  }, {
781    RtemsBarrierReqCreate_Post_Status_InvName,
782    RtemsBarrierReqCreate_Post_Name_Invalid,
783    RtemsBarrierReqCreate_Post_Class_NoObj,
784    RtemsBarrierReqCreate_Post_IdVar_Nop
785  }, {
786    RtemsBarrierReqCreate_Post_Status_InvName,
787    RtemsBarrierReqCreate_Post_Name_Invalid,
788    RtemsBarrierReqCreate_Post_Class_NoObj,
789    RtemsBarrierReqCreate_Post_IdVar_Nop
790  }, {
791    RtemsBarrierReqCreate_Post_Status_InvName,
792    RtemsBarrierReqCreate_Post_Name_Invalid,
793    RtemsBarrierReqCreate_Post_Class_NoObj,
794    RtemsBarrierReqCreate_Post_IdVar_Nop
795  }, {
796    RtemsBarrierReqCreate_Post_Status_InvName,
797    RtemsBarrierReqCreate_Post_Name_Invalid,
798    RtemsBarrierReqCreate_Post_Class_NoObj,
799    RtemsBarrierReqCreate_Post_IdVar_Nop
800  }, {
801    RtemsBarrierReqCreate_Post_Status_InvName,
802    RtemsBarrierReqCreate_Post_Name_Invalid,
803    RtemsBarrierReqCreate_Post_Class_NoObj,
804    RtemsBarrierReqCreate_Post_IdVar_Nop
805  }, {
806    RtemsBarrierReqCreate_Post_Status_InvName,
807    RtemsBarrierReqCreate_Post_Name_Invalid,
808    RtemsBarrierReqCreate_Post_Class_NoObj,
809    RtemsBarrierReqCreate_Post_IdVar_Nop
810  }, {
811    RtemsBarrierReqCreate_Post_Status_InvName,
812    RtemsBarrierReqCreate_Post_Name_Invalid,
813    RtemsBarrierReqCreate_Post_Class_NoObj,
814    RtemsBarrierReqCreate_Post_IdVar_Nop
815  }, {
816    RtemsBarrierReqCreate_Post_Status_InvName,
817    RtemsBarrierReqCreate_Post_Name_Invalid,
818    RtemsBarrierReqCreate_Post_Class_NoObj,
819    RtemsBarrierReqCreate_Post_IdVar_Nop
820  }, {
821    RtemsBarrierReqCreate_Post_Status_InvName,
822    RtemsBarrierReqCreate_Post_Name_Invalid,
823    RtemsBarrierReqCreate_Post_Class_NoObj,
824    RtemsBarrierReqCreate_Post_IdVar_Nop
825  }, {
826    RtemsBarrierReqCreate_Post_Status_InvName,
827    RtemsBarrierReqCreate_Post_Name_Invalid,
828    RtemsBarrierReqCreate_Post_Class_NoObj,
829    RtemsBarrierReqCreate_Post_IdVar_Nop
830  }, {
831    RtemsBarrierReqCreate_Post_Status_InvName,
832    RtemsBarrierReqCreate_Post_Name_Invalid,
833    RtemsBarrierReqCreate_Post_Class_NoObj,
834    RtemsBarrierReqCreate_Post_IdVar_Nop
835  }, {
836    RtemsBarrierReqCreate_Post_Status_InvName,
837    RtemsBarrierReqCreate_Post_Name_Invalid,
838    RtemsBarrierReqCreate_Post_Class_NoObj,
839    RtemsBarrierReqCreate_Post_IdVar_Nop
840  }, {
841    RtemsBarrierReqCreate_Post_Status_InvName,
842    RtemsBarrierReqCreate_Post_Name_Invalid,
843    RtemsBarrierReqCreate_Post_Class_NoObj,
844    RtemsBarrierReqCreate_Post_IdVar_Nop
845  }, {
846    RtemsBarrierReqCreate_Post_Status_InvName,
847    RtemsBarrierReqCreate_Post_Name_Invalid,
848    RtemsBarrierReqCreate_Post_Class_NoObj,
849    RtemsBarrierReqCreate_Post_IdVar_Nop
850  }, {
851    RtemsBarrierReqCreate_Post_Status_InvName,
852    RtemsBarrierReqCreate_Post_Name_Invalid,
853    RtemsBarrierReqCreate_Post_Class_NoObj,
854    RtemsBarrierReqCreate_Post_IdVar_Nop
855  }, {
856    RtemsBarrierReqCreate_Post_Status_InvName,
857    RtemsBarrierReqCreate_Post_Name_Invalid,
858    RtemsBarrierReqCreate_Post_Class_NoObj,
859    RtemsBarrierReqCreate_Post_IdVar_Nop
860  }, {
861    RtemsBarrierReqCreate_Post_Status_InvName,
862    RtemsBarrierReqCreate_Post_Name_Invalid,
863    RtemsBarrierReqCreate_Post_Class_NoObj,
864    RtemsBarrierReqCreate_Post_IdVar_Nop
865  }, {
866    RtemsBarrierReqCreate_Post_Status_InvName,
867    RtemsBarrierReqCreate_Post_Name_Invalid,
868    RtemsBarrierReqCreate_Post_Class_NoObj,
869    RtemsBarrierReqCreate_Post_IdVar_Nop
870  }
871};
872
873static const struct {
874  uint8_t Skip : 1;
875  uint8_t Pre_Name_NA : 1;
876  uint8_t Pre_Class_NA : 1;
877  uint8_t Pre_MaxWait_NA : 1;
878  uint8_t Pre_Id_NA : 1;
879  uint8_t Pre_Free_NA : 1;
880} RtemsBarrierReqCreate_TransitionInfo[] = {
881  {
882    0, 0, 0, 0, 0, 0
883  }, {
884    0, 0, 0, 0, 0, 0
885  }, {
886    0, 0, 0, 0, 0, 0
887  }, {
888    0, 0, 0, 0, 0, 0
889  }, {
890    0, 0, 0, 0, 0, 0
891  }, {
892    0, 0, 0, 0, 0, 0
893  }, {
894    0, 0, 0, 0, 0, 0
895  }, {
896    0, 0, 0, 0, 0, 0
897  }, {
898    0, 0, 0, 0, 0, 0
899  }, {
900    0, 0, 0, 0, 0, 0
901  }, {
902    0, 0, 0, 0, 0, 0
903  }, {
904    0, 0, 0, 0, 0, 0
905  }, {
906    0, 0, 0, 0, 0, 0
907  }, {
908    0, 0, 0, 0, 0, 0
909  }, {
910    0, 0, 0, 0, 0, 0
911  }, {
912    0, 0, 0, 0, 0, 0
913  }, {
914    0, 0, 0, 0, 0, 0
915  }, {
916    0, 0, 0, 0, 0, 0
917  }, {
918    0, 0, 0, 0, 0, 0
919  }, {
920    0, 0, 0, 0, 0, 0
921  }, {
922    0, 0, 0, 0, 0, 0
923  }, {
924    0, 0, 0, 0, 0, 0
925  }, {
926    0, 0, 0, 0, 0, 0
927  }, {
928    0, 0, 0, 0, 0, 0
929  }, {
930    0, 0, 0, 0, 0, 0
931  }, {
932    0, 0, 0, 0, 0, 0
933  }, {
934    0, 0, 0, 0, 0, 0
935  }, {
936    0, 0, 0, 0, 0, 0
937  }, {
938    0, 0, 0, 0, 0, 0
939  }, {
940    0, 0, 0, 0, 0, 0
941  }, {
942    0, 0, 0, 0, 0, 0
943  }, {
944    0, 0, 0, 0, 0, 0
945  }, {
946    0, 0, 0, 0, 0, 0
947  }, {
948    0, 0, 0, 0, 0, 0
949  }, {
950    0, 0, 0, 0, 0, 0
951  }, {
952    0, 0, 0, 0, 0, 0
953  }, {
954    0, 0, 0, 0, 0, 0
955  }, {
956    0, 0, 0, 0, 0, 0
957  }, {
958    0, 0, 0, 0, 0, 0
959  }, {
960    0, 0, 0, 0, 0, 0
961  }, {
962    0, 0, 0, 0, 0, 0
963  }, {
964    0, 0, 0, 0, 0, 0
965  }, {
966    0, 0, 0, 0, 0, 0
967  }, {
968    0, 0, 0, 0, 0, 0
969  }, {
970    0, 0, 0, 0, 0, 0
971  }, {
972    0, 0, 0, 0, 0, 0
973  }, {
974    0, 0, 0, 0, 0, 0
975  }, {
976    0, 0, 0, 0, 0, 0
977  }
978};
979
980static void RtemsBarrierReqCreate_Action( RtemsBarrierReqCreate_Context *ctx )
981{
982  ctx->status = rtems_barrier_create(
983    ctx->name,
984    ctx->attribute_set,
985    ctx->maximum_waiters,
986    ctx->id
987  );
988}
989
990static void RtemsBarrierReqCreate_Cleanup( RtemsBarrierReqCreate_Context *ctx )
991{
992  if ( ctx->id_value != INVALID_ID ) {
993    rtems_status_code sc;
994
995    sc = rtems_barrier_delete( ctx->id_value );
996    T_rsc_success( sc );
997
998    ctx->id_value = INVALID_ID;
999  }
1000
1001  T_surrender_objects( &ctx->seized_objects, rtems_barrier_delete );
1002}
1003
1004/**
1005 * @fn void T_case_body_RtemsBarrierReqCreate( void )
1006 */
1007T_TEST_CASE_FIXTURE( RtemsBarrierReqCreate, &RtemsBarrierReqCreate_Fixture )
1008{
1009  RtemsBarrierReqCreate_Context *ctx;
1010  size_t index;
1011
1012  ctx = T_fixture_context();
1013  ctx->in_action_loop = true;
1014  index = 0;
1015
1016  for (
1017    ctx->pcs[ 0 ] = RtemsBarrierReqCreate_Pre_Name_Valid;
1018    ctx->pcs[ 0 ] < RtemsBarrierReqCreate_Pre_Name_NA;
1019    ++ctx->pcs[ 0 ]
1020  ) {
1021    if ( RtemsBarrierReqCreate_TransitionInfo[ index ].Pre_Name_NA ) {
1022      ctx->pcs[ 0 ] = RtemsBarrierReqCreate_Pre_Name_NA;
1023      index += ( RtemsBarrierReqCreate_Pre_Name_NA - 1 )
1024        * RtemsBarrierReqCreate_Pre_Class_NA
1025        * RtemsBarrierReqCreate_Pre_MaxWait_NA
1026        * RtemsBarrierReqCreate_Pre_Id_NA
1027        * RtemsBarrierReqCreate_Pre_Free_NA;
1028    }
1029
1030    for (
1031      ctx->pcs[ 1 ] = RtemsBarrierReqCreate_Pre_Class_Default;
1032      ctx->pcs[ 1 ] < RtemsBarrierReqCreate_Pre_Class_NA;
1033      ++ctx->pcs[ 1 ]
1034    ) {
1035      if ( RtemsBarrierReqCreate_TransitionInfo[ index ].Pre_Class_NA ) {
1036        ctx->pcs[ 1 ] = RtemsBarrierReqCreate_Pre_Class_NA;
1037        index += ( RtemsBarrierReqCreate_Pre_Class_NA - 1 )
1038          * RtemsBarrierReqCreate_Pre_MaxWait_NA
1039          * RtemsBarrierReqCreate_Pre_Id_NA
1040          * RtemsBarrierReqCreate_Pre_Free_NA;
1041      }
1042
1043      for (
1044        ctx->pcs[ 2 ] = RtemsBarrierReqCreate_Pre_MaxWait_Zero;
1045        ctx->pcs[ 2 ] < RtemsBarrierReqCreate_Pre_MaxWait_NA;
1046        ++ctx->pcs[ 2 ]
1047      ) {
1048        if ( RtemsBarrierReqCreate_TransitionInfo[ index ].Pre_MaxWait_NA ) {
1049          ctx->pcs[ 2 ] = RtemsBarrierReqCreate_Pre_MaxWait_NA;
1050          index += ( RtemsBarrierReqCreate_Pre_MaxWait_NA - 1 )
1051            * RtemsBarrierReqCreate_Pre_Id_NA
1052            * RtemsBarrierReqCreate_Pre_Free_NA;
1053        }
1054
1055        for (
1056          ctx->pcs[ 3 ] = RtemsBarrierReqCreate_Pre_Id_Valid;
1057          ctx->pcs[ 3 ] < RtemsBarrierReqCreate_Pre_Id_NA;
1058          ++ctx->pcs[ 3 ]
1059        ) {
1060          if ( RtemsBarrierReqCreate_TransitionInfo[ index ].Pre_Id_NA ) {
1061            ctx->pcs[ 3 ] = RtemsBarrierReqCreate_Pre_Id_NA;
1062            index += ( RtemsBarrierReqCreate_Pre_Id_NA - 1 )
1063              * RtemsBarrierReqCreate_Pre_Free_NA;
1064          }
1065
1066          for (
1067            ctx->pcs[ 4 ] = RtemsBarrierReqCreate_Pre_Free_Yes;
1068            ctx->pcs[ 4 ] < RtemsBarrierReqCreate_Pre_Free_NA;
1069            ++ctx->pcs[ 4 ]
1070          ) {
1071            if ( RtemsBarrierReqCreate_TransitionInfo[ index ].Pre_Free_NA ) {
1072              ctx->pcs[ 4 ] = RtemsBarrierReqCreate_Pre_Free_NA;
1073              index += ( RtemsBarrierReqCreate_Pre_Free_NA - 1 );
1074            }
1075
1076            if ( RtemsBarrierReqCreate_TransitionInfo[ index ].Skip ) {
1077              ++index;
1078              continue;
1079            }
1080
1081            RtemsBarrierReqCreate_Pre_Name_Prepare( ctx, ctx->pcs[ 0 ] );
1082            RtemsBarrierReqCreate_Pre_Class_Prepare( ctx, ctx->pcs[ 1 ] );
1083            RtemsBarrierReqCreate_Pre_MaxWait_Prepare( ctx, ctx->pcs[ 2 ] );
1084            RtemsBarrierReqCreate_Pre_Id_Prepare( ctx, ctx->pcs[ 3 ] );
1085            RtemsBarrierReqCreate_Pre_Free_Prepare( ctx, ctx->pcs[ 4 ] );
1086            RtemsBarrierReqCreate_Action( ctx );
1087            RtemsBarrierReqCreate_Post_Status_Check(
1088              ctx,
1089              RtemsBarrierReqCreate_TransitionMap[ index ][ 0 ]
1090            );
1091            RtemsBarrierReqCreate_Post_Name_Check(
1092              ctx,
1093              RtemsBarrierReqCreate_TransitionMap[ index ][ 1 ]
1094            );
1095            RtemsBarrierReqCreate_Post_Class_Check(
1096              ctx,
1097              RtemsBarrierReqCreate_TransitionMap[ index ][ 2 ]
1098            );
1099            RtemsBarrierReqCreate_Post_IdVar_Check(
1100              ctx,
1101              RtemsBarrierReqCreate_TransitionMap[ index ][ 3 ]
1102            );
1103            RtemsBarrierReqCreate_Cleanup( ctx );
1104            ++index;
1105          }
1106        }
1107      }
1108    }
1109  }
1110}
1111
1112/** @} */
Note: See TracBrowser for help on using the repository browser.