|
Packit Service |
724aca |
/*
|
|
Packit Service |
724aca |
* Copyright (C) 2019 Intel Corporation.
|
|
Packit Service |
724aca |
* All rights reserved.
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
724aca |
* modification, are permitted provided that the following conditions are met:
|
|
Packit Service |
724aca |
* 1. Redistributions of source code must retain the above copyright notice(s),
|
|
Packit Service |
724aca |
* this list of conditions and the following disclaimer.
|
|
Packit Service |
724aca |
* 2. Redistributions in binary form must reproduce the above copyright notice(s),
|
|
Packit Service |
724aca |
* this list of conditions and the following disclaimer in the documentation
|
|
Packit Service |
724aca |
* and/or other materials provided with the distribution.
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
|
|
Packit Service |
724aca |
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
Packit Service |
724aca |
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
|
Packit Service |
724aca |
* EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
Packit Service |
724aca |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
Packit Service |
724aca |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
Packit Service |
724aca |
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
Packit Service |
724aca |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
Packit Service |
724aca |
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
Packit Service |
724aca |
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit Service |
724aca |
*/
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#include "memkind.h"
|
|
Packit Service |
724aca |
#include "include/memkind/internal/memkind_private.h"
|
|
Packit Service |
724aca |
#include "include/memkind/internal/memkind_pmem.h"
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#include "common.h"
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#include <sys/statfs.h>
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
extern const char *PMEM_DIR;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
class MemkindConfigTests: public ::testing::Test
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
protected:
|
|
Packit Service |
724aca |
struct memkind_config *global_test_cfg;
|
|
Packit Service |
724aca |
void SetUp()
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
global_test_cfg = memkind_config_new();
|
|
Packit Service |
724aca |
ASSERT_NE(nullptr, global_test_cfg);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
void TearDown()
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_config_delete(global_test_cfg);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
};
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests, test_TC_MEMKIND_CreateAndDestroyEmptyConfig)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
struct memkind_config *tmp_cfg = memkind_config_new();
|
|
Packit Service |
724aca |
ASSERT_NE(nullptr, tmp_cfg);
|
|
Packit Service |
724aca |
memkind_config_delete(tmp_cfg);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests, test_TC_MEMKIND_PmemConSetConfigSizeZero)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_config_set_size(global_test_cfg, 0U);
|
|
Packit Service |
724aca |
ASSERT_EQ(global_test_cfg->pmem_size, 0U);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests, test_TC_MEMKIND_PmemSetConfigSizeNotZero)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_config_set_size(global_test_cfg, 100 * MB);
|
|
Packit Service |
724aca |
ASSERT_EQ(global_test_cfg->pmem_size, 100 * MB);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests, test_TC_MEMKIND_PmemSetConfigPath)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_config_set_path(global_test_cfg, PMEM_DIR);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
ASSERT_STREQ(global_test_cfg->pmem_dir, PMEM_DIR);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests, test_TC_MEMKIND_PmemSetDefaultMemoryUsagePolicy)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_config_set_memory_usage_policy(global_test_cfg,
|
|
Packit Service |
724aca |
MEMKIND_MEM_USAGE_POLICY_DEFAULT);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
ASSERT_EQ(global_test_cfg->policy, MEMKIND_MEM_USAGE_POLICY_DEFAULT);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests, test_TC_MEMKIND_SetConservativeMemoryUsagePolicy)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_config_set_memory_usage_policy(global_test_cfg,
|
|
Packit Service |
724aca |
MEMKIND_MEM_USAGE_POLICY_CONSERVATIVE);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
ASSERT_EQ(global_test_cfg->policy, MEMKIND_MEM_USAGE_POLICY_CONSERVATIVE);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests,
|
|
Packit Service |
724aca |
test_TC_MEMKIND_PmemCreatePmemWithParamsFailWrongDirectory)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_t pmem_kind = nullptr;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
memkind_config_set_path(global_test_cfg, "/temp/non_exisitng_directory");
|
|
Packit Service |
724aca |
memkind_config_set_size(global_test_cfg, 0U);
|
|
Packit Service |
724aca |
memkind_config_set_memory_usage_policy(global_test_cfg,
|
|
Packit Service |
724aca |
MEMKIND_MEM_USAGE_POLICY_DEFAULT);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
int err = memkind_create_pmem_with_config(global_test_cfg, &pmem_kind);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, MEMKIND_ERROR_INVALID);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests,
|
|
Packit Service |
724aca |
test_TC_MEMKIND_PmemCreatePmemWithParamsFailWrongSize)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_t pmem_kind = nullptr;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
memkind_config_set_path(global_test_cfg, PMEM_DIR);
|
|
Packit Service |
724aca |
memkind_config_set_size(global_test_cfg, MEMKIND_PMEM_MIN_SIZE -1);
|
|
Packit Service |
724aca |
memkind_config_set_memory_usage_policy(global_test_cfg,
|
|
Packit Service |
724aca |
MEMKIND_MEM_USAGE_POLICY_DEFAULT);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
int err = memkind_create_pmem_with_config(global_test_cfg, &pmem_kind);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, MEMKIND_ERROR_INVALID);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests,
|
|
Packit Service |
724aca |
test_TC_MEMKIND_PmemCreatePmemWithParamsFailWrongPolicy)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_t pmem_kind = nullptr;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
memkind_config_set_path(global_test_cfg, PMEM_DIR);
|
|
Packit Service |
724aca |
memkind_config_set_size(global_test_cfg, MEMKIND_PMEM_MIN_SIZE -1);
|
|
Packit Service |
724aca |
memkind_config_set_memory_usage_policy(global_test_cfg,
|
|
Packit Service |
724aca |
MEMKIND_MEM_USAGE_POLICY_MAX_VALUE);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
int err = memkind_create_pmem_with_config(global_test_cfg, &pmem_kind);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, MEMKIND_ERROR_INVALID);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
TEST_F(MemkindConfigTests,
|
|
Packit Service |
724aca |
test_TC_MEMKIND_PmemCreatePmemWithParamsSuccessCheckConservativePolicy)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
memkind_t pmem_kind = nullptr;
|
|
Packit Service |
724aca |
int err = 0;
|
|
Packit Service |
724aca |
double blocksBeforeFree = 0;
|
|
Packit Service |
724aca |
double blocksAfterFree = 0;
|
|
Packit Service |
724aca |
struct memkind_pmem *priv = nullptr;
|
|
Packit Service |
724aca |
void *temp_ptr = nullptr;
|
|
Packit Service |
724aca |
struct stat st;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
memkind_config_set_path(global_test_cfg, PMEM_DIR);
|
|
Packit Service |
724aca |
memkind_config_set_size(global_test_cfg, 0U);
|
|
Packit Service |
724aca |
memkind_config_set_memory_usage_policy(global_test_cfg,
|
|
Packit Service |
724aca |
MEMKIND_MEM_USAGE_POLICY_CONSERVATIVE);
|
|
Packit Service |
724aca |
err = memkind_create_pmem_with_config(global_test_cfg, &pmem_kind);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, 0);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
priv = static_cast<memkind_pmem *>(pmem_kind->priv);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
temp_ptr = memkind_malloc(pmem_kind, 1 * KB);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
err = fstat(priv->fd, &st);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, 0);
|
|
Packit Service |
724aca |
blocksBeforeFree = st.st_blocks;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
memkind_free(pmem_kind, temp_ptr);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
err = fstat(priv->fd, &st);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, 0);
|
|
Packit Service |
724aca |
blocksAfterFree = st.st_blocks;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
//if blocksAfterFree is less than blocksBeforeFree, extent was called.
|
|
Packit Service |
724aca |
ASSERT_LT(blocksAfterFree, blocksBeforeFree);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
err = memkind_destroy_kind(pmem_kind);
|
|
Packit Service |
724aca |
ASSERT_EQ(err, 0);
|
|
Packit Service |
724aca |
}
|