Files
TheRock/rocm-systems/projects/hipfile/test/system/config.cpp
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

387 lines
13 KiB
C++

/* Copyright (c) Advanced Micro Devices, Inc. All rights reserved.
*
* SPDX-License-Identifier: MIT
*/
#include "hipfile-warnings.h"
#include "hipfile.h"
#include "test-common.h"
#include <cstddef>
#include <gtest/gtest.h>
#include <string>
#include <vector>
using namespace std;
HIPFILE_WARN_NO_GLOBAL_CTOR_OFF
// Test hipFile APIs that set/get configuration values
struct HipFileConfig : public ::testing::Test {
void SetUp() override
{
ASSERT_EQ(hipFileUseCount(), 0);
}
// Ensure the driver is deinitialized/closed after the test
void TearDown() override
{
// Ensure driver is opened so staged values are applied then cleared
ASSERT_EQ(hipFileDriverOpen(), HIPFILE_SUCCESS);
// Ensure driver is closed to clear applied values
while (hipFileUseCount()) {
ASSERT_EQ(hipFileDriverClose(), HIPFILE_SUCCESS);
}
}
};
TEST_F(HipFileConfig, SizeTParameterCantSetIfDriverOpen)
{
ASSERT_EQ(hipFileDriverOpen(), HIPFILE_SUCCESS);
auto set_after_open = hipFileSetParameterSizeT(hipFileParamExecutionMaxIOThreads, 10);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(set_after_open, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(set_after_open, HipFileOpError(hipFileDriverAlreadyOpen));
#endif
}
TEST_F(HipFileConfig, SizeTParameterGetDefault)
{
size_t default_;
auto get_default = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &default_);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_EQ(default_, 0);
#endif
}
TEST_F(HipFileConfig, SizeTParameterSetStagesValue)
{
size_t default_;
auto get_default = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &default_);
size_t target{10};
auto stage_target = hipFileSetParameterSizeT(hipFileParamExecutionMaxIOThreads, target);
size_t staged;
auto get_staged = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &staged);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(get_staged, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(get_staged, HIPFILE_SUCCESS);
ASSERT_EQ(target, staged);
#endif
}
TEST_F(HipFileConfig, SizeTParameterOpenAppliesValue)
{
size_t default_;
auto get_default = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &default_);
size_t target{10};
auto stage_target = hipFileSetParameterSizeT(hipFileParamExecutionMaxIOThreads, target);
auto driver_open = hipFileDriverOpen();
size_t applied;
auto get_applied = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &applied);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(get_applied, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(get_applied, HIPFILE_SUCCESS);
ASSERT_EQ(target, applied);
#endif
}
TEST_F(HipFileConfig, SizeTParameterCloseClearsAppliedValue)
{
size_t default_;
auto get_default = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &default_);
size_t target{10};
auto stage_target = hipFileSetParameterSizeT(hipFileParamExecutionMaxIOThreads, target);
// Open applies staged value and clears staged
auto driver_open = hipFileDriverOpen();
// Close clears applied value
auto driver_close = hipFileDriverClose();
size_t cleared;
auto get_cleared = hipFileGetParameterSizeT(hipFileParamExecutionMaxIOThreads, &cleared);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(driver_close, HIPFILE_SUCCESS);
ASSERT_EQ(get_cleared, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(driver_close, HIPFILE_SUCCESS);
ASSERT_EQ(get_cleared, HIPFILE_SUCCESS);
ASSERT_EQ(default_, cleared);
#endif
}
TEST_F(HipFileConfig, BoolParameterCantSetIfDriverOpen)
{
ASSERT_EQ(hipFileDriverOpen(), HIPFILE_SUCCESS);
auto set_after_open = hipFileSetParameterBool(hipFileParamUsePcip2pdma, true);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(set_after_open, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(set_after_open, HipFileOpError(hipFileDriverAlreadyOpen));
#endif
}
TEST_F(HipFileConfig, BoolParameterGetDefault)
{
bool default_;
auto get_default = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &default_);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_EQ(default_, false);
#endif
}
TEST_F(HipFileConfig, BoolParameterSetStagesValue)
{
bool default_;
auto get_default = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &default_);
constexpr bool target{true};
auto stage_target = hipFileSetParameterBool(hipFileParamUsePcip2pdma, target);
bool staged;
auto get_staged = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &staged);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(get_staged, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(get_staged, HIPFILE_SUCCESS);
ASSERT_EQ(target, staged);
#endif
}
TEST_F(HipFileConfig, BoolParameterOpenAppliesValue)
{
bool default_;
auto get_default = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &default_);
constexpr bool target{true};
auto stage_target = hipFileSetParameterBool(hipFileParamUsePcip2pdma, target);
auto driver_open = hipFileDriverOpen();
bool applied;
auto get_applied = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &applied);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(get_applied, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(get_applied, HIPFILE_SUCCESS);
ASSERT_EQ(target, applied);
#endif
}
TEST_F(HipFileConfig, BoolParameterCloseClearsAppliedValue)
{
bool default_;
auto get_default = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &default_);
constexpr bool target{true};
auto stage_target = hipFileSetParameterBool(hipFileParamUsePcip2pdma, target);
// Open applies staged value and clears staged
auto driver_open = hipFileDriverOpen();
// Close clears applied value
auto driver_close = hipFileDriverClose();
bool cleared;
auto get_cleared = hipFileGetParameterBool(hipFileParamUsePcip2pdma, &cleared);
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(driver_close, HIPFILE_SUCCESS);
ASSERT_EQ(get_cleared, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(driver_close, HIPFILE_SUCCESS);
ASSERT_EQ(get_cleared, HIPFILE_SUCCESS);
ASSERT_EQ(default_, cleared);
#endif
}
TEST_F(HipFileConfig, StringParameterCantSetIfDriverOpen)
{
ASSERT_EQ(hipFileDriverOpen(), HIPFILE_SUCCESS);
auto set_after_open = hipFileSetParameterString(hipFileParamLogDir, "/foo/bar");
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(set_after_open, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(set_after_open, HipFileOpError(hipFileDriverAlreadyOpen));
#endif
}
TEST_F(HipFileConfig, StringParameterGetDefault)
{
vector<char> buffer(64);
auto get_default =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string default_{buffer.data()};
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_EQ(default_, "");
#endif
}
TEST_F(HipFileConfig, StringParameterSetStagesValue)
{
vector<char> buffer(64);
auto get_default =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string default_{buffer.data()};
const string target{"/tmp"};
auto stage_target = hipFileSetParameterString(hipFileParamLogDir, target.c_str());
auto get_staged =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string staged{buffer.data()};
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(get_staged, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(get_staged, HIPFILE_SUCCESS);
ASSERT_EQ(target, staged);
#endif
}
TEST_F(HipFileConfig, StringParameterOpenAppliesValue)
{
vector<char> buffer(64);
auto get_default =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string default_{buffer.data()};
// The target value must specify a directory that exists otherwise it will not be applied when the driver
// is opened.
const string target{"/tmp"};
auto stage_target = hipFileSetParameterString(hipFileParamLogDir, target.c_str());
auto driver_open = hipFileDriverOpen();
auto get_applied =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string applied{buffer.data()};
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(get_applied, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(get_applied, HIPFILE_SUCCESS);
ASSERT_EQ(target, applied);
#endif
}
TEST_F(HipFileConfig, StringParameterCloseClearsAppliedValue)
{
vector<char> buffer(64);
auto get_default =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string default_{buffer.data()};
// The target value must specify a directory that exists otherwise it will not be applied when the driver
// is opened.
const string target{"/tmp"};
auto stage_target = hipFileSetParameterString(hipFileParamLogDir, target.c_str());
auto driver_open = hipFileDriverOpen();
auto driver_close = hipFileDriverClose();
auto get_cleared =
hipFileGetParameterString(hipFileParamLogDir, buffer.data(), static_cast<int>(buffer.size()));
string cleared{buffer.data()};
#if defined(__HIP_PLATFORM_AMD__)
ASSERT_EQ(get_default, HipFileOpError(hipFileInternalError));
ASSERT_EQ(stage_target, HipFileOpError(hipFileInternalError));
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(driver_close, HIPFILE_SUCCESS);
ASSERT_EQ(get_cleared, HipFileOpError(hipFileInternalError));
#else
ASSERT_EQ(get_default, HIPFILE_SUCCESS);
ASSERT_NE(default_, target);
ASSERT_EQ(stage_target, HIPFILE_SUCCESS);
ASSERT_EQ(driver_open, HIPFILE_SUCCESS);
ASSERT_EQ(driver_close, HIPFILE_SUCCESS);
ASSERT_EQ(get_cleared, HIPFILE_SUCCESS);
ASSERT_EQ(default_, cleared);
#endif
}
HIPFILE_WARN_NO_GLOBAL_CTOR_ON