source: rtems/testsuites/ada/mptests/mp10/mptest.adb @ f6c9334d

5
Last change on this file since f6c9334d was f6c9334d, checked in by Sebastian Huber <sebastian.huber@…>, on 12/01/17 at 07:51:17

ada: Add standard test begin/end message

  • Property mode set to 100644
File size: 7.5 KB
Line 
1--
2--  MPTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation for Test 10 of the RTEMS
7--  Multiprocessor Test Suite.
8--
9--  DEPENDENCIES:
10--
11--
12--
13--  COPYRIGHT (c) 1989-2011.
14--  On-Line Applications Research Corporation (OAR).
15--
16--  The license and distribution terms for this file may in
17--  the file LICENSE in this distribution or at
18--  http://www.rtems.org/license/LICENSE.
19--
20
21with INTERFACES; use INTERFACES;
22with RTEMS;
23with RTEMS.MESSAGE_QUEUE;
24with RTEMS.SEMAPHORE;
25with RTEMS.TASKS;
26with TEST_SUPPORT;
27with TEXT_IO;
28with UNSIGNED32_IO;
29
30package body MPTEST is
31
32--
33--  INIT
34--
35
36   procedure INIT (
37      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
38   ) is
39      STATUS : RTEMS.STATUS_CODES;
40   begin
41
42      TEXT_IO.NEW_LINE( 2 );
43      TEST_SUPPORT.ADA_TEST_BEGIN;
44      TEXT_IO.PUT( "*** NODE " );
45      UNSIGNED32_IO.PUT(
46         TEST_SUPPORT.NODE,
47         WIDTH => 1
48      );
49      TEXT_IO.PUT_LINE( " ***" );
50
51
52      MPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
53      MPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
54      MPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'S', 'A', '3', ' ' );
55
56      MPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'M', 'S', 'G', ' ' );
57
58      MPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'E', 'M', ' ' );
59
60      if TEST_SUPPORT.NODE = 1 then
61
62         TEXT_IO.PUT_LINE( "Creating Message Queue (Global)" );
63         RTEMS.MESSAGE_QUEUE.CREATE(
64            MPTEST.QUEUE_NAME( 1 ),
65            3,
66            RTEMS.GLOBAL + RTEMS.LIMIT,
67            MPTEST.QUEUE_ID( 1 ),
68            STATUS
69         );
70         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_CREATE" );
71
72         TEXT_IO.PUT_LINE( "Creating Semaphore (Global)" );
73         RTEMS.SEMAPHORE.CREATE(
74            MPTEST.SEMAPHORE_NAME( 1 ),
75            0,
76            RTEMS.GLOBAL + RTEMS.PRIORITY,
77            MPTEST.SEMAPHORE_ID( 1 ),
78            STATUS
79         );
80         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE" );
81
82         RTEMS.TASKS.WAKE_AFTER( 10 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
83         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
84
85      else
86
87         TEXT_IO.PUT_LINE( "Creating Test_task 1 (local)" );
88         RTEMS.TASKS.CREATE(
89            MPTEST.TASK_NAME( 1 ),
90            1,
91            2048,
92            RTEMS.TIMESLICE,
93            RTEMS.DEFAULT_ATTRIBUTES,
94            MPTEST.TASK_ID( 1 ),
95            STATUS
96         );
97         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
98
99         TEXT_IO.PUT_LINE( "Starting Test_task 1 (local)" );
100         RTEMS.TASKS.START(
101            MPTEST.TASK_ID( 1 ),
102            MPTEST.TEST_TASK_1'ACCESS,
103            0,
104            STATUS
105         );
106         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
107
108         TEXT_IO.PUT_LINE( "Creating Test_task 2 (local)" );
109         RTEMS.TASKS.CREATE(
110            MPTEST.TASK_NAME( 2 ),
111            1,
112            2048,
113            RTEMS.TIMESLICE,
114            RTEMS.DEFAULT_ATTRIBUTES,
115            MPTEST.TASK_ID( 2 ),
116            STATUS
117         );   
118         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
119 
120         TEXT_IO.PUT_LINE( "Starting Test_task 2 (local)" );
121         RTEMS.TASKS.START(
122            MPTEST.TASK_ID( 2 ),
123            MPTEST.TEST_TASK_2'ACCESS,
124            0,
125            STATUS
126         );   
127         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
128
129         TEXT_IO.PUT_LINE( "Creating Test_task 3 (local)" );
130         RTEMS.TASKS.CREATE(
131            MPTEST.TASK_NAME( 3 ),
132            1,
133            2048,
134            RTEMS.TIMESLICE,
135            RTEMS.DEFAULT_ATTRIBUTES,
136            MPTEST.TASK_ID( 3 ),
137            STATUS
138         );   
139         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
140 
141         TEXT_IO.PUT_LINE( "Starting Test_task 3 (local)" );
142         RTEMS.TASKS.START(
143            MPTEST.TASK_ID( 3 ),
144            MPTEST.TEST_TASK_3'ACCESS,
145            0,
146            STATUS
147         );   
148         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
149
150         TEXT_IO.PUT_LINE( "Sleeping for 1 second ..." );
151         RTEMS.TASKS.WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
152         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
153
154         TEXT_IO.PUT_LINE( "Deleting Test_task 2" );
155         RTEMS.TASKS.DELETE( MPTEST.TASK_ID( 2 ), STATUS );
156         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 2" );
157
158         TEXT_IO.PUT_LINE( "Deleting Test_task 1" );
159         RTEMS.TASKS.DELETE( MPTEST.TASK_ID( 1 ), STATUS );
160         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF 1" );
161
162         TEXT_IO.PUT_LINE( "Restarting Test_task 3" );
163         RTEMS.TASKS.RESTART( MPTEST.TASK_ID( 3 ), 1, STATUS );
164         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF 3" );
165
166      end if;
167
168      TEST_SUPPORT.ADA_TEST_END;
169
170      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
171
172   end INIT;
173
174--
175--  TEST_TASK_1
176--
177
178   procedure TEST_TASK_1 (
179      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
180   ) is
181      COUNT               : RTEMS.UNSIGNED32;
182      RECEIVE_BUFFER_AREA : RTEMS.BUFFER;
183      RECEIVE_BUFFER      : RTEMS.BUFFER_POINTER;
184      STATUS              : RTEMS.STATUS_CODES;
185   begin
186
187      RECEIVE_BUFFER :=
188         RTEMS.TO_BUFFER_POINTER( RECEIVE_BUFFER_AREA'ADDRESS );
189
190      TEXT_IO.PUT_LINE( "Getting QID of message queue" );
191
192      loop
193
194         RTEMS.MESSAGE_QUEUE.IDENT(
195            MPTEST.QUEUE_NAME( 1 ),
196            RTEMS.SEARCH_ALL_NODES,
197            MPTEST.QUEUE_ID( 1 ),
198            STATUS
199         );
200
201         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
202
203      end loop;
204
205      TEXT_IO.PUT_LINE( "Attempting to receive message ..." );
206      RTEMS.MESSAGE_QUEUE.RECEIVE(
207         MPTEST.QUEUE_ID( 1 ),
208         RECEIVE_BUFFER,
209         RTEMS.DEFAULT_OPTIONS,
210         RTEMS.NO_TIMEOUT,
211         STATUS
212      );
213      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
214
215   end TEST_TASK_1;
216
217--
218--  TEST_TASK_2
219--
220 
221   procedure TEST_TASK_2 (
222      ARGUMENT : in     RTEMS.TASKS.ARGUMENT
223   ) is
224      STATUS : RTEMS.STATUS_CODES;
225   begin
226 
227      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
228
229      loop
230
231         RTEMS.SEMAPHORE.IDENT(
232            MPTEST.SEMAPHORE_NAME( 1 ),
233            RTEMS.SEARCH_ALL_NODES,
234            MPTEST.SEMAPHORE_ID( 1 ),
235            STATUS
236         );
237 
238         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
239
240      end loop;
241
242      TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
243      RTEMS.SEMAPHORE.OBTAIN(
244         MPTEST.SEMAPHORE_ID( 1 ),
245         RTEMS.DEFAULT_OPTIONS,
246         RTEMS.NO_TIMEOUT,
247         STATUS
248      );
249      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
250 
251   end TEST_TASK_2;
252
253--
254--  TEST_TASK_3
255--
256 
257   procedure TEST_TASK_3 (
258      RESTART : in     RTEMS.TASKS.ARGUMENT
259   ) is
260      STATUS : RTEMS.STATUS_CODES;
261   begin
262
263      if RESTART = 1 then
264
265         RTEMS.TASKS.DELETE( RTEMS.SELF, STATUS );
266         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
267
268      end if;
269
270      TEXT_IO.PUT_LINE( "Getting SMID of semaphore" );
271
272      loop
273
274         RTEMS.SEMAPHORE.IDENT(
275            MPTEST.SEMAPHORE_NAME( 1 ),
276            RTEMS.SEARCH_ALL_NODES,
277            MPTEST.SEMAPHORE_ID( 1 ),
278            STATUS   
279         );
280
281         exit when RTEMS.IS_STATUS_SUCCESSFUL( STATUS );
282
283      end loop;
284
285      TEXT_IO.PUT_LINE( "Attempting to acquire semaphore ..." );
286      RTEMS.SEMAPHORE.OBTAIN(
287         MPTEST.SEMAPHORE_ID( 1 ),
288         RTEMS.DEFAULT_OPTIONS,
289         RTEMS.NO_TIMEOUT,
290         STATUS 
291      ); 
292      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
293 
294   end TEST_TASK_3;
295 
296end MPTEST;
Note: See TracBrowser for help on using the repository browser.