ReactOS  0.4.13-dev-52-g0efcfec
qmgr.c
Go to the documentation of this file.
1 /*
2  * Unit test suite for bits functions
3  *
4  * Copyright 2007 Google (Roy Shea)
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include <stdio.h>
22 
23 #define COBJMACROS
24 
25 #include "wine/test.h"
26 #include "bits.h"
27 
29 
31 {
32  HRESULT hres;
33  IBackgroundCopyManager *manager = NULL;
34 
35  /* Creating BITS instance */
36  hres = CoCreateInstance(&CLSID_BackgroundCopyManager, NULL, CLSCTX_LOCAL_SERVER,
37  &IID_IBackgroundCopyManager, (void **) &manager);
38 
40  win_skip("Needed Service is disabled\n");
41  return hres;
42  }
43 
44  if (hres == S_OK)
45  IBackgroundCopyManager_Release(manager);
46 
47  return hres;
48 }
49 
50 static void test_CreateJob(void)
51 {
52  /* Job information */
53  static const WCHAR copyNameW[] = {'T', 'e', 's', 't', 0};
55  GUID tmpId;
56  HRESULT hres;
57  ULONG res;
58  IBackgroundCopyManager* manager = NULL;
59 
60  /* Setup */
61  hres = CoCreateInstance(&CLSID_BackgroundCopyManager, NULL,
62  CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
63  (void **) &manager);
64  ok(hres == S_OK, "got 0x%08x\n", hres);
65 
66  /* Create bits job */
67  hres = IBackgroundCopyManager_CreateJob(manager, copyNameW,
68  BG_JOB_TYPE_DOWNLOAD, &tmpId,
69  &job);
70  ok(hres == S_OK, "CreateJob failed: %08x\n", hres);
71 
72  res = IBackgroundCopyJob_Release(job);
73  ok(res == 0, "Bad ref count on release: %u\n", res);
74  IBackgroundCopyManager_Release(manager);
75 }
76 
77 static void test_EnumJobs(void)
78 {
79  /* Job Enumerator */
80  IEnumBackgroundCopyJobs* enumJobs;
81 
82  static const WCHAR copyNameW[] = {'T', 'e', 's', 't', 0};
83  IBackgroundCopyManager *manager = NULL;
85  HRESULT hres;
86  GUID tmpId;
87 
88  /* Setup */
89  hres = CoCreateInstance(&CLSID_BackgroundCopyManager, NULL,
90  CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
91  (void **) &manager);
92  ok(hres == S_OK, "got 0x%08x\n", hres);
93 
94  hres = IBackgroundCopyManager_CreateJob(manager, copyNameW,
95  BG_JOB_TYPE_DOWNLOAD, &tmpId,
96  &job);
97  ok(hres == S_OK, "got 0x%08x\n", hres);
98 
99  hres = IBackgroundCopyManager_EnumJobs(manager, 0, &enumJobs);
100  ok(hres == S_OK, "EnumJobs failed: %08x\n", hres);
101  IEnumBackgroundCopyJobs_Release(enumJobs);
102 
103  /* Tear down */
104  IBackgroundCopyJob_Release(job);
105  IBackgroundCopyManager_Release(manager);
106 }
107 
108 static void run_child(WCHAR *secret)
109 {
110  static const WCHAR format[] = {'%','s',' ','q','m','g','r',' ','%','s', 0};
114 
115  memset(&startup, 0, sizeof startup);
116  startup.cb = sizeof startup;
117 
119  ok(CreateProcessW(NULL, cmdline, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess\n");
121  ok(CloseHandle(info.hProcess), "CloseHandle\n");
122  ok(CloseHandle(info.hThread), "CloseHandle\n");
123 }
124 
125 static void do_child(const char *secretA)
126 {
127  WCHAR secretW[MAX_PATH];
128  IBackgroundCopyManager *manager = NULL;
129  GUID id;
131  HRESULT hres;
132  hres = CoCreateInstance(&CLSID_BackgroundCopyManager, NULL,
133  CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
134  (void **) &manager);
135  ok(hres == S_OK, "got 0x%08x\n", hres);
136 
137  MultiByteToWideChar(CP_ACP, 0, secretA, -1, secretW, MAX_PATH);
138  hres = IBackgroundCopyManager_CreateJob(manager, secretW,
139  BG_JOB_TYPE_DOWNLOAD, &id, &job);
140  ok(hres == S_OK, "CreateJob in child process\n");
141  IBackgroundCopyJob_Release(job);
142  IBackgroundCopyManager_Release(manager);
143 }
144 
145 static void test_globalness(void)
146 {
147  static const WCHAR format[] = {'t','e','s','t','_','%','u', 0};
148  WCHAR secretName[MAX_PATH];
149  IEnumBackgroundCopyJobs* enumJobs;
150  IBackgroundCopyManager *manager = NULL;
151  HRESULT hres;
152  hres = CoCreateInstance(&CLSID_BackgroundCopyManager, NULL,
153  CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
154  (void **) &manager);
155  ok(hres == S_OK, "got 0x%08x\n", hres);
156 
157  wsprintfW(secretName, format, GetTickCount());
158  run_child(secretName);
159 
160  hres = IBackgroundCopyManager_EnumJobs(manager, 0, &enumJobs);
161  ok(hres == S_OK, "EnumJobs failed: %08x\n", hres);
162  if(hres != S_OK)
163  skip("Unable to create job enumerator.\n");
164  else
165  {
166  ULONG i, n;
168  BOOL found = FALSE;
169 
170  hres = IEnumBackgroundCopyJobs_GetCount(enumJobs, &n);
171  ok(hres == S_OK, "GetCount failed: %08x\n", hres);
172  for (i = 0; i < n && !found; ++i)
173  {
174  LPWSTR name;
175  IEnumBackgroundCopyJobs_Next(enumJobs, 1, &job, NULL);
176  IBackgroundCopyJob_GetDisplayName(job, &name);
177  if (lstrcmpW(name, secretName) == 0)
178  found = TRUE;
180  IBackgroundCopyJob_Release(job);
181  }
182 
183  IEnumBackgroundCopyJobs_Release(enumJobs);
184  ok(found, "Adding a job in another process failed\n");
185  }
186 
187  IBackgroundCopyManager_Release(manager);
188 }
189 
191 {
192  char **argv;
195 
197 
199  {
200  win_skip("Failed to create Manager instance, skipping tests\n");
201  CoUninitialize();
202  return;
203  }
204 
205  if (argc == 3)
206  do_child(argv[2]);
207  else
208  {
209  test_CreateJob();
210  test_EnumJobs();
211  test_globalness();
212  }
213  CoUninitialize();
214 }
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
static HANDLE job
Definition: process.c:77
static int argc
Definition: ServiceArgs.c:12
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:398
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:422
#define ERROR_SERVICE_DISABLED
Definition: winerror.h:609
#define CP_ACP
Definition: compat.h:99
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
static WCHAR progname[MAX_PATH]
Definition: qmgr.c:28
static void do_child(const char *secretA)
Definition: qmgr.c:125
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:445
GLdouble n
Definition: glext.h:7729
int startup(int argc, const char *argv[])
Definition: startup.c:430
TCHAR * cmdline
Definition: stretchblt.cpp:32
#define argv
Definition: mplay32.c:18
static void test_globalness(void)
Definition: qmgr.c:145
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
struct _test_info info[]
Definition: SetCursorPos.c:19
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int BOOL
Definition: ntddk_ex.h:94
#define ok(value,...)
static void run_child(WCHAR *secret)
Definition: qmgr.c:108
smooth NULL
Definition: ftsmooth.c:416
BOOL WINAPI DECLSPEC_HOTPATCH CreateProcessW(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
Definition: proc.c:4623
HRESULT hres
Definition: protocol.c:465
static void test_EnumJobs(void)
Definition: qmgr.c:77
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
#define MAX_PATH
Definition: compat.h:26
START_TEST(qmgr)
Definition: qmgr.c:190
int winetest_get_mainargs(char ***pargv)
static UCHAR * secret
Definition: bcrypt.c:29
static const WCHAR L[]
Definition: oid.c:1250
void winetest_wait_child_process(HANDLE process)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3234
static void test_CreateJob(void)
Definition: qmgr.c:50
#define S_OK
Definition: intsafe.h:59
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:1991
#define MultiByteToWideChar
Definition: compat.h:100
#define skip(...)
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1897
Definition: name.c:36
GLuint res
Definition: glext.h:9613
unsigned int ULONG
Definition: retypes.h:1
GLenum GLuint id
Definition: glext.h:5579
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define memset(x, y, z)
Definition: compat.h:39
#define win_skip
Definition: test.h:141
static HRESULT test_create_manager(void)
Definition: qmgr.c:30
GLuint const GLchar * name
Definition: glext.h:6031