1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5/*=============================================================================
6**
7** Source: test2.c
8**
9** Purpose: Positive test for OpenEventW.
10**
11** Dependencies: PAL_Initialize
12** PAL_Terminate
13** CreateEvent
14** CloseHandle
15** WaitForSingleObject
16**
17** Purpose:
18**
19** Test to ensure proper operation of the OpenEventW()
20** API by creating a new named event and verifying that
21** it can be used interchangeably by setting the event
22** with the original handle and waiting on it with the
23** new one, then resetting it with the new one and waiting
24** on it with the original one.
25**
26**
27**===========================================================================*/
28#include <palsuite.h>
29
30
31
32int __cdecl main( int argc, char **argv )
33
34{
35 /* local variables */
36 BOOL ret = FAIL;
37 DWORD dwRet = 0;
38 HANDLE hEvent = NULL;
39 HANDLE hTestEvent = NULL;
40 LPSECURITY_ATTRIBUTES lpEventAttributes = NULL;
41 BOOL bManualReset = TRUE;
42 BOOL bInitialState = FALSE;
43 WCHAR wcName[] = {'W','o','o','B','a','b','y','\0'};
44 LPWSTR lpName = wcName;
45
46
47 /* PAL initialization */
48 if( (PAL_Initialize(argc, argv)) != 0 )
49 {
50 return( FAIL );
51 }
52
53
54 /* create an event which we can use with SetEvent */
55 hEvent = CreateEventW( lpEventAttributes,
56 bManualReset,
57 bInitialState,
58 lpName );
59
60 if( hEvent == NULL )
61 {
62 /* ERROR */
63 Fail( "ERROR:%lu:CreateEvent() call failed\n", GetLastError() );
64 }
65
66 /* open a new handle to our event */
67 hTestEvent = OpenEventW(EVENT_ALL_ACCESS, /* we want all rights */
68 FALSE, /* no inherit */
69 lpName );
70
71 if( hTestEvent == NULL )
72 {
73 /* ERROR */
74 Trace( "ERROR:%lu:OpenEventW() call failed\n", GetLastError() );
75 goto cleanup;
76 }
77
78 /* verify that the event isn't signalled yet by waiting on both */
79 /* handles to the event object */
80 dwRet = WaitForSingleObject( hEvent, 0 );
81 if( dwRet != WAIT_TIMEOUT )
82 {
83 /* ERROR */
84 Trace( "ERROR:WaitForSingleObject() call returned %lu, "
85 "expected WAIT_TIMEOUT\n",
86 dwRet );
87 goto cleanup;
88 }
89
90 dwRet = WaitForSingleObject( hTestEvent, 0 );
91 if( dwRet != WAIT_TIMEOUT )
92 {
93 /* ERROR */
94 Trace( "ERROR:WaitForSingleObject() call returned %lu, "
95 "expected WAIT_TIMEOUT\n",
96 dwRet );
97 goto cleanup;
98 }
99
100
101 /* set the event using the original handle */
102 if( ! SetEvent( hEvent ) )
103 {
104 /* ERROR */
105 Trace( "ERROR:%lu:SetEvent() call failed\n", GetLastError() );
106 goto cleanup;
107 }
108
109 /* verify that the event is signalled by waiting on both handles */
110 dwRet = WaitForSingleObject( hEvent, 0 );
111 if( dwRet != WAIT_OBJECT_0 )
112 {
113 /* ERROR */
114 Trace( "ERROR:WaitForSingleObject() call returned %lu, "
115 "expected WAIT_OBJECT_0\n",
116 dwRet );
117 goto cleanup;
118 }
119
120 dwRet = WaitForSingleObject( hTestEvent, 0 );
121 if( dwRet != WAIT_OBJECT_0 )
122 {
123 /* ERROR */
124 Trace( "ERROR:WaitForSingleObject() call returned %lu, "
125 "expected WAIT_OBJECT_0\n",
126 dwRet );
127 goto cleanup;
128 }
129
130 /* reset the event using the new handle */
131 if( ! ResetEvent( hTestEvent ) )
132 {
133 /* ERROR */
134 Trace( "ERROR:%lu:ResetEvent() call failed\n", GetLastError() );
135 goto cleanup;
136 }
137
138 /* verify that the event isn't signalled by waiting on both handles */
139 dwRet = WaitForSingleObject( hEvent, 0 );
140 if( dwRet != WAIT_TIMEOUT )
141 {
142 /* ERROR */
143 Trace( "ERROR:WaitForSingleObject() call returned %lu, "
144 "expected WAIT_TIMEOUT\n",
145 dwRet );
146 goto cleanup;
147 }
148
149 dwRet = WaitForSingleObject( hTestEvent, 0 );
150 if( dwRet != WAIT_TIMEOUT )
151 {
152 /* ERROR */
153 Trace( "ERROR:WaitForSingleObject() call returned %lu, "
154 "expected WAIT_TIMEOUT\n",
155 dwRet );
156 goto cleanup;
157 }
158
159
160 /* test was successful */
161 ret = PASS;
162
163
164cleanup:
165 /* close the new event handle */
166 if( hTestEvent != NULL )
167 {
168 if( ! CloseHandle( hTestEvent ) )
169 {
170 ret = FAIL;
171 Trace( "ERROR:%lu:CloseHandle() call failed\n", GetLastError() );
172 }
173 }
174
175 /* close the original event handle */
176 if( ! CloseHandle( hEvent ) )
177 {
178 ret = FAIL;
179 Trace( "ERROR:%lu:CloseHandle() call failed\n", GetLastError() );
180 }
181
182 /* failure message */
183 if( ret != PASS )
184 {
185 Fail( "Test failed\n" );
186 }
187
188
189 /* PAL termination */
190 PAL_Terminate();
191
192 /* return success or failure */
193 return ret;
194}
195