blob: ea28bb0e3fe2a688ea76d14f60b8c65506460545 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/win/delayload_helpers.h"
#include <esent.h>
#include "base/test/gmock_expected_support.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base::win {
TEST(BaseWinDelayloadHelpersTest, LoadAllImportsForDll) {
bool loaded;
// Attempt to pre-load a delayloaded dll - use ESENT.dll.JetCloseDatabase as
// nothing in base:: is likely to need to call that in future but ESENT.dll is
// present on all Windows systems.
ASSERT_OK_AND_ASSIGN(loaded, LoadAllImportsForDll("ESENT.dll"));
EXPECT_TRUE(loaded);
// Expect this to fail, but not crash, as there is no database opened.
JET_DBID dbid{};
JET_ERR jet_error = JetCloseDatabase(NULL, dbid, 0);
EXPECT_NE(jet_error, JET_errSuccess);
// Expect that a module this module does not depend on does not load.
ASSERT_OK_AND_ASSIGN(loaded, LoadAllImportsForDll("not-a-module.dll"));
EXPECT_FALSE(loaded);
// Should be harmless to call this if a dll is not delayloaded.
ASSERT_OK_AND_ASSIGN(loaded, LoadAllImportsForDll("VERSION.dll"));
EXPECT_FALSE(loaded);
}
} // namespace base::win