67 *
ppv = &
This->IBackgroundCopyCallback2_iface;
83 trace(
"IBackgroundCopyCallback2Impl_AddRef called (%p, ref = %ld)\n",
This,
ref);
92 trace(
"IBackgroundCopyCallback2Impl_Release called (%p, ref = %ld)\n",
This,
ref);
104 trace(
"IBackgroundCopyCallback2Impl_JobError called (%p, %p, %p)\n", iface, pJob, pError);
110 trace(
"IBackgroundCopyCallback2Impl_JobModification called (%p, %p)\n", iface, pJob);
116 trace(
"IBackgroundCopyCallback2Impl_JobTransferred called (%p, %p)\n", iface, pJob);
122 trace(
"IBackgroundCopyCallback2Impl_FileTransferred called (%p, %p, %p)\n", iface, pJob,
pFile);
141 *copyCallback =
NULL;
147 trace(
"Out of memory creating IBackgroundCopyCallback2\n");
154 *copyCallback = &
obj->IBackgroundCopyCallback2_iface;
166 &IID_IBackgroundCopyManager, (
void **) &manager);
169 win_skip(
"Needed Service is disabled\n");
174 IBackgroundCopyManager_Release(manager);
197 BITS_JOB_PROPERTY_VALUE prop_val;
206 &IID_IBackgroundCopyManager,
227 prop_val.Dword = BITS_COST_STATE_TRANSFER_ALWAYS;
228 hres = IBackgroundCopyJob_QueryInterface(
test_job, &IID_IBackgroundCopyJob5, (
void **)&test_job_5);
232 hres = IBackgroundCopyJob5_SetProperty(test_job_5, BITS_JOB_PROPERTY_ID_COST_FLAGS, prop_val);
234 IBackgroundCopyJob5_Release(test_job_5);
243 IBackgroundCopyJob_Cancel(
test_job);
244 IBackgroundCopyJob_Release(
test_job);
255 CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
262 IBackgroundCopyManager_Release(manager);
266 hres = IBackgroundCopyJob_QueryInterface(
job, &IID_IBackgroundCopyJob3, (
void **)&job3);
267 IBackgroundCopyJob_Cancel(
job);
268 IBackgroundCopyJob_Release(
job);
271 IBackgroundCopyManager_Release(manager);
275 IBackgroundCopyJob_Release(job3);
276 IBackgroundCopyManager_Release(manager);
288 CLSCTX_LOCAL_SERVER, &IID_IBackgroundCopyManager,
295 IBackgroundCopyManager_Release(manager);
299 hres = IBackgroundCopyJob_QueryInterface(
job, &IID_IBackgroundCopyJobHttpOptions, (
void **)&
options);
300 IBackgroundCopyJob_Cancel(
job);
301 IBackgroundCopyJob_Release(
job);
304 IBackgroundCopyManager_Release(manager);
308 IBackgroundCopyJobHttpOptions_Release(
options);
309 IBackgroundCopyManager_Release(manager);
354 ok(
hres ==
S_OK,
"First call to AddFile failed: 0x%08lx\n",
hres);
358 ok(
hres ==
S_OK,
"Second call to AddFile failed: 0x%08lx\n",
hres);
365 BG_FILE_INFO files[2] =
370 hres = IBackgroundCopyJob_AddFileSet(
test_job, 2, files);
385 hres = IBackgroundCopyJob_EnumFiles(
test_job, &enumFiles);
388 res = IEnumBackgroundCopyFiles_Release(enumFiles);
389 ok(
res == 0,
"Bad ref count on release: %lu\n",
res);
401 ok(
progress.BytesTotal == 0,
"Incorrect BytesTotal: %s\n",
403 ok(
progress.BytesTransferred == 0,
"Incorrect BytesTransferred: %s\n",
406 ok(
progress.FilesTransferred == 0,
"Incorrect FilesTransferred %lu\n",
progress.FilesTransferred);
415 state = BG_JOB_STATE_ERROR;
418 ok(
state == BG_JOB_STATE_SUSPENDED,
"Incorrect job state: %d\n",
state);
430 state = BG_JOB_STATE_ERROR;
433 ok(
state == BG_JOB_STATE_SUSPENDED,
"Incorrect job state: %d\n",
state);
471 ok(
s1 ==
s2,
"Files differ in length\n");
480 BG_ERROR_CONTEXT errContext;
487 hres = IBackgroundCopyError_GetError(
err, &errContext, &errCode);
489 ok(0,
"Got context: %d code: %ld\n", errContext, errCode);
491 ok(0,
"Failed to get error info: 0x%08lx\n",
hres);
498 ok(0,
"Failed to get context desc: 0x%08lx\n",
hres);
505 ok(0,
"Failed to get error desc: 0x%08lx\n",
hres);
508 ok(0,
"Failed to get error: 0x%08lx\n",
hres);
515 static const int timeout_sec = 30;
534 ok(
hres ==
S_OK,
"IBackgroundCopyJob_Resume\n");
536 for (
i = 0;
i < timeout_sec; ++
i)
539 ok(
hres ==
S_OK,
"IBackgroundCopyJob_GetState\n");
540 ok(
state == BG_JOB_STATE_QUEUED ||
state == BG_JOB_STATE_CONNECTING
541 ||
state == BG_JOB_STATE_TRANSFERRING ||
state == BG_JOB_STATE_TRANSFERRED
542 ||
state == BG_JOB_STATE_TRANSIENT_ERROR,
543 "Bad state: %d\n",
state);
545 if (
state == BG_JOB_STATE_TRANSIENT_ERROR) {
547 ok(
hres ==
S_OK,
"IBackgroundCopyJob_Resume\n");
550 if (
state == BG_JOB_STATE_TRANSFERRED)
555 if (
state == BG_JOB_STATE_ERROR ||
state == BG_JOB_STATE_TRANSIENT_ERROR)
558 ok(
i < timeout_sec,
"BITS jobs timed out\n");
560 ok(
hres ==
S_OK,
"IBackgroundCopyJob_Complete\n");
562 ok(
hres ==
S_OK,
"IBackgroundCopyJob_GetState\n");
563 ok(
state == BG_JOB_STATE_ACKNOWLEDGED,
"Bad state: %d\n",
state);
577 static const int timeout_sec = 30;
594 skip(
"Unable to allocate memory for URLs\n");
612 ok(
hres ==
S_OK,
"IBackgroundCopyJob_Resume\n");
614 for (
i = 0;
i < timeout_sec; ++
i)
617 ok(
hres ==
S_OK,
"IBackgroundCopyJob_GetState\n");
618 ok(
state == BG_JOB_STATE_QUEUED ||
state == BG_JOB_STATE_CONNECTING
619 ||
state == BG_JOB_STATE_TRANSFERRING ||
state == BG_JOB_STATE_TRANSFERRED
620 ||
state == BG_JOB_STATE_TRANSIENT_ERROR,
621 "Bad state: %d\n",
state);
623 if (
state == BG_JOB_STATE_TRANSIENT_ERROR) {
625 ok(
hres ==
S_OK,
"IBackgroundCopyJob_Resume\n");
628 if (
state == BG_JOB_STATE_TRANSFERRED)
633 if (
state == BG_JOB_STATE_ERROR ||
state == BG_JOB_STATE_TRANSIENT_ERROR)
637 ok(
i < timeout_sec,
"BITS jobs timed out\n");
639 ok(
hres ==
S_OK,
"IBackgroundCopyJob_Complete\n");
641 ok(
hres ==
S_OK,
"IBackgroundCopyJob_GetState\n");
642 ok(
state == BG_JOB_STATE_ACKNOWLEDGED,
"Bad state: %d\n",
state);
665 ok(
flags == (BG_NOTIFY_JOB_ERROR | BG_NOTIFY_JOB_TRANSFERRED),
"flags 0x%08lx\n",
flags);
674 hr = IBackgroundCopyJob_GetNotifyInterface(
test_job, &unk);
676 ok(unk ==
NULL,
"got %p\n", unk);
684 state = BG_JOB_STATE_ERROR;
692 state = BG_JOB_STATE_ERROR;
704 static const unsigned int timeout = 30;
717 hr = IBackgroundCopyCallback2_QueryInterface(copyCallback, &
IID_IUnknown, (
LPVOID*)©CallbackUnknown);
718 ok(
hr ==
S_OK,
"IBackgroundCopyCallback_QueryInterface(IID_IUnknown) failed: %08lx\n",
hr);
720 hr = IBackgroundCopyJob_SetNotifyInterface(
test_job, copyCallbackUnknown);
721 ok(
hr ==
S_OK,
"IBackgroundCopyCallback_SetNotifyInterface failed: %08lx\n",
hr);
723 hr = IBackgroundCopyJob_SetNotifyFlags(
test_job, BG_NOTIFY_JOB_TRANSFERRED | BG_NOTIFY_JOB_ERROR | BG_NOTIFY_DISABLE | BG_NOTIFY_JOB_MODIFICATION | BG_NOTIFY_FILE_TRANSFERRED);
724 ok(
hr ==
S_OK,
"IBackgroundCopyCallback_SetNotifyFlags failed: %08lx\n",
hr);
731 hr = IBackgroundCopyJob_QueryInterface(
test_job, &IID_IBackgroundCopyJobHttpOptions, (
void **)&
options);
753 hr = IBackgroundCopyJobHttpOptions_SetCustomHeaders(
options,
NULL);
761 orig_flags = 0xdeadbeef;
762 hr = IBackgroundCopyJobHttpOptions_GetSecurityFlags(
options, &orig_flags);
764 ok(!orig_flags,
"got 0x%08lx\n", orig_flags);
766 hr = IBackgroundCopyJobHttpOptions_SetSecurityFlags(
options, 0);
770 hr = IBackgroundCopyJobHttpOptions_GetSecurityFlags(
options, &
flags);
783 ok(
state == BG_JOB_STATE_QUEUED ||
784 state == BG_JOB_STATE_CONNECTING ||
785 state == BG_JOB_STATE_TRANSFERRING ||
786 state == BG_JOB_STATE_TRANSFERRED ||
787 state == BG_JOB_STATE_TRANSIENT_ERROR,
"unexpected state: %u\n",
state);
789 if (
state == BG_JOB_STATE_TRANSIENT_ERROR) {
791 ok(
hr ==
S_OK,
"IBackgroundCopyJob_Resume\n");
794 if (
state == BG_JOB_STATE_TRANSFERRED)
break;
798 if (
state == BG_JOB_STATE_ERROR ||
state == BG_JOB_STATE_TRANSIENT_ERROR)
816 hr = IBackgroundCopyJobHttpOptions_SetCustomHeaders(
options,
NULL);
823 hr = IBackgroundCopyJobHttpOptions_GetSecurityFlags(
options, &
flags);
827 hr = IBackgroundCopyJobHttpOptions_SetSecurityFlags(
options, orig_flags);
830 IBackgroundCopyJobHttpOptions_Release(
options);
838 ok(
state == BG_JOB_STATE_ACKNOWLEDGED,
"unexpected state: %u\n",
state);
848 IUnknown_Release(copyCallbackUnknown);
849 IBackgroundCopyCallback2_Release(copyCallback);
867 static const test_t tests_bits20[] = {
876 static const test_t tests_bits25[] = {
891 ok(0,
"CoInitializeEx failed: %0lx\n",
hres);
900 ok(0,
"CoInitializeSecurity failed: %0lx\n",
hres);
907 win_skip(
"Failed to create Manager instance, skipping tests\n");
916 ok(0,
"tests:%d: Unable to setup test\n",
i);
930 ok(0,
"tests_bits20:%d: Unable to setup test\n",
i);
939 win_skip(
"Tests need BITS 2.0 or higher\n");
949 ok(0,
"tests_bits25:%d: Unable to setup test\n",
i);
958 win_skip(
"Tests need BITS 2.5 or higher\n");
#define InterlockedIncrement
#define InterlockedDecrement
#define BG_E_ERROR_INFORMATION_UNAVAILABLE
#define BG_E_INVALID_STATE
HRESULT WINAPI CoInitializeSecurity(PSECURITY_DESCRIPTOR sd, LONG cAuthSvc, SOLE_AUTHENTICATION_SERVICE *asAuthSvc, void *reserved1, DWORD authn_level, DWORD imp_level, void *reserved2, DWORD capabilities, void *reserved3)
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void WINAPI CoTaskMemFree(void *ptr)
#define ReadFile(a, b, c, d, e)
#define INVALID_HANDLE_VALUE
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define HeapFree(x, y, z)
#define FILE_ATTRIBUTE_NORMAL
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
UINT WINAPI GetTempFileNameW(IN LPCWSTR lpPathName, IN LPCWSTR lpPrefixString, IN UINT uUnique, OUT LPWSTR lpTempFileName)
GLuint GLuint GLsizei GLenum type
GLubyte GLubyte GLubyte GLubyte w
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
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
static struct test_info tests[]
static CRYPT_DATA_BLOB b2[]
static CRYPT_DATA_BLOB b1[]
static void test_AddFile(void)
static BOOL check_bits20(void)
static HRESULT WINAPI IBackgroundCopyCallback2Impl_JobError(IBackgroundCopyCallback2 *iface, IBackgroundCopyJob *pJob, IBackgroundCopyError *pError)
static void test_GetProgress_preTransfer(void)
static void init_paths(void)
static void test_NotifyInterface(void)
static WCHAR test_localPathA[MAX_PATH]
static void test_GetName(void)
static void teardown(void)
static ULONG WINAPI IBackgroundCopyCallback2Impl_Release(IBackgroundCopyCallback2 *iface)
static void test_CompleteLocal(void)
static HRESULT WINAPI IBackgroundCopyCallback2Impl_JobModification(IBackgroundCopyCallback2 *iface, IBackgroundCopyJob *pJob, DWORD dwReserved)
static WCHAR test_localPathB[MAX_PATH]
static HRESULT WINAPI IBackgroundCopyCallback2Impl_JobTransferred(IBackgroundCopyCallback2 *iface, IBackgroundCopyJob *pJob)
static IBackgroundCopyCallback2Impl * impl_from_IBackgroundCopyCallback2(IBackgroundCopyCallback2 *iface)
static void test_EnumFiles(void)
static void test_ResumeEmpty(void)
static void test_NotifyFlags(void)
static void test_GetState(void)
static WCHAR test_remotePathA[MAX_PATH]
static HRESULT WINAPI IBackgroundCopyCallback2Impl_QueryInterface(IBackgroundCopyCallback2 *iface, REFIID riid, void **ppv)
static void test_HttpOptions(void)
static void test_AddFileSet(void)
static void handle_job_err(void)
static WCHAR test_remotePathB[MAX_PATH]
static void makeFile(WCHAR *name, const char *contents)
static BOOL create_background_copy_callback2(IBackgroundCopyCallback2 **copyCallback)
static void test_GetId(void)
static void test_CompleteLocalURL(void)
static void compareFiles(WCHAR *n1, WCHAR *n2)
static HRESULT WINAPI IBackgroundCopyCallback2Impl_FileTransferred(IBackgroundCopyCallback2 *iface, IBackgroundCopyJob *pJob, IBackgroundCopyFile *pFile)
static BG_JOB_TYPE test_type
static void test_Cancel(void)
static IBackgroundCopyJob * test_job
static BOOL check_bits25(void)
static void test_GetType(void)
static IBackgroundCopyManager * test_manager
static const IBackgroundCopyCallback2Vtbl copyCallback_vtbl
static HRESULT test_create_manager(void)
static ULONG WINAPI IBackgroundCopyCallback2Impl_AddRef(IBackgroundCopyCallback2 *iface)
static const char * contents
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
@ COINIT_APARTMENTTHREADED
#define IsEqualIID(riid1, riid2)
#define RPC_C_IMP_LEVEL_IMPERSONATE
#define RPC_C_AUTHN_LEVEL_CONNECT
#define SUBLANG_ENGLISH_US
vector< Header * > headers
static const WCHAR winetestW[]
IBackgroundCopyCallback2 IBackgroundCopyCallback2_iface
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Character const *const prefix
#define CONTAINING_RECORD(address, type, field)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
#define ERROR_SERVICE_DISABLED