Status DatabasePlugin::call(const PluginRequest& request, PluginResponse& response) { if (request.count("action") == 0) { return Status(1, "Database plugin must include a request action"); } // Get a domain/key, which are used for most database plugin actions. auto domain = (request.count("domain") > 0) ? request.at("domain") : ""; auto key = (request.count("key") > 0) ? request.at("key") : ""; if (request.at("action") == "reset") { WriteLock lock(kDatabaseReset); DatabasePlugin::kDBInitialized = false; // Prevent RocksDB reentrancy by logger plugins during plugin setup. VLOG(1) << "Resetting the database plugin: " << getName(); auto status = this->reset(); if (!status.ok()) { // The active database could not be reset, fallback to an ephemeral. Registry::get().setActive("database", "ephemeral"); LOG(WARNING) << "Unable to reset database plugin: " << getName(); } DatabasePlugin::kDBInitialized = true; return status; } // Switch over the possible database plugin actions. ReadLock lock(kDatabaseReset); if (request.at("action") == "get") { std::string value; auto status = this->get(domain, key, value); response.push_back({{"v", value}}); return status; } else if (request.at("action") == "put") { if (request.count("value") == 0) { return Status(1, "Database plugin put action requires a value"); } return this->put(domain, key, request.at("value")); } else if (request.at("action") == "remove") { return this->remove(domain, key); } else if (request.at("action") == "remove_range") { auto key_high = (request.count("high") > 0) ? request.at("key_high") : ""; if (!key_high.empty() && !key.empty()) { return this->removeRange(domain, key, key_high); } return Status(1, "Missing range"); } else if (request.at("action") == "scan") { // Accumulate scanned keys into a vector. std::vector<std::string> keys; // Optionally allow the caller to request a max number of keys. size_t max = 0; if (request.count("max") > 0) { max = std::stoul(request.at("max")); } auto status = this->scan(domain, keys, request.at("prefix"), max); for (const auto& k : keys) { response.push_back({{"k", k}}); } return status; } return Status(1, "Unknown database plugin action"); }
static void test_setpos(void) { APPBARDATA abd; RECT rc; int screen_width, screen_height; BOOL ret; screen_width = GetSystemMetrics(SM_CXSCREEN); screen_height = GetSystemMetrics(SM_CYSCREEN); /* create and register windows[0] */ windows[0].hwnd = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST, testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, NULL, NULL, NULL, NULL); ok(windows[0].hwnd != NULL, "couldn't create window\n"); do_events(); abd.cbSize = sizeof(abd); abd.hWnd = windows[0].hwnd; abd.uCallbackMessage = MSG_APPBAR; ret = SHAppBarMessage(ABM_NEW, &abd); ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret); /* ABM_NEW should return FALSE if the window is already registered */ ret = SHAppBarMessage(ABM_NEW, &abd); ok(ret == FALSE, "SHAppBarMessage returned %i\n", ret); do_events(); /* dock windows[0] to the bottom of the screen */ windows[0].registered = TRUE; windows[0].edge = ABE_BOTTOM; windows[0].desired_rect.left = 0; windows[0].desired_rect.right = screen_width; windows[0].desired_rect.top = screen_height - 15; windows[0].desired_rect.bottom = screen_height; SetWindowLongPtr(windows[0].hwnd, GWLP_USERDATA, (LONG_PTR)&windows[0]); testwindow_setpos(windows[0].hwnd); do_events(); /* create and register windows[1] */ windows[1].hwnd = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST, testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, NULL, NULL, NULL, NULL); ok(windows[1].hwnd != NULL, "couldn't create window\n"); abd.hWnd = windows[1].hwnd; ret = SHAppBarMessage(ABM_NEW, &abd); ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret); /* dock windows[1] to the bottom of the screen */ windows[1].registered = TRUE; windows[1].edge = ABE_BOTTOM; windows[1].desired_rect.left = 0; windows[1].desired_rect.right = screen_width; windows[1].desired_rect.top = screen_height - 10; windows[1].desired_rect.bottom = screen_height; SetWindowLongPtr(windows[1].hwnd, GWLP_USERDATA, (LONG_PTR)&windows[1]); testwindow_setpos(windows[1].hwnd); /* the windows are adjusted to they don't overlap */ do_events_until(no_appbars_intersect); test_window_rects(0, 1); /* make windows[0] larger, forcing windows[1] to move out of its way */ windows[0].desired_rect.top = screen_height - 20; testwindow_setpos(windows[0].hwnd); do_events_until(no_appbars_intersect); test_window_rects(0, 1); /* create and register windows[2] */ windows[2].hwnd = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST, testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0, NULL, NULL, NULL, NULL); ok(windows[2].hwnd != NULL, "couldn't create window\n"); do_events(); abd.hWnd = windows[2].hwnd; ret = SHAppBarMessage(ABM_NEW, &abd); ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret); /* dock windows[2] to the bottom of the screen */ windows[2].registered = TRUE; windows[2].edge = ABE_BOTTOM; windows[2].desired_rect.left = 0; windows[2].desired_rect.right = screen_width; windows[2].desired_rect.top = screen_height - 10; windows[2].desired_rect.bottom = screen_height; SetWindowLongPtr(windows[2].hwnd, GWLP_USERDATA, (LONG_PTR)&windows[2]); testwindow_setpos(windows[2].hwnd); do_events_until(no_appbars_intersect); test_window_rects(0, 1); test_window_rects(0, 2); test_window_rects(1, 2); /* move windows[2] to the right side of the screen */ windows[2].edge = ABE_RIGHT; windows[2].desired_rect.left = screen_width - 15; windows[2].desired_rect.right = screen_width; windows[2].desired_rect.top = 0; windows[2].desired_rect.bottom = screen_height; testwindow_setpos(windows[2].hwnd); do_events_until(no_appbars_intersect); test_window_rects(0, 1); test_window_rects(0, 2); test_window_rects(1, 2); /* move windows[1] to the top of the screen */ windows[1].edge = ABE_TOP; windows[1].desired_rect.left = 0; windows[1].desired_rect.right = screen_width; windows[1].desired_rect.top = 0; windows[1].desired_rect.bottom = 15; testwindow_setpos(windows[1].hwnd); do_events_until(no_appbars_intersect); test_window_rects(0, 1); test_window_rects(0, 2); test_window_rects(1, 2); /* move windows[1] back to the bottom of the screen */ windows[1].edge = ABE_BOTTOM; windows[1].desired_rect.left = 0; windows[1].desired_rect.right = screen_width; windows[1].desired_rect.top = screen_height - 10; windows[1].desired_rect.bottom = screen_height; testwindow_setpos(windows[1].hwnd); do_events_until(no_appbars_intersect); test_window_rects(0, 1); test_window_rects(0, 2); test_window_rects(1, 2); /* removing windows[0] will cause windows[1] to move down into its space */ expected_bottom = max(windows[0].allocated_rect.bottom, windows[1].allocated_rect.bottom); abd.hWnd = windows[0].hwnd; ret = SHAppBarMessage(ABM_REMOVE, &abd); ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret); windows[0].registered = FALSE; DestroyWindow(windows[0].hwnd); do_events_until(got_expected_bottom); ok(windows[1].allocated_rect.bottom == expected_bottom, "windows[1]'s bottom is %i, expected %i\n", windows[1].allocated_rect.bottom, expected_bottom); test_window_rects(1, 2); /* remove the other windows */ SetWindowLongPtr(windows[1].hwnd, GWLP_USERDATA, 0); abd.hWnd = windows[1].hwnd; ret = SHAppBarMessage(ABM_REMOVE, &abd); ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret); windows[1].registered = FALSE; DestroyWindow(windows[1].hwnd); SetWindowLongPtr(windows[2].hwnd, GWLP_USERDATA, 0); abd.hWnd = windows[2].hwnd; ret = SHAppBarMessage(ABM_REMOVE, &abd); ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret); windows[2].registered = FALSE; DestroyWindow(windows[2].hwnd); }
static void test_WM_LBUTTONDOWN(void) { HWND hComboEx, hCombo, hEdit, hList; COMBOBOXINFO cbInfo; UINT x, y, item_height; LRESULT result; UINT i; int idx; RECT rect; WCHAR buffer[3]; static const UINT choices[] = {8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72}; static const WCHAR stringFormat[] = {'%','2','d','\0'}; BOOL (WINAPI *pGetComboBoxInfo)(HWND, PCOMBOBOXINFO); pGetComboBoxInfo = (void*)GetProcAddress(GetModuleHandleA("user32.dll"), "GetComboBoxInfo"); if (!pGetComboBoxInfo){ win_skip("GetComboBoxInfo is not available\n"); return; } hComboEx = CreateWindowExA(0, WC_COMBOBOXEXA, NULL, WS_VISIBLE|WS_CHILD|CBS_DROPDOWN, 0, 0, 200, 150, hComboExParentWnd, NULL, hMainHinst, NULL); for (i = 0; i < sizeof(choices)/sizeof(UINT); i++){ COMBOBOXEXITEMW cbexItem; wsprintfW(buffer, stringFormat, choices[i]); memset(&cbexItem, 0x00, sizeof(cbexItem)); cbexItem.mask = CBEIF_TEXT; cbexItem.iItem = i; cbexItem.pszText = buffer; cbexItem.cchTextMax = 0; ok(SendMessageW(hComboEx, CBEM_INSERTITEMW, 0, (LPARAM)&cbexItem) >= 0, "Failed to add item %d\n", i); } hCombo = (HWND)SendMessage(hComboEx, CBEM_GETCOMBOCONTROL, 0, 0); hEdit = (HWND)SendMessage(hComboEx, CBEM_GETEDITCONTROL, 0, 0); cbInfo.cbSize = sizeof(COMBOBOXINFO); result = pGetComboBoxInfo(hCombo, &cbInfo); ok(result, "Failed to get combobox info structure. LastError=%d\n", GetLastError()); hList = cbInfo.hwndList; trace("hWnd=%p, hComboEx=%p, hCombo=%p, hList=%p, hEdit=%p\n", hComboExParentWnd, hComboEx, hCombo, hList, hEdit); ok(GetFocus() == hComboExParentWnd, "Focus not on Main Window, instead on %p\n", GetFocus()); /* Click on the button to drop down the list */ x = cbInfo.rcButton.left + (cbInfo.rcButton.right-cbInfo.rcButton.left)/2; y = cbInfo.rcButton.top + (cbInfo.rcButton.bottom-cbInfo.rcButton.top)/2; result = SendMessage(hCombo, WM_LBUTTONDOWN, 0, MAKELPARAM(x, y)); ok(result, "WM_LBUTTONDOWN was not processed. LastError=%d\n", GetLastError()); ok(GetFocus() == hCombo || broken(GetFocus() != hCombo), /* win98 */ "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", GetFocus()); ok(SendMessage(hComboEx, CB_GETDROPPEDSTATE, 0, 0), "The dropdown list should have appeared after clicking the button.\n"); idx = SendMessage(hCombo, CB_GETTOPINDEX, 0, 0); ok(idx == 0, "For TopIndex expected %d, got %d\n", 0, idx); result = SendMessage(hCombo, WM_LBUTTONUP, 0, MAKELPARAM(x, y)); ok(result, "WM_LBUTTONUP was not processed. LastError=%d\n", GetLastError()); ok(GetFocus() == hCombo || broken(GetFocus() != hCombo), /* win98 */ "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", GetFocus()); /* Click on the 5th item in the list */ item_height = SendMessage(hCombo, CB_GETITEMHEIGHT, 0, 0); ok(GetClientRect(hList, &rect), "Failed to get list's client rect.\n"); x = rect.left + (rect.right-rect.left)/2; y = item_height/2 + item_height*4; result = SendMessage(hList, WM_MOUSEMOVE, 0, MAKELPARAM(x, y)); ok(!result, "WM_MOUSEMOVE was not processed. LastError=%d\n", GetLastError()); ok(GetFocus() == hCombo || broken(GetFocus() != hCombo), /* win98 */ "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", GetFocus()); result = SendMessage(hList, WM_LBUTTONDOWN, 0, MAKELPARAM(x, y)); ok(!result, "WM_LBUTTONDOWN was not processed. LastError=%d\n", GetLastError()); ok(GetFocus() == hCombo || broken(GetFocus() != hCombo), /* win98 */ "Focus not on ComboBoxEx's ComboBox Control, instead on %p\n", GetFocus()); ok(SendMessage(hComboEx, CB_GETDROPPEDSTATE, 0, 0), "The dropdown list should still be visible.\n"); result = SendMessage(hList, WM_LBUTTONUP, 0, MAKELPARAM(x, y)); ok(!result, "WM_LBUTTONUP was not processed. LastError=%d\n", GetLastError()); todo_wine ok(GetFocus() == hEdit || broken(GetFocus() == hCombo), /* win98 */ "Focus not on ComboBoxEx's Edit Control, instead on %p\n", GetFocus()); result = SendMessage(hCombo, CB_GETDROPPEDSTATE, 0, 0); ok(!result || broken(result != 0), /* win98 */ "The dropdown list should have been rolled up.\n"); idx = SendMessage(hComboEx, CB_GETCURSEL, 0, 0); ok(idx == 4 || broken(idx == -1), /* win98 */ "Current Selection: expected %d, got %d\n", 4, idx); ok(received_end_edit, "Expected to receive a CBEN_ENDEDIT message\n"); SetFocus( hComboExParentWnd ); ok( GetFocus() == hComboExParentWnd, "got %p\n", GetFocus() ); SetFocus( hComboEx ); ok( GetFocus() == hEdit, "got %p\n", GetFocus() ); DestroyWindow(hComboEx); }
static void test_IWbemPath_RemoveNamespaceAt(void) { static const ULONGLONG expected_flags = WBEMPATH_INFO_ANON_LOCAL_MACHINE | WBEMPATH_INFO_IS_INST_REF | WBEMPATH_INFO_HAS_SUBSCOPES | WBEMPATH_INFO_V2_COMPLIANT | WBEMPATH_INFO_CIM_COMPLIANT | WBEMPATH_INFO_PATH_HAD_SERVER; static const WCHAR cimv2W[] = {'c','i','m','v','2',0}; IWbemPath *path; WCHAR buf[16]; ULONG len, count; ULONGLONG flags; HRESULT hr; if (!(path = create_path())) return; hr = IWbemPath_RemoveNamespaceAt( path, 0 ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path17 ); ok( hr == S_OK, "got %08x\n", hr ); flags = 0; hr = IWbemPath_GetInfo( path, 0, &flags ); ok( hr == S_OK, "got %08x\n", hr ); ok( flags == expected_flags, "got %lx%08lx\n", (unsigned long)(flags >> 32), (unsigned long)flags ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( count == 2, "got %u\n", count ); hr = IWbemPath_RemoveNamespaceAt( path, 0 ); ok( hr == S_OK, "got %08x\n", hr ); flags = 0; hr = IWbemPath_GetInfo( path, 0, &flags ); ok( hr == S_OK, "got %08x\n", hr ); ok( flags == expected_flags, "got %lx%08lx\n", (unsigned long)(flags >> 32), (unsigned long)flags ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( count == 1, "got %u\n", count ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, cimv2W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( cimv2W ) + 1, "unexpected length %u\n", len ); hr = IWbemPath_RemoveNamespaceAt( path, 0 ); ok( hr == S_OK, "got %08x\n", hr ); flags = 0; hr = IWbemPath_GetInfo( path, 0, &flags ); ok( hr == S_OK, "got %08x\n", hr ); ok( flags == expected_flags, "got %lx%08lx\n", (unsigned long)(flags >> 32), (unsigned long)flags ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( !count, "got %u\n", count ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, buf ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); IWbemPath_Release( path ); }
static void test_IWbemPath_SetText(void) { static const struct { const WCHAR *path; ULONG mode; HRESULT ret; BOOL todo; } test[] = { { path1, 0, WBEM_E_INVALID_PARAMETER }, { path1, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path2, 0, WBEM_E_INVALID_PARAMETER }, { path2, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path3, 0, WBEM_E_INVALID_PARAMETER }, { path3, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path4, 0, WBEM_E_INVALID_PARAMETER }, { path4, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path5, 0, WBEM_E_INVALID_PARAMETER }, { path5, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path6, 0, WBEM_E_INVALID_PARAMETER }, { path6, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path7, 0, WBEM_E_INVALID_PARAMETER }, { path7, WBEMPATH_CREATE_ACCEPT_RELATIVE, S_OK }, { path7, WBEMPATH_CREATE_ACCEPT_ABSOLUTE, S_OK }, { path7, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path7, WBEMPATH_TREAT_SINGLE_IDENT_AS_NS, WBEM_E_INVALID_PARAMETER, TRUE }, { path7, WBEMPATH_TREAT_SINGLE_IDENT_AS_NS + 1, S_OK }, { path8, WBEMPATH_CREATE_ACCEPT_RELATIVE, S_OK }, { path8, WBEMPATH_CREATE_ACCEPT_ABSOLUTE, WBEM_E_INVALID_PARAMETER, TRUE }, { path8, WBEMPATH_CREATE_ACCEPT_ALL, S_OK }, { path8, WBEMPATH_TREAT_SINGLE_IDENT_AS_NS, WBEM_E_INVALID_PARAMETER, TRUE }, { path8, WBEMPATH_TREAT_SINGLE_IDENT_AS_NS + 1, S_OK }, { path9, WBEMPATH_CREATE_ACCEPT_ABSOLUTE, S_OK }, { path10, WBEMPATH_CREATE_ACCEPT_ABSOLUTE, WBEM_E_INVALID_PARAMETER, TRUE }, { path11, WBEMPATH_CREATE_ACCEPT_ABSOLUTE, S_OK }, { path15, WBEMPATH_CREATE_ACCEPT_ALL, S_OK } }; IWbemPath *path; HRESULT hr; UINT i; if (!(path = create_path())) return; hr = IWbemPath_SetText( path, 0, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); for (i = 0; i < sizeof(test)/sizeof(test[0]); i++) { hr = IWbemPath_SetText( path, test[i].mode, test[i].path ); todo_wine_if (test[i].todo) ok( hr == test[i].ret, "%u got %08x\n", i, hr ); if (test[i].ret == S_OK) { WCHAR buf[128]; ULONG len; memset( buf, 0x55, sizeof(buf) ); len = sizeof(buf)/sizeof(buf[0]); hr = IWbemPath_GetText( path, WBEMPATH_GET_ORIGINAL, &len, buf ); ok( hr == S_OK, "%u got %08x\n", i, hr ); ok( !lstrcmpW( buf, test[i].path ), "%u unexpected path %s\n", i, wine_dbgstr_w(buf) ); ok( len == lstrlenW( test[i].path ) + 1, "%u unexpected length %u\n", i, len ); } } IWbemPath_Release( path ); }
static void test_IWbemPath_GetClassName(void) { static const WCHAR classW[] = {'W','i','n','3','2','_','L','o','g','i','c','a','l','D','i','s','k',0}; IWbemPath *path; HRESULT hr; WCHAR buf[32]; ULONG len; if (!(path = create_path())) return; hr = IWbemPath_GetClassName( path, NULL, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = 0; hr = IWbemPath_GetClassName( path, &len, NULL ); ok( hr == WBEM_E_INVALID_OBJECT_PATH, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetClassName( path, &len, buf ); ok( hr == WBEM_E_INVALID_OBJECT_PATH, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetClassName( path, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf) / sizeof(buf[0]), "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path17 ); ok( hr == S_OK, "got %08x\n", hr ); len = 0; hr = IWbemPath_GetClassName( path, &len, NULL ); ok( hr == S_OK, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetClassName( path, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf) / sizeof(buf[0]), "unexpected length %u\n", len ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetClassName( path, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, classW ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( classW ) + 1, "unexpected length %u\n", len ); IWbemPath_Release( path ); }
static void test_IWbemPath_GetInfo(void) { IWbemPath *path; HRESULT hr; ULONGLONG resp; if (!(path = create_path())) return; hr = IWbemPath_GetInfo( path, 0, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_GetInfo( path, 1, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); resp = 0xdeadbeef; hr = IWbemPath_GetInfo( path, 0, &resp ); ok( hr == S_OK, "got %08x\n", hr ); ok( resp == (WBEMPATH_INFO_ANON_LOCAL_MACHINE | WBEMPATH_INFO_SERVER_NAMESPACE_ONLY), "got %lx%08lx\n", (unsigned long)(resp >> 32), (unsigned long)resp ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path17 ); ok( hr == S_OK, "got %08x\n", hr ); hr = IWbemPath_GetInfo( path, 0, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_GetInfo( path, 1, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); resp = 0xdeadbeef; hr = IWbemPath_GetInfo( path, 0, &resp ); ok( hr == S_OK, "got %08x\n", hr ); ok( resp == (WBEMPATH_INFO_ANON_LOCAL_MACHINE | WBEMPATH_INFO_IS_INST_REF | WBEMPATH_INFO_HAS_SUBSCOPES | WBEMPATH_INFO_V2_COMPLIANT | WBEMPATH_INFO_CIM_COMPLIANT | WBEMPATH_INFO_PATH_HAD_SERVER), "got %lx%08lx\n", (unsigned long)(resp >> 32), (unsigned long)resp ); IWbemPath_Release( path ); if (!(path = create_path())) return; hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path12 ); ok( hr == S_OK, "got %08x\n", hr ); resp = 0xdeadbeef; hr = IWbemPath_GetInfo( path, 0, &resp ); ok( hr == S_OK, "got %08x\n", hr ); ok( resp == (WBEMPATH_INFO_ANON_LOCAL_MACHINE | WBEMPATH_INFO_IS_CLASS_REF | WBEMPATH_INFO_HAS_SUBSCOPES | WBEMPATH_INFO_V2_COMPLIANT | WBEMPATH_INFO_CIM_COMPLIANT), "got %lx%08lx\n", (unsigned long)(resp >> 32), (unsigned long)resp ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path1 ); ok( hr == S_OK, "got %08x\n", hr ); resp = 0xdeadbeef; hr = IWbemPath_GetInfo( path, 0, &resp ); ok( hr == S_OK, "got %08x\n", hr ); ok( resp == (WBEMPATH_INFO_ANON_LOCAL_MACHINE | WBEMPATH_INFO_SERVER_NAMESPACE_ONLY), "got %lx%08lx\n", (unsigned long)(resp >> 32), (unsigned long)resp ); IWbemPath_Release( path ); }
static void test_fieldzero(void) { MSIHANDLE hdb, hview, rec; CHAR buf[MAX_PATH]; LPCSTR query; DWORD sz; UINT r; rec = MsiCreateRecord(1); ok(rec != 0, "Expected a valid handle\n"); r = MsiRecordGetInteger(rec, 0); ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 0, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expectd 0, got %d\n", sz); r = MsiRecordIsNull(rec, 0); ok(r == TRUE, "Expected TRUE, got %d\n", r); r = MsiRecordGetInteger(rec, 1); ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r); r = MsiRecordSetInteger(rec, 1, 42); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiRecordGetInteger(rec, 0); ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 0, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expectd 0, got %d\n", sz); r = MsiRecordIsNull(rec, 0); ok(r == TRUE, "Expected TRUE, got %d\n", r); r = MsiRecordGetInteger(rec, 1); ok(r == 42, "Expected 42, got %d\n", r); r = MsiRecordSetStringA(rec, 1, "bologna"); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiRecordGetInteger(rec, 0); ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 0, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expectd 0, got %d\n", sz); r = MsiRecordIsNull(rec, 0); ok(r == TRUE, "Expected TRUE, got %d\n", r); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 1, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, "bologna"), "Expected \"bologna\", got \"%s\"\n", buf); ok(sz == 7, "Expectd 7, got %d\n", sz); MsiCloseHandle(rec); r = MsiOpenDatabaseW(msifileW, MSIDBOPEN_CREATE, &hdb); ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n"); query = "CREATE TABLE `drone` ( " "`id` INT, `name` CHAR(32), `number` CHAR(32) " "PRIMARY KEY `id`)"; r = MsiDatabaseOpenViewA(hdb, query, &hview); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiViewExecute(hview, 0); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiViewClose(hview); ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); r = MsiCloseHandle(hview); ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); query = "INSERT INTO `drone` ( `id`, `name`, `number` )" "VALUES('1', 'Abe', '8675309')"; r = MsiDatabaseOpenViewA(hdb, query, &hview); ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n"); r = MsiViewExecute(hview, 0); ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n"); r = MsiViewClose(hview); ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); r = MsiCloseHandle(hview); ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); r = MsiDatabaseGetPrimaryKeysA(hdb, "drone", &rec); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiRecordGetInteger(rec, 0); ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 0, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, "drone"), "Expected \"drone\", got \"%s\"\n", buf); ok(sz == 5, "Expectd 5, got %d\n", sz); r = MsiRecordIsNull(rec, 0); ok(r == FALSE, "Expected FALSE, got %d\n", r); MsiCloseHandle(rec); r = MsiDatabaseGetPrimaryKeysA(hdb, "nosuchtable", &rec); ok(r == ERROR_INVALID_TABLE, "Expected ERROR_INVALID_TABLE, got %d\n", r); query = "SELECT * FROM `drone` WHERE `id` = 1"; r = MsiDatabaseOpenViewA(hdb, query, &hview); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiViewExecute(hview, 0); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiViewFetch(hview, &rec); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); r = MsiRecordGetInteger(rec, 0); ok(r != MSI_NULL_INTEGER && r != 0, "Expected non-NULL value, got %d\n", r); r = MsiRecordIsNull(rec, 0); ok(r == FALSE, "Expected FALSE, got %d\n", r); r = MsiCloseHandle(hview); ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); MsiCloseHandle(rec); MsiCloseHandle(hdb); DeleteFileA(msifile); }
static void test_msirecord(void) { DWORD r, sz; INT i; MSIHANDLE h; char buf[10]; WCHAR bufW[10]; const char str[] = "hello"; const WCHAR strW[] = { 'h','e','l','l','o',0}; char filename[MAX_PATH]; /* check behaviour with an invalid record */ r = MsiRecordGetFieldCount(0); ok(r==-1, "field count for invalid record not -1\n"); SetLastError(0); r = MsiRecordIsNull(0, 0); ok(r==0, "invalid handle not considered to be non-null...\n"); ok(GetLastError()==0, "MsiRecordIsNull set LastError\n"); r = MsiRecordGetInteger(0,0); ok(r == MSI_NULL_INTEGER, "got integer from invalid record\n"); r = MsiRecordSetInteger(0,0,0); ok(r == ERROR_INVALID_HANDLE, "MsiRecordSetInteger returned wrong error\n"); r = MsiRecordSetInteger(0,-1,0); ok(r == ERROR_INVALID_HANDLE, "MsiRecordSetInteger returned wrong error\n"); SetLastError(0); h = MsiCreateRecord(-1); ok(h==0, "created record with -1 elements\n"); h = MsiCreateRecord(0x10000); ok(h==0, "created record with 0x10000 elements\n"); /* doesn't set LastError */ ok(GetLastError()==0, "MsiCreateRecord set last error\n"); r = MsiRecordClearData(0); ok(r == ERROR_INVALID_HANDLE, "MsiRecordClearData returned wrong error\n"); r = MsiRecordDataSize(0,0); ok(r == 0, "MsiRecordDataSize returned wrong error\n"); /* check behaviour of a record with 0 elements */ h = MsiCreateRecord(0); ok(h!=0, "couldn't create record with zero elements\n"); r = MsiRecordGetFieldCount(h); ok(r==0, "field count should be zero\n"); r = MsiRecordIsNull(h,0); ok(r, "new record wasn't null\n"); r = MsiRecordIsNull(h,1); ok(r, "out of range record wasn't null\n"); r = MsiRecordIsNull(h,-1); ok(r, "out of range record wasn't null\n"); r = MsiRecordDataSize(h,0); ok(r==0, "size of null record is 0\n"); sz = sizeof buf; strcpy(buf,"x"); r = MsiRecordGetStringA(h, 0, buf, &sz); ok(r==ERROR_SUCCESS, "failed to get null string\n"); ok(sz==0, "null string too long\n"); ok(buf[0]==0, "null string not set\n"); /* same record, but add an integer to it */ r = MsiRecordSetInteger(h, 0, 0); ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 0\n"); r = MsiRecordIsNull(h,0); ok(r==0, "new record is null after setting an integer\n"); r = MsiRecordDataSize(h,0); ok(r==sizeof(DWORD), "size of integer record is 4\n"); r = MsiRecordSetInteger(h, 0, 1); ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 1\n"); r = MsiRecordSetInteger(h, 1, 1); ok(r == ERROR_INVALID_PARAMETER, "set integer at 1\n"); r = MsiRecordSetInteger(h, -1, 0); ok(r == ERROR_INVALID_PARAMETER, "set integer at -1\n"); r = MsiRecordIsNull(h,0); ok(r==0, "new record is null after setting an integer\n"); r = MsiRecordGetInteger(h, 0); ok(r == 1, "failed to get integer\n"); /* same record, but add a null or empty string to it */ r = MsiRecordSetStringA(h, 0, NULL); ok(r == ERROR_SUCCESS, "Failed to set null string at 0\n"); r = MsiRecordIsNull(h, 0); ok(r == TRUE, "null string not null field\n"); r = MsiRecordDataSize(h, 0); ok(r == 0, "size of string record is strlen\n"); buf[0] = 0; sz = sizeof buf; r = MsiRecordGetStringA(h, 0, buf, &sz); ok(r == ERROR_SUCCESS, "Failed to get string at 0\n"); ok(buf[0] == 0, "MsiRecordGetStringA returned the wrong string\n"); ok(sz == 0, "MsiRecordGetStringA returned the wrong length\n"); bufW[0] = 0; sz = sizeof bufW / sizeof bufW[0]; r = MsiRecordGetStringW(h, 0, bufW, &sz); ok(r == ERROR_SUCCESS, "Failed to get string at 0\n"); ok(bufW[0] == 0, "MsiRecordGetStringW returned the wrong string\n"); ok(sz == 0, "MsiRecordGetStringW returned the wrong length\n"); r = MsiRecordSetStringA(h, 0, ""); ok(r == ERROR_SUCCESS, "Failed to set empty string at 0\n"); r = MsiRecordIsNull(h, 0); ok(r == TRUE, "null string not null field\n"); r = MsiRecordDataSize(h, 0); ok(r == 0, "size of string record is strlen\n"); buf[0] = 0; sz = sizeof buf; r = MsiRecordGetStringA(h, 0, buf, &sz); ok(r == ERROR_SUCCESS, "Failed to get string at 0\n"); ok(buf[0] == 0, "MsiRecordGetStringA returned the wrong string\n"); ok(sz == 0, "MsiRecordGetStringA returned the wrong length\n"); bufW[0] = 0; sz = sizeof bufW / sizeof bufW[0]; r = MsiRecordGetStringW(h, 0, bufW, &sz); ok(r == ERROR_SUCCESS, "Failed to get string at 0\n"); ok(bufW[0] == 0, "MsiRecordGetStringW returned the wrong string\n"); ok(sz == 0, "MsiRecordGetStringW returned the wrong length\n"); /* same record, but add a string to it */ r = MsiRecordSetStringA(h,0,str); ok(r == ERROR_SUCCESS, "Failed to set string at 0\n"); r = MsiRecordGetInteger(h, 0); ok(r == MSI_NULL_INTEGER, "should get invalid integer\n"); r = MsiRecordDataSize(h,0); ok(r==sizeof str-1, "size of string record is strlen\n"); buf[0]=0; sz = sizeof buf; r = MsiRecordGetStringA(h,0,buf,&sz); ok(r == ERROR_SUCCESS, "Failed to get string at 0\n"); ok(0==strcmp(buf,str), "MsiRecordGetStringA returned the wrong string\n"); ok(sz == sizeof str-1, "MsiRecordGetStringA returned the wrong length\n"); buf[0]=0; sz = sizeof str - 2; r = MsiRecordGetStringA(h,0,buf,&sz); ok(r == ERROR_MORE_DATA, "small buffer should yield ERROR_MORE_DATA\n"); ok(sz == sizeof str-1, "MsiRecordGetStringA returned the wrong length\n"); ok(0==strncmp(buf,str,sizeof str-3), "MsiRecordGetStringA returned the wrong string\n"); ok(buf[sizeof str - 3]==0, "string wasn't nul terminated\n"); buf[0]=0; sz = sizeof str; r = MsiRecordGetStringA(h,0,buf,&sz); ok(r == ERROR_SUCCESS, "wrong error\n"); ok(sz == sizeof str-1, "MsiRecordGetStringA returned the wrong length\n"); ok(0==strcmp(buf,str), "MsiRecordGetStringA returned the wrong string\n"); memset(bufW, 0, sizeof bufW); sz = 5; r = MsiRecordGetStringW(h,0,bufW,&sz); ok(r == ERROR_MORE_DATA, "wrong error\n"); ok(sz == 5, "MsiRecordGetStringA returned the wrong length\n"); ok(0==memcmp(bufW,strW,8), "MsiRecordGetStringA returned the wrong string\n"); sz = 0; bufW[0] = 'x'; r = MsiRecordGetStringW(h,0,bufW,&sz); ok(r == ERROR_MORE_DATA, "wrong error\n"); ok(sz == 5, "MsiRecordGetStringA returned the wrong length\n"); ok('x'==bufW[0], "MsiRecordGetStringA returned the wrong string\n"); memset(buf, 0, sizeof buf); sz = 5; r = MsiRecordGetStringA(h,0,buf,&sz); ok(r == ERROR_MORE_DATA, "wrong error\n"); ok(sz == 5, "MsiRecordGetStringA returned the wrong length\n"); ok(0==memcmp(buf,str,4), "MsiRecordGetStringA returned the wrong string\n"); sz = 0; buf[0] = 'x'; r = MsiRecordGetStringA(h,0,buf,&sz); ok(r == ERROR_MORE_DATA, "wrong error\n"); ok(sz == 5, "MsiRecordGetStringA returned the wrong length\n"); ok('x'==buf[0], "MsiRecordGetStringA returned the wrong string\n"); /* same record, check we can wipe all the data */ r = MsiRecordClearData(h); ok(r == ERROR_SUCCESS, "Failed to clear record\n"); r = MsiRecordClearData(h); ok(r == ERROR_SUCCESS, "Failed to clear record again\n"); r = MsiRecordIsNull(h,0); ok(r, "cleared record wasn't null\n"); /* same record, try converting strings to integers */ i = MsiRecordSetStringA(h,0,"42"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == 42, "should get invalid integer\n"); i = MsiRecordSetStringA(h,0,"-42"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == -42, "should get invalid integer\n"); i = MsiRecordSetStringA(h,0," 42"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); i = MsiRecordSetStringA(h,0,"42 "); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); i = MsiRecordSetStringA(h,0,"42.0"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); i = MsiRecordSetStringA(h,0,"0x42"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get invalid integer\n"); i = MsiRecordSetStringA(h,0,"1000000000000000"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == -1530494976, "should get truncated integer\n"); i = MsiRecordSetStringA(h,0,"2147483647"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == 2147483647, "should get maxint\n"); i = MsiRecordSetStringA(h,0,"-2147483647"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == -2147483647, "should get -maxint-1\n"); i = MsiRecordSetStringA(h,0,"4294967297"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == 1, "should get one\n"); i = MsiRecordSetStringA(h,0,"foo"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get zero\n"); i = MsiRecordSetStringA(h,0,""); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get zero\n"); i = MsiRecordSetStringA(h,0,"+1"); ok(i == ERROR_SUCCESS, "Failed to set string at 0\n"); i = MsiRecordGetInteger(h, 0); ok(i == MSI_NULL_INTEGER, "should get zero\n"); /* same record, try converting integers to strings */ r = MsiRecordSetInteger(h, 0, 32); ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 32\n"); sz = 1; r = MsiRecordGetStringA(h, 0, NULL, &sz); ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); ok(sz == 2, "length wrong\n"); buf[0]=0; sz = sizeof buf; r = MsiRecordGetStringA(h, 0, buf, &sz); ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); ok(0==strcmp(buf,"32"), "failed to get string from integer\n"); r = MsiRecordSetInteger(h, 0, -32); ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 32\n"); buf[0]=0; sz = 1; r = MsiRecordGetStringA(h, 0, NULL, &sz); ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); ok(sz == 3, "length wrong\n"); sz = sizeof buf; r = MsiRecordGetStringA(h, 0, buf, &sz); ok(r == ERROR_SUCCESS, "failed to get string from integer\n"); ok(0==strcmp(buf,"-32"), "failed to get string from integer\n"); buf[0]=0; /* same record, now try streams */ r = MsiRecordSetStreamA(h, 0, NULL); ok(r == ERROR_INVALID_PARAMETER, "set NULL stream\n"); sz = sizeof buf; r = MsiRecordReadStream(h, 0, buf, &sz); ok(r == ERROR_INVALID_DATATYPE, "read non-stream type\n"); ok(sz == sizeof buf, "set sz\n"); r = MsiRecordDataSize( h, -1); ok(r == 0,"MsiRecordDataSize returned wrong size\n"); r = MsiRecordDataSize( h, 0); ok(r == 4,"MsiRecordDataSize returned wrong size\n"); /* same record, now close it */ r = MsiCloseHandle(h); ok(r == ERROR_SUCCESS, "Failed to close handle\n"); /* now try streams in a new record - need to create a file to play with */ r = create_temp_file(filename); if(!r) return; /* streams can't be inserted in field 0 for some reason */ h = MsiCreateRecord(2); ok(h, "couldn't create a two field record\n"); r = MsiRecordSetStreamA(h, 0, filename); ok(r == ERROR_INVALID_PARAMETER, "added stream to field 0\n"); r = MsiRecordSetStreamA(h, 1, filename); ok(r == ERROR_SUCCESS, "failed to add stream to record\n"); r = MsiRecordReadStream(h, 1, buf, NULL); ok(r == ERROR_INVALID_PARAMETER, "should return error\n"); DeleteFileA(filename); /* Windows 98 doesn't like this at all, so don't check return. */ r = MsiRecordReadStream(h, 1, NULL, NULL); ok(r == ERROR_INVALID_PARAMETER, "should return error\n"); sz = sizeof buf; r = MsiRecordReadStream(h, 1, NULL, &sz); ok(r == ERROR_SUCCESS, "failed to read stream\n"); ok(sz==26,"couldn't get size of stream\n"); sz = 0; r = MsiRecordReadStream(h, 1, buf, &sz); ok(r == ERROR_SUCCESS, "failed to read stream\n"); ok(sz==0,"short read\n"); sz = sizeof buf; r = MsiRecordReadStream(h, 1, buf, &sz); ok(r == ERROR_SUCCESS, "failed to read stream\n"); ok(sz==sizeof buf,"short read\n"); ok(!strncmp(buf,"abcdefghij",10), "read the wrong thing\n"); sz = sizeof buf; r = MsiRecordReadStream(h, 1, buf, &sz); ok(r == ERROR_SUCCESS, "failed to read stream\n"); ok(sz==sizeof buf,"short read\n"); ok(!strncmp(buf,"klmnopqrst",10), "read the wrong thing\n"); memset(buf,0,sizeof buf); sz = sizeof buf; r = MsiRecordReadStream(h, 1, buf, &sz); ok(r == ERROR_SUCCESS, "failed to read stream\n"); ok(sz==6,"short read\n"); ok(!strcmp(buf,"uvwxyz"), "read the wrong thing\n"); memset(buf,0,sizeof buf); sz = sizeof buf; r = MsiRecordReadStream(h, 1, buf, &sz); ok(r == ERROR_SUCCESS, "failed to read stream\n"); ok(sz==0,"size non-zero at end of stream\n"); ok(buf[0]==0, "read something at end of the stream\n"); r = MsiRecordSetStreamA(h, 1, NULL); ok(r == ERROR_SUCCESS, "failed to reset stream\n"); sz = 0; r = MsiRecordReadStream(h, 1, NULL, &sz); ok(r == ERROR_SUCCESS, "bytes left wrong after reset\n"); ok(sz==26,"couldn't get size of stream\n"); r = MsiRecordDataSize(h,1); ok(r == 26,"MsiRecordDataSize returned wrong size\n"); /* now close the stream record */ r = MsiCloseHandle(h); ok(r == ERROR_SUCCESS, "Failed to close handle\n"); DeleteFileA(filename); /* Delete it for sure, when everything else is closed. */ }
SecurityDlg::SecurityDlg(CICQDaemon *s, CSignalManager *_sigman, QWidget *parent) : LicqDialog(parent, "SecurityDialog", false, WStyle_ContextHelp | WDestructiveClose ) { server = s; sigman = _sigman; eSecurityInfo = 0; ePasswordChange = 0; unsigned long nUin = gUserManager.OwnerUin(); QString strUin; if (nUin) strUin.setNum(nUin); QVBoxLayout *lay = new QVBoxLayout(this, 8); QGroupBox *box = new QGroupBox(1, QGroupBox::Horizontal, tr("Options"), this); lay->addWidget(box); QGroupBox *passwordBox = new QGroupBox(2, QGroupBox::Horizontal, tr("Password/UIN settings"), this); #if QT_VERSION > 300 box->setInsideSpacing(1); passwordBox->setInsideSpacing(1); #endif lay->addWidget(passwordBox); // Password boxes lblUin = new QLabel(tr("&Uin:"), passwordBox); edtUin = new QLineEdit(passwordBox); QWhatsThis::add(edtUin, tr("Enter the UIN which you want to use. " "Only available if \"Local changes only\" is " "checked.")); lblPassword = new QLabel(tr("&Password:"******"Enter your ICQ password here.")); lblVerify = new QLabel(tr("&Verify:"), passwordBox); edtSecond = new QLineEdit(passwordBox); QWhatsThis::add(edtSecond, tr("Verify your ICQ password here.")); chkOnlyLocal = new QCheckBox(tr("&Local changes only"), passwordBox); QWhatsThis::add(chkOnlyLocal, tr("If checked, password/UIN changes will apply" " only on your local computer. Useful if " "your password is incorrectly saved in Licq.")); edtUin->setEnabled(false); edtFirst->setEchoMode(QLineEdit::Password); edtSecond->setEchoMode(QLineEdit::Password); lblUin->setBuddy(edtUin); lblPassword->setBuddy(edtFirst); lblVerify->setBuddy(edtSecond); // UIN edtUin->setValidator(new QIntValidator(10000, 2147483647, edtUin)); if (nUin) edtUin->setText(strUin); // Owner password ICQOwner *o = gUserManager.FetchOwner(LOCK_R); if (o != NULL) { edtFirst->setText(o->Password()); edtSecond->setText(o->Password()); } else { edtFirst->setEnabled(false); edtSecond->setEnabled(false); } QVBoxLayout *blay = new QVBoxLayout; chkAuthorization = new QCheckBox(tr("Authorization Required"), box); QWhatsThis::add(chkAuthorization, tr("Determines whether regular ICQ clients " "require your authorization to add you to " "their contact list.")); chkWebAware = new QCheckBox(tr("Web Presence"), box); QWhatsThis::add(chkWebAware, tr("Web Presence allows users to see if you are online " "through your web indicator.")); chkHideIp = new QCheckBox(tr("Hide IP"), box); QWhatsThis::add(chkHideIp, tr("Hide IP stops users from seeing your IP address. It doesn't guarantee it will be hidden though.")); blay->addWidget(chkAuthorization); blay->addWidget(chkWebAware); blay->addWidget(chkHideIp); btnUpdate = new QPushButton(tr("&Update"), this); btnUpdate->setDefault(true); btnUpdate->setMinimumWidth(75); btnCancel = new QPushButton(tr("&Cancel"), this); btnCancel->setMinimumWidth(75); QHBoxLayout *hlay = new QHBoxLayout; hlay->addWidget(QWhatsThis::whatsThisButton(this), 0, AlignLeft); hlay->addSpacing(20); hlay->addStretch(1); hlay->addWidget(btnUpdate, 0, AlignRight); hlay->addSpacing(20); hlay->addWidget(btnCancel, 0, AlignLeft); lay->addLayout(hlay); connect (btnUpdate, SIGNAL(clicked()), SLOT(ok()) ); connect (btnCancel, SIGNAL(clicked()), SLOT(close()) ); connect (chkOnlyLocal, SIGNAL(toggled(bool)), SLOT(slot_chkOnlyLocalToggled(bool))); // do some magic ;) // if we are offline, we enable the checkbox "Only local changes" // this saves one click :) if (o != NULL) // Make sure we exist { slot_chkOnlyLocalToggled( (o->Status() == ICQ_STATUS_OFFLINE) ); chkAuthorization->setChecked(o->GetAuthorization()); chkWebAware->setChecked(o->WebAware()); chkHideIp->setChecked(o->HideIp()); gUserManager.DropOwner(); } else { slot_chkOnlyLocalToggled(true); chkOnlyLocal->setEnabled(false); chkAuthorization->setChecked(false); chkWebAware->setChecked(false); chkHideIp->setChecked(false); } setCaption(tr("ICQ Security Options")); // remember the initial values // later we use these to apply only what has been changed by the user initAuthorization = chkAuthorization->isChecked(); initWebAware = chkWebAware->isChecked(); initHideIp = chkHideIp->isChecked(); initEdtUin = edtUin->text(); initEdtFirst = edtFirst->text(); initEdtSecond = edtSecond->text(); // Set Tab Order setTabOrder(chkAuthorization, chkWebAware); setTabOrder(chkWebAware, chkHideIp); setTabOrder(chkHideIp, edtUin); setTabOrder(edtUin, edtFirst); setTabOrder(edtFirst, edtSecond); setTabOrder(edtSecond, chkOnlyLocal); setTabOrder(chkOnlyLocal, btnUpdate); setTabOrder(btnUpdate, btnCancel); show(); }
static void test_MsiRecordGetString(void) { MSIHANDLE rec; CHAR buf[MAX_PATH]; DWORD sz; UINT r; rec = MsiCreateRecord(2); ok(rec != 0, "Expected a valid handle\n"); sz = MAX_PATH; r = MsiRecordGetStringA(rec, 1, NULL, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n",r); ok(sz == 0, "Expected 0, got %d\n",sz); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 1, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expected 0, got %d\n", sz); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 10, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf); ok(sz == 0, "Expected 0, got %d\n", sz); MsiCloseHandle(rec); rec = MsiCreateRecord(1); ok(rec != 0, "Expected a valid handle\n"); r = MsiRecordSetInteger(rec, 1, 5); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); sz = MAX_PATH; r = MsiRecordGetStringA(rec, 1, NULL, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n",r); ok(sz == 1, "Expected 1, got %d\n",sz); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 1, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, "5"), "Expected \"5\", got \"%s\"\n", buf); ok(sz == 1, "Expectd 1, got %d\n", sz); r = MsiRecordSetInteger(rec, 1, -5); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); sz = MAX_PATH; lstrcpyA(buf, "apple"); r = MsiRecordGetStringA(rec, 1, buf, &sz); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(!lstrcmpA(buf, "-5"), "Expected \"-5\", got \"%s\"\n", buf); ok(sz == 2, "Expectd 2, got %d\n", sz); MsiCloseHandle(rec); }
static void test_select( IWbemServices *services ) { static const WCHAR emptyW[] = {0}; static const WCHAR sqlW[] = {'S','Q','L',0}; static const WCHAR query1[] = { 'S','E','L','E','C','T',' ','H','O','T','F','I','X','I','D',' ','F','R','O','M',' ', 'W','i','n','3','2','_','Q','u','i','c','k','F','i','x','E','n','g','i','n','e','e','r','i','n','g',0 }; static const WCHAR query2[] = {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_','B','I','O','S',0}; static const WCHAR query3[] = { 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', 'L','o','g','i','c','a','l','D','i','s','k',' ','W','H','E','R','E',' ', '\"','N','T','F','S','\"',' ','=',' ','F','i','l','e','S','y','s','t','e','m',0 }; static const WCHAR query4[] = {'S','E','L','E','C','T',' ','a',' ','F','R','O','M',' ','b',0}; static const WCHAR query5[] = {'S','E','L','E','C','T',' ','a',' ','F','R','O','M',' ','W','i','n','3','2','_','B','i','o','s',0}; static const WCHAR query6[] = { 'S','E','L','E','C','T',' ','D','e','s','c','r','i','p','t','i','o','n',' ','F','R','O','M',' ', 'W','i','n','3','2','_','B','i','o','s',0 }; static const WCHAR query7[] = { 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', 'P','r','o','c','e','s','s',' ','W','H','E','R','E',' ','C','a','p','t','i','o','n',' ', 'L','I','K','E',' ','\'','%','%','R','E','G','E','D','I','T','%','\'',0 }; static const WCHAR query8[] = { 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', 'D','i','s','k','D','r','i','v','e',' ','W','H','E','R','E',' ','D','e','v','i','c','e','I','D','=', '\"','\\','\\','\\','\\','.','\\','\\','P','H','Y','S','I','C','A','L','D','R','I','V','E','0','\"',0 }; static const WCHAR query9[] = {'S','E','L','E','C','T','\n','a','\r','F','R','O','M','\t','b',0}; static const WCHAR query10[] = { 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', 'P','r','o','c','e','s','s',' ','W','H','E','R','E',' ','C','a','p','t','i','o','n',' ', 'L','I','K','E',' ','"','%','f','i','r','e','f','o','x','.','e','x','e','"',0 }; static const WCHAR query11[] = { 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ', 'W','i','n','3','2','_','V','i','d','e','o','C','o','n','t','r','o','l','l','e','r',' ','w','h','e','r','e',' ', 'a','v','a','i','l','a','b','i','l','i','t','y',' ','=',' ','\'','3','\'',0 }; static const WCHAR *test[] = { query1, query2, query3, query4, query5, query6, query7, query8, query9, query10, query11 }; HRESULT hr; IEnumWbemClassObject *result; BSTR wql = SysAllocString( wqlW ); BSTR sql = SysAllocString( sqlW ); BSTR query = SysAllocString( query1 ); UINT i; hr = IWbemServices_ExecQuery( services, NULL, NULL, 0, NULL, &result ); ok( hr == WBEM_E_INVALID_PARAMETER, "query failed %08x\n", hr ); hr = IWbemServices_ExecQuery( services, NULL, query, 0, NULL, &result ); ok( hr == WBEM_E_INVALID_PARAMETER, "query failed %08x\n", hr ); hr = IWbemServices_ExecQuery( services, wql, NULL, 0, NULL, &result ); ok( hr == WBEM_E_INVALID_PARAMETER, "query failed %08x\n", hr ); hr = IWbemServices_ExecQuery( services, sql, query, 0, NULL, &result ); ok( hr == WBEM_E_INVALID_QUERY_TYPE, "query failed %08x\n", hr ); hr = IWbemServices_ExecQuery( services, sql, NULL, 0, NULL, &result ); ok( hr == WBEM_E_INVALID_PARAMETER, "query failed %08x\n", hr ); SysFreeString( query ); query = SysAllocString( emptyW ); hr = IWbemServices_ExecQuery( services, wql, query, 0, NULL, &result ); ok( hr == WBEM_E_INVALID_PARAMETER, "query failed %08x\n", hr ); for (i = 0; i < sizeof(test)/sizeof(test[0]); i++) { hr = exec_query( services, test[i], &result ); ok( hr == S_OK, "query %u failed: %08x\n", i, hr ); if (result) IEnumWbemClassObject_Release( result ); } SysFreeString( wql ); SysFreeString( sql ); SysFreeString( query ); }
static void test_extract_push_path_from_link_header(void) { h2o_mem_pool_t pool; h2o_iovec_t path; h2o_iovec_t base_authority = {H2O_STRLIT("basehost")}, base_path = {H2O_STRLIT("/basepath/")}; #define BASE &H2O_URL_SCHEME_HTTP, &base_authority, &base_path h2o_mem_init_pool(&pool); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<http://basehost/otherpath>; rel=preload"), BASE); ok(h2o_memis(path.base, path.len, H2O_STRLIT("/otherpath"))); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("</otherpath>; rel=preload"), BASE); ok(h2o_memis(path.base, path.len, H2O_STRLIT("/otherpath"))); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<otherpath>; rel=preload"), BASE); ok(h2o_memis(path.base, path.len, H2O_STRLIT("/basepath/otherpath"))); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<../otherpath>; rel=preload"), BASE); ok(h2o_memis(path.base, path.len, H2O_STRLIT("/otherpath"))); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<http:otherpath>; rel=preload"), BASE); ok(h2o_memis(path.base, path.len, H2O_STRLIT("/basepath/otherpath"))); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<../otherpath>; rel=author"), BASE); ok(path.base == NULL); ok(path.len == 0); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<http://basehost:81/otherpath>; rel=preload"), BASE); ok(path.base == NULL); ok(path.len == 0); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<https://basehost/otherpath>; rel=preload"), BASE); ok(path.base == NULL); ok(path.len == 0); path = h2o_extract_push_path_from_link_header(&pool, H2O_STRLIT("<https:otherpath>; rel=preload"), BASE); ok(path.base == NULL); ok(path.len == 0); h2o_mem_clear_pool(&pool); #undef BASE }
static void test_parse_proxy_line(void) { char in[256]; struct sockaddr_storage sa; socklen_t salen; ssize_t ret; strcpy(in, ""); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == -2); strcpy(in, "PROXY TCP4 192.168.0.1 192.168.0.11 56324 443\r\nabc"); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == strlen(in) - 3); ok(salen == sizeof(struct sockaddr_in)); ok(sa.ss_family == AF_INET); ok(((struct sockaddr_in *)&sa)->sin_addr.s_addr == htonl(0xc0a80001)); ok(((struct sockaddr_in *)&sa)->sin_port == htons(56324)); strcpy(in, "PROXY TCP4 192.168.0.1 192.168.0.11 56324 443\r"); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == -2); strcpy(in, "PROXY TCP5"); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == -1); strcpy(in, "PROXY UNKNOWN"); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == -2); strcpy(in, "PROXY UNKNOWN\r\nabc"); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == strlen(in) - 3); ok(salen == 0); strcpy(in, "PROXY TCP6 ::1 ::1 56324 443\r\n"); ret = parse_proxy_line(in, strlen(in), (void *)&sa, &salen); ok(ret == strlen(in)); ok(salen == sizeof(struct sockaddr_in6)); ok(sa.ss_family == AF_INET6); ok(memcmp(&((struct sockaddr_in6 *)&sa)->sin6_addr, H2O_STRLIT("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1")) == 0); ok(((struct sockaddr_in6 *)&sa)->sin6_port == htons(56324)); }
int main (int argc, char **argv) { zio_t *zio; int init_fds; const char *name; struct counts c; int fd; flux_reactor_t *r; flux_watcher_t *w; memset (&c, 0, sizeof (c)); plan (NO_PLAN); ok ((r = flux_reactor_create (0)) != NULL, "flux reactor created"); init_fds = fdcount (); diag ("initial fd count: %d", init_fds); /* simple reader tests */ ok ((zio = zio_pipe_reader_create ("test1", &c)) != NULL, "reader: zio_pipe_reader_create works"); ok ((name = zio_name (zio)) != NULL && !strcmp (name, "test1"), "reader: zio_name returns correct name"); ok (zio_set_close_cb (zio, close_reader) == 0, "reader: zio_set_close_cb works"); ok (zio_set_send_cb (zio, send_reader) == 0, "reader: zio_set_send_cb works"); ok (zio_reactor_attach (zio, r) == 0, "reader: zio_reactor_attach works"); ok ((fd = zio_dst_fd (zio)) >= 0, "reader: zio_dst_fd returned valid file descriptor"); ok (write (fd, "narf!", 5) == 5, "reader: wrote narf! to reader pipe"); ok (zio_close_dst_fd (zio) == 0, "reader: zio_close_dst_fd succeeded"); ok (flux_reactor_run (r, 0) == 0, "reader: reactor completed successfully"); ok (c.send_reader == 1, "reader: send function called once for EOF + incomplete line"); errno = 0; zio_destroy (zio); ok (init_fds == fdcount (), "reader: zio_destroy leaks no file descriptors"); /* simple writer tests */ ok ((zio = zio_pipe_writer_create ("test2", &c)) != NULL, "writer: zio_pipe_writer_create works"); ok ((name = zio_name (zio)) != NULL && !strcmp (name, "test2"), "writer: zio_name returns correct name"); ok (zio_set_close_cb (zio, close_writer) == 0, "writer: zio_set_close_cb works"); ok ((fd = zio_src_fd (zio)) >= 0, "writer: zio_src_fd returned valid file descriptor"); w = flux_fd_watcher_create (r, fd, FLUX_POLLIN, fd_read, &c); ok (w != NULL, "writer: created fd watcher"); flux_watcher_start (w); ok (zio_write (zio, "narf!", 5) == 5, "writer: zio_write narf! works"); ok (zio_write_eof (zio) == 0, "writer: zio_write_eof works"); ok (flux_reactor_run (r, 0) == 0, "writer: reactor completed successfully"); ok (c.fd_read_errors == 0 && c.fd_read_data == 5 && c.fd_read_eof == 1, "writer: read narf + EOF on read end of pipe"); ok (c.close_writer == 1, "writer: close callback invoked"); zio_destroy (zio); ok (init_fds == fdcount (), "writer: zio_destroy leaks no file descriptors"); flux_watcher_destroy (w); flux_reactor_destroy (r); done_testing (); }
static void test_logfont(void) { LOGFONTA lfa, lfa2; GpFont *font; GpStatus stat; GpGraphics *graphics; HDC hdc = GetDC(0); INT style; GdipCreateFromHDC(hdc, &graphics); memset(&lfa, 0, sizeof(LOGFONTA)); memset(&lfa2, 0xff, sizeof(LOGFONTA)); /* empty FaceName */ lfa.lfFaceName[0] = 0; stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font); expect(NotTrueTypeFont, stat); lstrcpyA(lfa.lfFaceName, "Arial"); stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font); if (stat == FileNotFound) { skip("Arial not installed.\n"); return; } expect(Ok, stat); stat = GdipGetLogFontA(font, graphics, &lfa2); expect(Ok, stat); ok(lfa2.lfHeight < 0, "Expected negative height\n"); expect(0, lfa2.lfWidth); expect(0, lfa2.lfEscapement); expect(0, lfa2.lfOrientation); ok((lfa2.lfWeight >= 100) && (lfa2.lfWeight <= 900), "Expected weight to be set\n"); expect(0, lfa2.lfItalic); expect(0, lfa2.lfUnderline); expect(0, lfa2.lfStrikeOut); expect(GetTextCharset(hdc), lfa2.lfCharSet); expect(0, lfa2.lfOutPrecision); expect(0, lfa2.lfClipPrecision); expect(0, lfa2.lfQuality); expect(0, lfa2.lfPitchAndFamily); GdipDeleteFont(font); memset(&lfa, 0, sizeof(LOGFONTA)); lfa.lfHeight = 25; lfa.lfWidth = 25; lfa.lfEscapement = lfa.lfOrientation = 50; lfa.lfItalic = lfa.lfUnderline = lfa.lfStrikeOut = TRUE; memset(&lfa2, 0xff, sizeof(LOGFONTA)); lstrcpyA(lfa.lfFaceName, "Arial"); stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font); expect(Ok, stat); stat = GdipGetLogFontA(font, graphics, &lfa2); expect(Ok, stat); ok(lfa2.lfHeight < 0, "Expected negative height\n"); expect(0, lfa2.lfWidth); expect(0, lfa2.lfEscapement); expect(0, lfa2.lfOrientation); ok((lfa2.lfWeight >= 100) && (lfa2.lfWeight <= 900), "Expected weight to be set\n"); expect(TRUE, lfa2.lfItalic); expect(TRUE, lfa2.lfUnderline); expect(TRUE, lfa2.lfStrikeOut); expect(GetTextCharset(hdc), lfa2.lfCharSet); expect(0, lfa2.lfOutPrecision); expect(0, lfa2.lfClipPrecision); expect(0, lfa2.lfQuality); expect(0, lfa2.lfPitchAndFamily); stat = GdipGetFontStyle(font, &style); expect(Ok, stat); ok (style == (FontStyleItalic | FontStyleUnderline | FontStyleStrikeout), "Expected , got %d\n", style); GdipDeleteFont(font); GdipDeleteGraphics(graphics); ReleaseDC(0, hdc); }
static void test_IWbemPath_GetText(void) { static const WCHAR serviceW[] = {'W','i','n','3','2','_','S','e','r','v','i','c','e','.','N','a','m','e','=', '\"','S','e','r','v','i','c','e','\"',0}; static const WCHAR classW[] = {'W','i','n','3','2','_','C','l','a','s','s',0}; static const WCHAR expected1W[] = {'r','o','o','t','\\','c','i','m','v','2',':','W','i','n','3','2','_', 'L','o','g','i','c','a','l','D','i','s','k','.','D','e','v','i','c','e','I','d','=', '"','C',':','"',0}; static const WCHAR expected2W[] = {'W','i','n','3','2','_','L','o','g','i','c','a','l','D','i','s','k','.', 'D','e','v','i','c','e','I','d','=','"','C',':','"',0}; static const WCHAR expected3W[] = {'\\','\\','.','\\','r','o','o','t','\\','c','i','m','v','2',0}; WCHAR buf[128]; ULONG len, count; IWbemPath *path; HRESULT hr; if (!(path = create_path())) return; hr = IWbemPath_GetText( path, 0, NULL, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = sizeof(buf)/sizeof(buf[0]); hr = IWbemPath_GetText( path, 0, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf)/sizeof(buf[0]), "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !buf[0], "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == 1, "unexpected length %u\n", len ); hr = IWbemPath_GetText( path, WBEMPATH_GET_ORIGINAL, NULL, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = sizeof(buf)/sizeof(buf[0]); hr = IWbemPath_GetText( path, WBEMPATH_GET_ORIGINAL, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf)/sizeof(buf[0]), "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_ORIGINAL, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !buf[0], "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_TOO, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); todo_wine ok( !buf[0], "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); todo_wine ok( len == 1, "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path8 ); ok( hr == S_OK, "got %08x\n", hr ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( count == 2, "got %u\n", count ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_TOO, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path9 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path9 ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_AND_NAMESPACE_ONLY, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path13 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path13 ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path14 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path14 ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_NAMESPACE_ONLY, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path15 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path15 ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path12 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path12 ) + 1, "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path1 ); ok( hr == S_OK, "got %08x\n", hr ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( !count, "got %u\n", count ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path6 ); ok( hr == S_OK, "got %08x\n", hr ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( count == 2, "got %u\n", count ); len = 0; hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_TOO, &len, NULL ); ok( hr == S_OK, "got %08x\n", hr ); ok( len == lstrlenW( path16 ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_TOO, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path16 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path16 ) + 1, "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path17 ); ok( hr == S_OK, "got %08x\n", hr ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_TOO, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, path17 ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( path17 ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, expected1W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( expected1W ) + 1, "unexpected length %u\n", len ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, expected2W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( expected2W ) + 1, "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path15 ); ok( hr == S_OK, "got %08x\n", hr ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_SERVER_TOO, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, expected3W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( expected3W ) + 1, "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path18 ); ok( hr == S_OK, "got %08x\n", hr ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path19 ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path20 ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); IWbemPath_Release( path ); if (!(path = create_path())) return; hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, serviceW ); ok( hr == S_OK, "got %08x\n", hr ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, serviceW ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( serviceW ) + 1, "unexpected length %u\n", len ); IWbemPath_Release( path ); if (!(path = create_path())) return; hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, classW ); ok( hr == S_OK, "got %08x\n", hr ); len = sizeof(buf)/sizeof(buf[0]); memset( buf, 0x55, sizeof(buf) ); hr = IWbemPath_GetText( path, WBEMPATH_GET_RELATIVE_ONLY, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, classW ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( classW ) + 1, "unexpected length %u\n", len ); IWbemPath_Release( path ); }
int main (int argc, char **argv) { /* Local Vars */ int state = STATE_OK; char *ups_ident = NULL; long ups_battery_status = LONG_MIN; long ups_seconds_on_battery = LONG_MIN; long ups_remaining_runtime = LONG_MIN; long ups_remaining_charge = LONG_MIN; long ups_battery_voltage = LONG_MIN; long ups_battery_current = LONG_MIN; long ups_battery_temperature = LONG_MIN; long ups_input_line_bads = LONG_MIN; long ups_input_lines = LONG_MIN; long ups_output_source = LONG_MIN; long ups_output_frequency = LONG_MIN; long ups_output_lines = LONG_MIN; long ups_alarms_present = LONG_MIN; char *output = NULL; char buf[64]; netsnmp_session *snmp_session; mp_snmp_query_cmd snmpcmd[] = { {{1,3,6,1,2,1,33,1,1,5,0}, 11, ASN_OCTET_STR, (void *)&ups_ident, 0}, {{1,3,6,1,2,1,33,1,2,1,0}, 11, ASN_INTEGER, (void *)&ups_battery_status, sizeof(long int)}, {{1,3,6,1,2,1,33,1,2,2,0}, 11, ASN_INTEGER, (void *)&ups_seconds_on_battery, sizeof(long int)}, {{1,3,6,1,2,1,33,1,2,3,0}, 11, ASN_INTEGER, (void *)&ups_remaining_runtime, sizeof(long int)}, {{1,3,6,1,2,1,33,1,2,4,0}, 11, ASN_INTEGER, (void *)&ups_remaining_charge, sizeof(long int)}, {{1,3,6,1,2,1,33,1,2,5,0}, 11, ASN_INTEGER, (void *)&ups_battery_voltage, sizeof(long int)}, /* 0.1 volts DC */ {{1,3,6,1,2,1,33,1,2,6,0}, 11, ASN_INTEGER, (void *)&ups_battery_current, sizeof(long int)}, /* 0.1 amps DC */ {{1,3,6,1,2,1,33,1,2,7,0}, 11, ASN_INTEGER, (void *)&ups_battery_temperature, sizeof(long int)}, /* deg C */ {{1,3,6,1,2,1,33,1,3,1,0}, 11, ASN_COUNTER, (void *)&ups_input_line_bads, sizeof(long int)}, {{1,3,6,1,2,1,33,1,3,2,0}, 11, ASN_INTEGER, (void *)&ups_input_lines, sizeof(long int)}, {{1,3,6,1,2,1,33,1,4,1,0}, 11, ASN_INTEGER, (void *)&ups_output_source, sizeof(long int)}, {{1,3,6,1,2,1,33,1,4,2,0}, 11, ASN_INTEGER, (void *)&ups_output_frequency, sizeof(long int)}, /* 0.1 RMS */ {{1,3,6,1,2,1,33,1,4,3,0}, 11, ASN_INTEGER, (void *)&ups_output_lines, sizeof(long int)}, {{1,3,6,1,2,1,33,1,6,1,0}, 11, ASN_GAUGE, (void *)&ups_alarms_present, sizeof(long int)}, {{0}, 0, 0, NULL}, }; /* set threshold defaults */ setWarn(&threshold_charge, DEFAULT_CHARGE_WARNING, NOEXT); setCrit(&threshold_charge, DEFAULT_CHARGE_CRITICAL, NOEXT); setWarn(&threshold_runtime, DEFAULT_RUNTIME_WARNING, NOEXT); setCrit(&threshold_runtime, DEFAULT_RUNTIME_CRITICAL, NOEXT); /* Set signal handling and alarm */ if (signal(SIGALRM, timeout_alarm_handler) == SIG_ERR) critical("Setup SIGALRM trap failed!"); /* Process check arguments */ if (process_arguments(argc, argv) != OK) unknown("Parsing arguments failed!"); /* Start plugin timeout */ alarm(mp_timeout); snmp_session = mp_snmp_init(); mp_snmp_query(snmp_session, snmpcmd); mp_snmp_deinit(); if (mp_verbose > 1) { printf("battery status: %ld\n", ups_battery_status); printf("output source: %ld\n", ups_output_source); printf("alarms present: %ld\n", ups_alarms_present); printf("input lines: %ld\n", ups_input_lines); printf("output lines: %ld\n", ups_output_lines); printf("input line bads: %ld\n", ups_input_line_bads); } if (ups_ident) { if (*ups_ident != '\0') { mp_snprintf((char *)&buf, sizeof(buf), "[%s] ", ups_ident); mp_strcat(&output, buf); } free(ups_ident); } /* always warning, if on battery */ if ((ups_seconds_on_battery > 0) || (ups_output_source == OUTPUT_BATTERY)) { state = STATE_WARNING; if (ups_seconds_on_battery > 0) { mp_snprintf((char *) &buf, sizeof(buf), "ON BATTERY (since %d sec%s), ", ups_seconds_on_battery, ((ups_seconds_on_battery != 1) ? "s" : "")); mp_strcat(&output, buf); } else { mp_strcat(&output, "ON BATTERY, "); } } /* check alarms */ if ((ups_alarms_present != LONG_MIN) && (ups_alarms_present > 0)) { if (state != STATE_CRITICAL) state = STATE_WARNING; if (ups_alarms_present == 1) mp_strcat(&output, "UPS REPORTS AN ALARM, "); else mp_strcat(&output, "UPS REPORTS MULTIPLE ALARMS, "); } /* check remaining runtime threshold */ if (ups_remaining_runtime > LONG_MIN) { switch (get_status(ups_remaining_runtime, threshold_runtime)) { case STATE_CRITICAL: state = STATE_CRITICAL; mp_strcat(&output, "RUNTIME CRITICAL, "); break; case STATE_WARNING: if (state == STATE_OK) state = STATE_WARNING; mp_strcat(&output, "RUNTIME WARNING, "); break; } /* switch */ } /* check remaining charge threshold */ if (ups_remaining_charge > LONG_MIN) { switch (get_status(ups_remaining_charge, threshold_charge)) { case STATE_CRITICAL: state = STATE_CRITICAL; mp_strcat(&output, "CHARGE CRITICAL, "); break; case STATE_WARNING: if (state == STATE_OK) state = STATE_WARNING; mp_strcat(&output, "CHARGE WARNING, "); break; } /* switch */ } /* check battery status */ switch (ups_battery_status) { case BATTERY_NORMAL: break; case BATTERY_LOW: state = STATE_CRITICAL; break; case BATTERY_DEPLETED: state = STATE_CRITICAL; break; case BATTERY_UNKNOWN: /* FALL-THROUGH */ default: if (state == STATE_OK) state = STATE_UNKNOWN; break; } /* switch */ /* check output source */ switch (ups_output_source) { case OUTPUT_NORMAL: /* DO NOTHING */ break; case OUTPUT_OTHER: /* FALL-THROUGH */ case OUTPUT_BYPASS: /* FALL-THROUGH */ case OUTPUT_BOOSTER: /* FALL-THROUGH */ case OUTPUT_REDUCER: /* FALL-THROUGH */ case OUTPUT_BATTERY: /* FALL-THROUGH */ if (state != STATE_CRITICAL) state = STATE_WARNING; break; case OUTPUT_NONE: state = STATE_CRITICAL; break; default: if (state == STATE_OK) state = STATE_UNKNOWN; break; } /* switch */ /* * status line */ mp_snprintf((char *) &buf, sizeof(buf), "battery: %s", battery_status_to_string(ups_battery_status)); mp_strcat(&output, buf); if ((ups_remaining_runtime > LONG_MIN) && (ups_remaining_charge > LONG_MIN)) { mp_snprintf((char *) &buf, sizeof(buf), "remaining: %ld min%s [%d%%]", ups_remaining_runtime, ((ups_remaining_runtime != 1) ? "s" : ""), (int) ups_remaining_charge); mp_strcat_comma(&output, buf); } else if (ups_remaining_runtime > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "remaining: %ld min%s", ups_remaining_runtime, ((ups_remaining_runtime != 1) ? "s" : "")); mp_strcat_comma(&output, buf); } else if (ups_remaining_charge > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "remaining: %d%%", (int) ups_remaining_charge); mp_strcat_comma(&output, buf); } mp_snprintf((char *) &buf, sizeof(buf), "source: %s", output_source_to_string(ups_output_source)); mp_strcat_comma(&output, buf); if (extended_status) { if (ups_battery_voltage > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "voltage: %1.0f V", (ups_battery_voltage * 0.1f)); mp_strcat_comma(&output, buf); } if (ups_battery_current > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "current: %1.1f A", (ups_battery_current * 0.1f)); mp_strcat_comma(&output, buf); } if (ups_battery_temperature > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "temperature: %ld C", ups_battery_temperature); mp_strcat_comma(&output, buf); } if (ups_output_frequency > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "output frequency: %3.1f Hz", (ups_output_frequency * 0.1f)); mp_strcat_comma(&output, buf); } if (ups_input_line_bads > LONG_MIN) { mp_snprintf((char *) &buf, sizeof(buf), "input line bads: %ld", ups_input_line_bads); mp_strcat_comma(&output, buf); } } /* * performance data */ if (mp_showperfdata) { if (ups_remaining_charge > LONG_MIN) { mp_perfdata_int("remaining_charge", ups_remaining_charge, "%", threshold_charge); } if (ups_remaining_runtime > LONG_MIN) { mp_perfdata_int("remaining_runtime", ups_remaining_charge, "minutes", threshold_runtime); } if (ups_battery_voltage > LONG_MIN) { mp_perfdata_float("battery_voltage", ups_battery_voltage * 0.1f, "V", NULL); } if (ups_battery_current > LONG_MIN) { mp_perfdata_float("battery_current", ups_battery_current * 0.1f, "A", NULL); } if (ups_battery_temperature > LONG_MIN) { mp_perfdata_int("battery_temperature", ups_battery_temperature, "C", NULL); } if (ups_output_frequency > LONG_MIN) { mp_perfdata_float("output_frequency", ups_output_frequency * 0.1f, "Hz", NULL); } if (ups_input_line_bads > LONG_MIN) { mp_perfdata_int("input_line_bads", ups_input_line_bads, "", NULL); } } switch (state) { case STATE_OK: ok("UPS: %s", output); break; case STATE_WARNING: warning("UPS: %s", output); break; case STATE_CRITICAL: critical("UPS: %s", output); break; default: unknown("UPS: %s", output); break; } }
static void test_IWbemPath_GetServer(void) { static const WCHAR dotW[] = {'.',0}; IWbemPath *path; HRESULT hr; WCHAR buf[32]; ULONG len; if (!(path = create_path())) return; hr = IWbemPath_GetServer( path, NULL, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = 0; hr = IWbemPath_GetServer( path, &len, NULL ); ok( hr == WBEM_E_NOT_AVAILABLE, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetServer( path, &len, buf ); ok( hr == WBEM_E_NOT_AVAILABLE, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetServer( path, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf) / sizeof(buf[0]), "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path17 ); ok( hr == S_OK, "got %08x\n", hr ); len = 0; hr = IWbemPath_GetServer( path, &len, NULL ); ok( hr == S_OK, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetServer( path, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf) / sizeof(buf[0]), "unexpected length %u\n", len ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetServer( path, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, dotW ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( dotW ) + 1, "unexpected length %u\n", len ); IWbemPath_Release( path ); }
static void test_DirectInputCreateEx(void) { static const struct { BOOL hinst; DWORD dwVersion; REFIID riid; BOOL ppdi; HRESULT expected_hr; IUnknown *expected_ppdi; } invalid_param_list[] = { {FALSE, 0, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {FALSE, 0, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {FALSE, 0, &IID_IDirectInputA, FALSE, E_POINTER}, {FALSE, 0, &IID_IDirectInputA, TRUE, DIERR_INVALIDPARAM, NULL}, {FALSE, DIRECTINPUT_VERSION, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {FALSE, DIRECTINPUT_VERSION, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {FALSE, DIRECTINPUT_VERSION, &IID_IDirectInputA, FALSE, E_POINTER}, {FALSE, DIRECTINPUT_VERSION, &IID_IDirectInputA, TRUE, DIERR_INVALIDPARAM, NULL}, {FALSE, DIRECTINPUT_VERSION - 1, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {FALSE, DIRECTINPUT_VERSION - 1, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {FALSE, DIRECTINPUT_VERSION - 1, &IID_IDirectInputA, FALSE, E_POINTER}, {FALSE, DIRECTINPUT_VERSION - 1, &IID_IDirectInputA, TRUE, DIERR_INVALIDPARAM, NULL}, {FALSE, DIRECTINPUT_VERSION + 1, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {FALSE, DIRECTINPUT_VERSION + 1, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {FALSE, DIRECTINPUT_VERSION + 1, &IID_IDirectInputA, FALSE, E_POINTER}, {FALSE, DIRECTINPUT_VERSION + 1, &IID_IDirectInputA, TRUE, DIERR_INVALIDPARAM, NULL}, {TRUE, 0, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {TRUE, 0, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {TRUE, 0, &IID_IDirectInputA, FALSE, E_POINTER}, {TRUE, 0, &IID_IDirectInputA, TRUE, DIERR_NOTINITIALIZED, NULL}, {TRUE, DIRECTINPUT_VERSION, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {TRUE, DIRECTINPUT_VERSION, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {TRUE, DIRECTINPUT_VERSION, &IID_IDirectInputA, FALSE, E_POINTER}, {TRUE, DIRECTINPUT_VERSION - 1, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {TRUE, DIRECTINPUT_VERSION - 1, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {TRUE, DIRECTINPUT_VERSION - 1, &IID_IDirectInputA, FALSE, E_POINTER}, {TRUE, DIRECTINPUT_VERSION - 1, &IID_IDirectInputA, TRUE, DIERR_BETADIRECTINPUTVERSION, NULL}, {TRUE, DIRECTINPUT_VERSION + 1, &IID_IUnknown, FALSE, DIERR_NOINTERFACE}, {TRUE, DIRECTINPUT_VERSION + 1, &IID_IUnknown, TRUE, DIERR_NOINTERFACE, (void *)0xdeadbeef}, {TRUE, DIRECTINPUT_VERSION + 1, &IID_IDirectInputA, FALSE, E_POINTER}, {TRUE, DIRECTINPUT_VERSION + 1, &IID_IDirectInputA, TRUE, DIERR_OLDDIRECTINPUTVERSION, NULL}, }; static REFIID no_interface_list[] = {&IID_IUnknown, &IID_IDirectInput8A, &IID_IDirectInput8W, &IID_IDirectInputDeviceA, &IID_IDirectInputDeviceW, &IID_IDirectInputDevice2A, &IID_IDirectInputDevice2W, &IID_IDirectInputDevice7A, &IID_IDirectInputDevice7W, &IID_IDirectInputDevice8A, &IID_IDirectInputDevice8W, &IID_IDirectInputEffect}; static REFIID iid_list[] = {&IID_IDirectInputA, &IID_IDirectInputW, &IID_IDirectInput2A, &IID_IDirectInput2W, &IID_IDirectInput7A, &IID_IDirectInput7W}; int i, j; IUnknown *pUnk; HRESULT hr; if (!pDirectInputCreateEx) { win_skip("DirectInputCreateEx is not available\n"); return; } for (i = 0; i < sizeof(invalid_param_list)/sizeof(invalid_param_list[0]); i++) { if (invalid_param_list[i].ppdi) pUnk = (void *)0xdeadbeef; hr = pDirectInputCreateEx(invalid_param_list[i].hinst ? hInstance : NULL, invalid_param_list[i].dwVersion, invalid_param_list[i].riid, invalid_param_list[i].ppdi ? (void **)&pUnk : NULL, NULL); ok(hr == invalid_param_list[i].expected_hr, "[%d] DirectInputCreateEx returned 0x%08x\n", i, hr); if (invalid_param_list[i].ppdi) ok(pUnk == invalid_param_list[i].expected_ppdi, "[%d] Output interface pointer is %p\n", i, pUnk); } for (i = 0; i < sizeof(no_interface_list)/sizeof(no_interface_list[0]); i++) { pUnk = (void *)0xdeadbeef; hr = pDirectInputCreateEx(hInstance, DIRECTINPUT_VERSION, no_interface_list[i], (void **)&pUnk, NULL); ok(hr == DIERR_NOINTERFACE, "[%d] DirectInputCreateEx returned 0x%08x\n", i, hr); ok(pUnk == (void *)0xdeadbeef, "[%d] Output interface pointer is %p\n", i, pUnk); } for (i = 0; i < sizeof(iid_list)/sizeof(iid_list[0]); i++) { pUnk = NULL; hr = pDirectInputCreateEx(hInstance, DIRECTINPUT_VERSION, iid_list[i], (void **)&pUnk, NULL); ok(hr == DI_OK, "[%d] DirectInputCreateEx returned 0x%08x\n", i, hr); ok(pUnk != NULL, "[%d] Output interface pointer is NULL\n", i); if (pUnk) IUnknown_Release(pUnk); } /* Examine combinations of requested interfaces and version numbers. */ for (i = 0; i < sizeof(directinput_version_list)/sizeof(directinput_version_list[0]); i++) { for (j = 0; j < sizeof(iid_list)/sizeof(iid_list[0]); j++) { pUnk = NULL; hr = pDirectInputCreateEx(hInstance, directinput_version_list[i], iid_list[j], (void **)&pUnk, NULL); ok(hr == DI_OK, "[%d/%d] DirectInputCreateEx returned 0x%08x\n", i, j, hr); ok(pUnk != NULL, "[%d] Output interface pointer is NULL\n", i); if (pUnk) IUnknown_Release(pUnk); } } }
static void test_IWbemPath_GetNamespaceAt(void) { static const WCHAR rootW[] = {'r','o','o','t',0}; static const WCHAR cimv2W[] = {'c','i','m','v','2',0}; IWbemPath *path; HRESULT hr; WCHAR buf[32]; ULONG len; if (!(path = create_path())) return; hr = IWbemPath_GetNamespaceAt( path, 0, NULL, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = 0; hr = IWbemPath_GetNamespaceAt( path, 0, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, buf ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf) / sizeof(buf[0]), "unexpected length %u\n", len ); hr = IWbemPath_SetText( path, WBEMPATH_CREATE_ACCEPT_ALL, path17 ); ok( hr == S_OK, "got %08x\n", hr ); len = 0; hr = IWbemPath_GetNamespaceAt( path, 2, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); ok( len == sizeof(buf) / sizeof(buf[0]), "unexpected length %u\n", len ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, rootW ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( rootW ) + 1, "unexpected length %u\n", len ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 1, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, cimv2W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( cimv2W ) + 1, "unexpected length %u\n", len ); IWbemPath_Release( path ); }
static void test_QueryInterface(void) { static REFIID iid_list[] = {&IID_IUnknown, &IID_IDirectInputA, &IID_IDirectInputW, &IID_IDirectInput2A, &IID_IDirectInput2W, &IID_IDirectInput7A, &IID_IDirectInput7W}; static const struct { REFIID riid; int test_todo; } no_interface_list[] = { {&IID_IDirectInput8A, 1}, {&IID_IDirectInput8W, 1}, {&IID_IDirectInputDeviceA}, {&IID_IDirectInputDeviceW}, {&IID_IDirectInputDevice2A}, {&IID_IDirectInputDevice2W}, {&IID_IDirectInputDevice7A}, {&IID_IDirectInputDevice7W}, {&IID_IDirectInputDevice8A}, {&IID_IDirectInputDevice8W}, {&IID_IDirectInputEffect}, }; IDirectInputA *pDI; HRESULT hr; IUnknown *pUnk; int i; hr = DirectInputCreateA(hInstance, DIRECTINPUT_VERSION, &pDI, NULL); if (FAILED(hr)) { win_skip("Failed to instantiate a IDirectInputA instance: 0x%08x\n", hr); return; } hr = IDirectInput_QueryInterface(pDI, NULL, NULL); ok(hr == E_POINTER, "IDirectInput_QueryInterface returned 0x%08x\n", hr); pUnk = (void *)0xdeadbeef; hr = IDirectInput_QueryInterface(pDI, NULL, (void **)&pUnk); ok(hr == E_POINTER, "IDirectInput_QueryInterface returned 0x%08x\n", hr); ok(pUnk == (void *)0xdeadbeef, "Output interface pointer is %p\n", pUnk); hr = IDirectInput_QueryInterface(pDI, &IID_IUnknown, NULL); ok(hr == E_POINTER, "IDirectInput_QueryInterface returned 0x%08x\n", hr); for (i = 0; i < sizeof(iid_list)/sizeof(iid_list[0]); i++) { pUnk = NULL; hr = IDirectInput_QueryInterface(pDI, iid_list[i], (void **)&pUnk); ok(hr == S_OK, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr); ok(pUnk != NULL, "[%d] Output interface pointer is NULL\n", i); if (pUnk) IUnknown_Release(pUnk); } for (i = 0; i < sizeof(no_interface_list)/sizeof(no_interface_list[0]); i++) { pUnk = (void *)0xdeadbeef; hr = IDirectInput_QueryInterface(pDI, no_interface_list[i].riid, (void **)&pUnk); if (no_interface_list[i].test_todo) { todo_wine ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr); todo_wine ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk); if (pUnk) IUnknown_Release(pUnk); } else { ok(hr == E_NOINTERFACE, "[%d] IDirectInput_QueryInterface returned 0x%08x\n", i, hr); ok(pUnk == NULL, "[%d] Output interface pointer is %p\n", i, pUnk); } } IDirectInput_Release(pDI); }
static void test_IWbemPath_SetNamespaceAt(void) { static const ULONGLONG expected_flags = WBEMPATH_INFO_ANON_LOCAL_MACHINE | WBEMPATH_INFO_V1_COMPLIANT | WBEMPATH_INFO_V2_COMPLIANT | WBEMPATH_INFO_CIM_COMPLIANT | WBEMPATH_INFO_SERVER_NAMESPACE_ONLY; static const WCHAR rootW[] = {'r','o','o','t',0}; static const WCHAR cimv2W[] = {'c','i','m','v','2',0}; IWbemPath *path; WCHAR buf[16]; ULONG len, count; ULONGLONG flags; HRESULT hr; if (!(path = create_path())) return; hr = IWbemPath_SetNamespaceAt( path, 0, NULL ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_SetNamespaceAt( path, 1, cimv2W ); ok( hr == WBEM_E_INVALID_PARAMETER, "got %08x\n", hr ); hr = IWbemPath_SetNamespaceAt( path, 0, cimv2W ); ok( hr == S_OK, "got %08x\n", hr ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( count == 1, "got %u\n", count ); flags = 0; hr = IWbemPath_GetInfo( path, 0, &flags ); ok( hr == S_OK, "got %08x\n", hr ); ok( flags == expected_flags, "got %lx%08lx\n", (unsigned long)(flags >> 32), (unsigned long)flags ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, cimv2W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( cimv2W ) + 1, "unexpected length %u\n", len ); hr = IWbemPath_SetNamespaceAt( path, 0, rootW ); ok( hr == S_OK, "got %08x\n", hr ); flags = 0; hr = IWbemPath_GetInfo( path, 0, &flags ); ok( hr == S_OK, "got %08x\n", hr ); ok( flags == expected_flags, "got %lx%08lx\n", (unsigned long)(flags >> 32), (unsigned long)flags ); count = 0xdeadbeef; hr = IWbemPath_GetNamespaceCount( path, &count ); ok( hr == S_OK, "got %08x\n", hr ); ok( count == 2, "got %u\n", count ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 0, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, rootW ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( rootW ) + 1, "unexpected length %u\n", len ); buf[0] = 0; len = sizeof(buf) / sizeof(buf[0]); hr = IWbemPath_GetNamespaceAt( path, 1, &len, buf ); ok( hr == S_OK, "got %08x\n", hr ); ok( !lstrcmpW( buf, cimv2W ), "unexpected buffer contents %s\n", wine_dbgstr_w(buf) ); ok( len == lstrlenW( cimv2W ) + 1, "unexpected length %u\n", len ); IWbemPath_Release( path ); }
static void test_EnumDevices(void) { IDirectInputA *pDI; HRESULT hr; struct enum_devices_test enum_test, enum_test_return; hr = DirectInputCreateA(hInstance, DIRECTINPUT_VERSION, &pDI, NULL); if (FAILED(hr)) { win_skip("Failed to instantiate a IDirectInputA instance: 0x%08x\n", hr); return; } hr = IDirectInput_EnumDevices(pDI, 0, NULL, NULL, 0); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); hr = IDirectInput_EnumDevices(pDI, 0, NULL, NULL, ~0u); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); /* Test crashes on Wine. */ if (0) { hr = IDirectInput_EnumDevices(pDI, 0, enum_devices_callback, NULL, ~0u); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); } hr = IDirectInput_EnumDevices(pDI, 0xdeadbeef, NULL, NULL, 0); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); hr = IDirectInput_EnumDevices(pDI, 0xdeadbeef, NULL, NULL, ~0u); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); hr = IDirectInput_EnumDevices(pDI, 0xdeadbeef, enum_devices_callback, NULL, 0); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); hr = IDirectInput_EnumDevices(pDI, 0xdeadbeef, enum_devices_callback, NULL, ~0u); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_EnumDevices returned 0x%08x\n", hr); enum_test.device_count = 0; enum_test.return_value = DIENUM_CONTINUE; hr = IDirectInput_EnumDevices(pDI, 0, enum_devices_callback, &enum_test, 0); ok(hr == DI_OK, "IDirectInput_EnumDevices returned 0x%08x\n", hr); ok(enum_test.device_count != 0, "Device count is %u\n", enum_test.device_count); /* Enumeration only stops with an explicit DIENUM_STOP. */ enum_test_return.device_count = 0; enum_test_return.return_value = 42; hr = IDirectInput_EnumDevices(pDI, 0, enum_devices_callback, &enum_test_return, 0); ok(hr == DI_OK, "IDirectInput_EnumDevices returned 0x%08x\n", hr); ok(enum_test_return.device_count == enum_test.device_count, "Device count is %u vs. %u\n", enum_test_return.device_count, enum_test.device_count); enum_test.device_count = 0; enum_test.return_value = DIENUM_STOP; hr = IDirectInput_EnumDevices(pDI, 0, enum_devices_callback, &enum_test, 0); ok(hr == DI_OK, "IDirectInput_EnumDevices returned 0x%08x\n", hr); ok(enum_test.device_count == 1, "Device count is %u\n", enum_test.device_count); IDirectInput_Release(pDI); }
static void test_wmreader_interfaces(void) { HRESULT hr; IWMReader *reader; IWMReaderAdvanced *advanced; IWMReaderAdvanced2 *advanced2; IWMHeaderInfo *header; IWMHeaderInfo2 *header2; IWMHeaderInfo3 *header3; IWMProfile *profile; IWMProfile2 *profile2; IWMProfile3 *profile3; IWMPacketSize *packet; IWMPacketSize2 *packet2; IWMReaderAccelerator *accel; IWMReaderTimecode *timecode; IWMReaderNetworkConfig *netconfig; IWMReaderNetworkConfig2 *netconfig2; IWMReaderStreamClock *clock; IWMReaderTypeNegotiation *negotiation; IWMDRMReader *drmreader; IWMDRMReader2 *drmreader2; IWMDRMReader3 *drmreader3; IWMReaderPlaylistBurn *playlist; IWMLanguageList *langlist; IReferenceClock *refclock; hr = WMCreateReader( NULL, 0, &reader ); ok(hr == S_OK, "WMCreateReader failed 0x%08x\n", hr); if(FAILED(hr)) { win_skip("Failed to create IWMReader\n"); return; } hr = IWMReader_QueryInterface(reader, &IID_IWMReaderAdvanced, (void **)&advanced); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderAdvanced2, (void **)&advanced2); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMHeaderInfo, (void **)&header); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMHeaderInfo2, (void **)&header2); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMHeaderInfo3, (void **)&header3); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMProfile, (void **)&profile); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMProfile2, (void **)&profile2); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMProfile3, (void **)&profile3); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMPacketSize, (void **)&packet); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMPacketSize2, (void **)&packet2); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderAccelerator, (void **)&accel); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderTimecode, (void **)&timecode); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderNetworkConfig, (void **)&netconfig); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderNetworkConfig2, (void **)&netconfig2); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderStreamClock, (void **)&clock); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderTypeNegotiation, (void **)&negotiation); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMDRMReader, (void **)&drmreader); ok(hr == E_NOINTERFACE, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMDRMReader2, (void **)&drmreader2); ok(hr == E_NOINTERFACE, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMDRMReader3, (void **)&drmreader3); ok(hr == E_NOINTERFACE, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMReaderPlaylistBurn, (void **)&playlist); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IWMLanguageList, (void **)&langlist); ok(hr == S_OK, "Failed 0x%08x\n", hr); hr = IWMReader_QueryInterface(reader, &IID_IReferenceClock, (void **)&refclock); ok(hr == S_OK, "Failed 0x%08x\n", hr); if(packet) IWMPacketSize_Release(packet); if(packet2) IWMPacketSize2_Release(packet2); if(advanced) IWMReaderAdvanced_Release(advanced); if(advanced2) IWMReaderAdvanced2_Release(advanced2); if(profile) IWMProfile_Release(profile); if(profile2) IWMProfile2_Release(profile2); if(profile3) IWMProfile3_Release(profile3); if(header) IWMHeaderInfo_Release(header); if(header2) IWMHeaderInfo2_Release(header2); if(header3) IWMHeaderInfo3_Release(header3); if(accel) IWMReaderAccelerator_Release(accel); if(timecode) IWMReaderTimecode_Release(timecode); if(netconfig) IWMReaderNetworkConfig_Release(netconfig); if(netconfig2) IWMReaderNetworkConfig2_Release(netconfig2); if(clock) IWMReaderStreamClock_Release(clock); if(negotiation) IWMReaderTypeNegotiation_Release(negotiation); if(playlist) IWMReaderPlaylistBurn_Release(playlist); if(langlist) IWMLanguageList_Release(langlist); if(refclock) IReferenceClock_Release(refclock); IWMReader_Release(reader); }
static BOOL CALLBACK dummy_callback(const DIDEVICEINSTANCEA *instance, void *context) { ok(0, "Callback was invoked with parameters (%p, %p)\n", instance, context); return DIENUM_STOP; }
static void test_comboboxex(void) { HWND myHwnd = 0; LONG res = -1; COMBOBOXEXITEM cbexItem; static TCHAR first_item[] = {'F','i','r','s','t',' ','I','t','e','m',0}, second_item[] = {'S','e','c','o','n','d',' ','I','t','e','m',0}, third_item[] = {'T','h','i','r','d',' ','I','t','e','m',0}, middle_item[] = {'B','e','t','w','e','e','n',' ','F','i','r','s','t',' ','a','n','d',' ', 'S','e','c','o','n','d',' ','I','t','e','m','s',0}, replacement_item[] = {'B','e','t','w','e','e','n',' ','F','i','r','s','t',' ','a','n','d',' ', 'S','e','c','o','n','d',' ','I','t','e','m','s',0}, out_of_range_item[] = {'O','u','t',' ','o','f',' ','R','a','n','g','e',' ','I','t','e','m',0}; /* Allocate space for result */ textBuffer = HeapAlloc(GetProcessHeap(), 0, MAX_CHARS); /* Basic comboboxex test */ myHwnd = createComboEx(WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN); /* Add items onto the end of the combobox */ res = addItem(myHwnd, -1, first_item); ok(res == 0, "Adding simple item failed (%d)\n", res); res = addItem(myHwnd, -1, second_item); ok(res == 1, "Adding simple item failed (%d)\n", res); res = addItem(myHwnd, 2, third_item); ok(res == 2, "Adding simple item failed (%d)\n", res); res = addItem(myHwnd, 1, middle_item); ok(res == 1, "Inserting simple item failed (%d)\n", res); /* Add an item completely out of range */ res = addItem(myHwnd, 99, out_of_range_item); ok(res == -1, "Adding using out of range index worked unexpectedly (%d)\n", res); res = addItem(myHwnd, 5, out_of_range_item); ok(res == -1, "Adding using out of range index worked unexpectedly (%d)\n", res); /* Removed: Causes traps on Windows XP res = addItem(myHwnd, -2, "Out Of Range Item"); ok(res == -1, "Adding out of range worked unexpectedly (%ld)\n", res); */ /* Get an item completely out of range */ res = getItem(myHwnd, 99, &cbexItem); ok(res == 0, "Getting item using out of range index worked unexpectedly (%d, %s)\n", res, cbexItem.pszText); res = getItem(myHwnd, 4, &cbexItem); ok(res == 0, "Getting item using out of range index worked unexpectedly (%d, %s)\n", res, cbexItem.pszText); res = getItem(myHwnd, -2, &cbexItem); ok(res == 0, "Getting item using out of range index worked unexpectedly (%d, %s)\n", res, cbexItem.pszText); /* Get an item in range */ res = getItem(myHwnd, 0, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); ok(strcmp(first_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); res = getItem(myHwnd, 1, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); ok(strcmp(middle_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); res = getItem(myHwnd, 2, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); ok(strcmp(second_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); res = getItem(myHwnd, 3, &cbexItem); ok(res != 0, "Getting item using valid index failed unexpectedly (%d)\n", res); ok(strcmp(third_item, cbexItem.pszText) == 0, "Getting item returned wrong string (%s)\n", cbexItem.pszText); /* Set an item completely out of range */ res = setItem(myHwnd, 99, replacement_item); ok(res == 0, "Setting item using out of range index worked unexpectedly (%d)\n", res); res = setItem(myHwnd, 4, replacement_item); ok(res == 0, "Setting item using out of range index worked unexpectedly (%d)\n", res); res = setItem(myHwnd, -2, replacement_item); ok(res == 0, "Setting item using out of range index worked unexpectedly (%d)\n", res); /* Set an item in range */ res = setItem(myHwnd, 0, replacement_item); ok(res != 0, "Setting first item failed (%d)\n", res); res = setItem(myHwnd, 3, replacement_item); ok(res != 0, "Setting last item failed (%d)\n", res); /* Remove items completely out of range (4 items in control at this point) */ res = delItem(myHwnd, -1); ok(res == CB_ERR, "Deleting using out of range index worked unexpectedly (%d)\n", res); res = delItem(myHwnd, 4); ok(res == CB_ERR, "Deleting using out of range index worked unexpectedly (%d)\n", res); /* Remove items in range (4 items in control at this point) */ res = delItem(myHwnd, 3); ok(res == 3, "Deleting using out of range index failed (%d)\n", res); res = delItem(myHwnd, 0); ok(res == 2, "Deleting using out of range index failed (%d)\n", res); res = delItem(myHwnd, 0); ok(res == 1, "Deleting using out of range index failed (%d)\n", res); res = delItem(myHwnd, 0); ok(res == 0, "Deleting using out of range index failed (%d)\n", res); /* Remove from an empty box */ res = delItem(myHwnd, 0); ok(res == CB_ERR, "Deleting using out of range index worked unexpectedly (%d)\n", res); /* Cleanup */ HeapFree(GetProcessHeap(), 0, textBuffer); DestroyWindow(myHwnd); }
static void test_preinitialization(void) { static const struct { REFGUID rguid; BOOL pdev; HRESULT expected_hr; } create_device_tests[] = { {NULL, FALSE, E_POINTER}, {NULL, TRUE, E_POINTER}, {&GUID_Unknown, FALSE, E_POINTER}, {&GUID_Unknown, TRUE, DIERR_NOTINITIALIZED}, {&GUID_SysMouse, FALSE, E_POINTER}, {&GUID_SysMouse, TRUE, DIERR_NOTINITIALIZED}, }; static const struct { DWORD dwDevType; LPDIENUMDEVICESCALLBACKA lpCallback; DWORD dwFlags; HRESULT expected_hr; int todo; } enum_devices_tests[] = { {0, NULL, 0, DIERR_INVALIDPARAM}, {0, NULL, ~0u, DIERR_INVALIDPARAM}, {0, dummy_callback, 0, DIERR_NOTINITIALIZED}, {0, dummy_callback, ~0u, DIERR_INVALIDPARAM}, {0xdeadbeef, NULL, 0, DIERR_INVALIDPARAM}, {0xdeadbeef, NULL, ~0u, DIERR_INVALIDPARAM}, {0xdeadbeef, dummy_callback, 0, DIERR_INVALIDPARAM}, {0xdeadbeef, dummy_callback, ~0u, DIERR_INVALIDPARAM}, }; IDirectInputA *pDI; HRESULT hr; int i; IDirectInputDeviceA *pDID; hr = CoCreateInstance(&CLSID_DirectInput, NULL, CLSCTX_INPROC_SERVER, &IID_IDirectInputA, (void **)&pDI); if (FAILED(hr)) { skip("Failed to instantiate a IDirectInputA instance: 0x%08x\n", hr); return; } for (i = 0; i < sizeof(create_device_tests)/sizeof(create_device_tests[0]); i++) { if (create_device_tests[i].pdev) pDID = (void *)0xdeadbeef; hr = IDirectInput_CreateDevice(pDI, create_device_tests[i].rguid, create_device_tests[i].pdev ? &pDID : NULL, NULL); ok(hr == create_device_tests[i].expected_hr, "[%d] IDirectInput_CreateDevice returned 0x%08x\n", i, hr); if (create_device_tests[i].pdev) ok(pDID == NULL, "[%d] Output interface pointer is %p\n", i, pDID); } for (i = 0; i < sizeof(enum_devices_tests)/sizeof(enum_devices_tests[0]); i++) { hr = IDirectInput_EnumDevices(pDI, enum_devices_tests[i].dwDevType, enum_devices_tests[i].lpCallback, NULL, enum_devices_tests[i].dwFlags); if (enum_devices_tests[i].todo) { todo_wine ok(hr == enum_devices_tests[i].expected_hr, "[%d] IDirectInput_EnumDevice returned 0x%08x\n", i, hr); } else ok(hr == enum_devices_tests[i].expected_hr, "[%d] IDirectInput_EnumDevice returned 0x%08x\n", i, hr); } hr = IDirectInput_GetDeviceStatus(pDI, NULL); ok(hr == E_POINTER, "IDirectInput_GetDeviceStatus returned 0x%08x\n", hr); hr = IDirectInput_GetDeviceStatus(pDI, &GUID_Unknown); ok(hr == DIERR_NOTINITIALIZED, "IDirectInput_GetDeviceStatus returned 0x%08x\n", hr); hr = IDirectInput_GetDeviceStatus(pDI, &GUID_SysMouse); ok(hr == DIERR_NOTINITIALIZED, "IDirectInput_GetDeviceStatus returned 0x%08x\n", hr); hr = IDirectInput_RunControlPanel(pDI, NULL, 0); ok(hr == DIERR_NOTINITIALIZED, "IDirectInput_RunControlPanel returned 0x%08x\n", hr); hr = IDirectInput_RunControlPanel(pDI, NULL, ~0u); ok(hr == DIERR_INVALIDPARAM, "IDirectInput_RunControlPanel returned 0x%08x\n", hr); hr = IDirectInput_RunControlPanel(pDI, (HWND)0xdeadbeef, 0); ok(hr == E_HANDLE, "IDirectInput_RunControlPanel returned 0x%08x\n", hr); hr = IDirectInput_RunControlPanel(pDI, (HWND)0xdeadbeef, ~0u); ok(hr == E_HANDLE, "IDirectInput_RunControlPanel returned 0x%08x\n", hr); IDirectInput_Release(pDI); }
TEST_F(RegistryTablesTest, test_registry_existing_key) { QueryData results; auto ret = queryKey(kTestKey, results); EXPECT_TRUE(ret.ok()); EXPECT_TRUE(results.size() > 0); }
static HRESULT WINAPI statusclb_OnObjectAvailable(IBindStatusCallback *iface, REFIID riid, IUnknown *punk) { ok(0, "unexpected call\n"); return E_NOTIMPL; }