|
Packit |
534379 |
// Copyright(c) 2017-2018, Intel Corporation
|
|
Packit |
534379 |
//
|
|
Packit |
534379 |
// Redistribution and use in source and binary forms, with or without
|
|
Packit |
534379 |
// modification, are permitted provided that the following conditions are met:
|
|
Packit |
534379 |
//
|
|
Packit |
534379 |
// * Redistributions of source code must retain the above copyright notice,
|
|
Packit |
534379 |
// this list of conditions and the following disclaimer.
|
|
Packit |
534379 |
// * Redistributions in binary form must reproduce the above copyright notice,
|
|
Packit |
534379 |
// this list of conditions and the following disclaimer in the documentation
|
|
Packit |
534379 |
// and/or other materials provided with the distribution.
|
|
Packit |
534379 |
// * Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
534379 |
// may be used to endorse or promote products derived from this software
|
|
Packit |
534379 |
// without specific prior written permission.
|
|
Packit |
534379 |
//
|
|
Packit |
534379 |
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
534379 |
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
534379 |
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit |
534379 |
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
Packit |
534379 |
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
Packit |
534379 |
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
Packit |
534379 |
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
Packit |
534379 |
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
Packit |
534379 |
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
Packit |
534379 |
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
Packit |
534379 |
// POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
534379 |
extern "C"{
|
|
Packit |
534379 |
#include "types_int.h"
|
|
Packit |
534379 |
fpga_result free_umsg_buffer(fpga_handle);
|
|
Packit |
534379 |
int xfpga_plugin_initialize(void);
|
|
Packit |
534379 |
int xfpga_plugin_finalize(void);
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#include "xfpga.h"
|
|
Packit |
534379 |
#include "intel-fpga.h"
|
|
Packit |
534379 |
#include <cstdarg>
|
|
Packit |
534379 |
#include <linux/ioctl.h>
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#include "gtest/gtest.h"
|
|
Packit |
534379 |
#include "mock/test_system.h"
|
|
Packit |
534379 |
#include "sysfs_int.h"
|
|
Packit |
534379 |
|
|
Packit |
534379 |
#undef FPGA_MSG
|
|
Packit |
534379 |
#define FPGA_MSG(fmt, ...) \
|
|
Packit |
534379 |
printf("MOCK " fmt "\n", ## __VA_ARGS__)
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
using namespace opae::testing;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
int umsg_port_info(mock_object * m, int request, va_list argp){
|
|
Packit |
534379 |
int retval = -1;
|
|
Packit |
534379 |
errno = EINVAL;
|
|
Packit |
534379 |
static bool gEnableIRQ = false;
|
|
Packit |
534379 |
UNUSED_PARAM(m);
|
|
Packit |
534379 |
UNUSED_PARAM(request);
|
|
Packit |
534379 |
struct fpga_port_info *pinfo = va_arg(argp, struct fpga_port_info *);
|
|
Packit |
534379 |
if (!pinfo) {
|
|
Packit |
534379 |
FPGA_MSG("pinfo is NULL");
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
if (pinfo->argsz != sizeof(*pinfo)) {
|
|
Packit |
534379 |
FPGA_MSG("wrong structure size");
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
pinfo->flags = 0;
|
|
Packit |
534379 |
pinfo->num_regions = 1;
|
|
Packit |
534379 |
pinfo->num_umsgs = 8;
|
|
Packit |
534379 |
if (gEnableIRQ) {
|
|
Packit |
534379 |
pinfo->capability = FPGA_PORT_CAP_ERR_IRQ | FPGA_PORT_CAP_UAFU_IRQ;
|
|
Packit |
534379 |
pinfo->num_uafu_irqs = 1;
|
|
Packit |
534379 |
} else {
|
|
Packit |
534379 |
pinfo->capability = 0;
|
|
Packit |
534379 |
pinfo->num_uafu_irqs = 0;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
retval = 0;
|
|
Packit |
534379 |
errno = 0;
|
|
Packit |
534379 |
out:
|
|
Packit |
534379 |
return retval;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
out_EINVAL:
|
|
Packit |
534379 |
retval = -1;
|
|
Packit |
534379 |
errno = EINVAL;
|
|
Packit |
534379 |
goto out;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
int umsg_set_mode(mock_object * m, int request, va_list argp){
|
|
Packit |
534379 |
int retval = -1;
|
|
Packit |
534379 |
errno = EINVAL;
|
|
Packit |
534379 |
UNUSED_PARAM(m);
|
|
Packit |
534379 |
UNUSED_PARAM(request);
|
|
Packit |
534379 |
struct fpga_port_umsg_cfg *ucfg = va_arg(argp, struct fpga_port_umsg_cfg *);
|
|
Packit |
534379 |
if (!ucfg) {
|
|
Packit |
534379 |
FPGA_MSG("ucfg is NULL");
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
if (ucfg->argsz != sizeof(*ucfg)) {
|
|
Packit |
534379 |
FPGA_MSG("wrong structure size");
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
if (ucfg->flags != 0) {
|
|
Packit |
534379 |
FPGA_MSG("unexpected flags %u", ucfg->flags);
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
/* TODO: check hint_bitmap */
|
|
Packit |
534379 |
if (ucfg->hint_bitmap >> 8) {
|
|
Packit |
534379 |
FPGA_MSG("invalid hint_bitmap 0x%x", ucfg->hint_bitmap);
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
retval = 0;
|
|
Packit |
534379 |
errno = 0;
|
|
Packit |
534379 |
out:
|
|
Packit |
534379 |
return retval;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
out_EINVAL:
|
|
Packit |
534379 |
retval = -1;
|
|
Packit |
534379 |
errno = EINVAL;
|
|
Packit |
534379 |
goto out;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
int umsg_set_base_addr(mock_object * m, int request, va_list argp){
|
|
Packit |
534379 |
int retval = -1;
|
|
Packit |
534379 |
errno = EINVAL;
|
|
Packit |
534379 |
UNUSED_PARAM(m);
|
|
Packit |
534379 |
UNUSED_PARAM(request);
|
|
Packit |
534379 |
struct fpga_port_umsg_base_addr *ubase = va_arg(argp, struct fpga_port_umsg_base_addr *);
|
|
Packit |
534379 |
if (!ubase) {
|
|
Packit |
534379 |
FPGA_MSG("ubase is NULL");
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
if (ubase->argsz != sizeof(*ubase)) {
|
|
Packit |
534379 |
FPGA_MSG("wrong structure size");
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
if (ubase->flags != 0) {
|
|
Packit |
534379 |
FPGA_MSG("unexpected flags %u", ubase->flags);
|
|
Packit |
534379 |
goto out_EINVAL;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
/* TODO: check iova */
|
|
Packit |
534379 |
retval = 0;
|
|
Packit |
534379 |
errno = 0;
|
|
Packit |
534379 |
out:
|
|
Packit |
534379 |
return retval;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
out_EINVAL:
|
|
Packit |
534379 |
retval = -1;
|
|
Packit |
534379 |
errno = EINVAL;
|
|
Packit |
534379 |
goto out;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
class umsg_c_p
|
|
Packit |
534379 |
: public ::testing::TestWithParam<std::string> {
|
|
Packit |
534379 |
protected:
|
|
Packit |
534379 |
umsg_c_p()
|
|
Packit |
534379 |
: handle_(nullptr),
|
|
Packit |
534379 |
tokens_{{nullptr, nullptr}} {}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
virtual void SetUp() override {
|
|
Packit |
534379 |
ASSERT_TRUE(test_platform::exists(GetParam()));
|
|
Packit |
534379 |
platform_ = test_platform::get(GetParam());
|
|
Packit |
534379 |
system_ = test_system::instance();
|
|
Packit |
534379 |
system_->initialize();
|
|
Packit |
534379 |
system_->prepare_syfs(platform_);
|
|
Packit |
534379 |
ASSERT_EQ(xfpga_plugin_initialize(), FPGA_OK);
|
|
Packit |
534379 |
filter_ = nullptr;
|
|
Packit |
534379 |
ASSERT_EQ(xfpga_fpgaGetProperties(nullptr, &filter_), FPGA_OK);
|
|
Packit |
534379 |
ASSERT_EQ(fpgaPropertiesSetObjectType(filter_, FPGA_ACCELERATOR), FPGA_OK);
|
|
Packit |
534379 |
ASSERT_EQ(fpgaPropertiesSetDeviceID(filter_,
|
|
Packit |
534379 |
platform_.devices[0].device_id), FPGA_OK);
|
|
Packit |
534379 |
ASSERT_EQ(xfpga_fpgaEnumerate(&filter_, 1, tokens_.data(), tokens_.size(),
|
|
Packit |
534379 |
&num_matches_),
|
|
Packit |
534379 |
FPGA_OK);
|
|
Packit |
534379 |
ASSERT_EQ(xfpga_fpgaOpen(tokens_[0], &handle_, 0), FPGA_OK);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_GET_INFO, umsg_port_info);
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
virtual void TearDown() override {
|
|
Packit |
534379 |
EXPECT_EQ(fpgaDestroyProperties(&filter_), FPGA_OK);
|
|
Packit |
534379 |
if (handle_) { EXPECT_EQ(xfpga_fpgaClose(handle_), FPGA_OK); }
|
|
Packit |
534379 |
|
|
Packit |
534379 |
for (auto &t : tokens_) {
|
|
Packit |
534379 |
if (t) {
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, xfpga_fpgaDestroyToken(&t);;
|
|
Packit |
534379 |
t = nullptr;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
xfpga_plugin_finalize();
|
|
Packit |
534379 |
system_->finalize();
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
fpga_handle handle_;
|
|
Packit |
534379 |
std::array<fpga_token, 2> tokens_;
|
|
Packit |
534379 |
fpga_properties filter_;
|
|
Packit |
534379 |
uint32_t num_matches_;
|
|
Packit |
534379 |
test_platform platform_;
|
|
Packit |
534379 |
test_system *system_;
|
|
Packit |
534379 |
};
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_p
|
|
Packit |
534379 |
* @brief test_umsg_drv_02
|
|
Packit |
534379 |
* @details When the parameters are invalid and the drivers are loaded,
|
|
Packit |
534379 |
* fpgaUmsgGetNumber returns error.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P (umsg_c_p, test_umsg_drv_02) {
|
|
Packit |
534379 |
uint64_t Umsg_num = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// NULL Driver handle
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetNumUmsg(NULL, &Umsg_num));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
struct _fpga_handle* _handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
_handle->magic = 0x123;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetNumUmsg(_handle, &Umsg_num));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Reset handle magic
|
|
Packit |
534379 |
_handle->magic = FPGA_HANDLE_MAGIC;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_p
|
|
Packit |
534379 |
* @brief test_umsg_drv_03
|
|
Packit |
534379 |
* @details When the parameters are invalid and the drivers are loaded,
|
|
Packit |
534379 |
* fpgaUmsgGetNumber returns error.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P (umsg_c_p, test_umsg_drv_03) {
|
|
Packit |
534379 |
uint64_t Umsg_num = 0;
|
|
Packit |
534379 |
int fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// NULL Driver handle
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetNumUmsg(NULL, &Umsg_num));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid Input Parameter
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetNumUmsg(handle_, NULL));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
struct _fpga_handle* _handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
fddev = _handle->fddev;
|
|
Packit |
534379 |
_handle->fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetNumUmsg(handle_, &Umsg_num));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Reset handle fd
|
|
Packit |
534379 |
_handle->fddev = fddev;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_drv_04
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the parameters are Invalid and the drivers are
|
|
Packit |
534379 |
* loaded, fpgaUmsgSetAttributes retuns error.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_p, test_umsg_drv_05) {
|
|
Packit |
534379 |
uint64_t Umsghit_Disble = 0;
|
|
Packit |
534379 |
int fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_MODE,umsg_set_mode);
|
|
Packit |
534379 |
// NULL Driver handle
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaSetUmsgAttributes(NULL, Umsghit_Disble));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid handle magic
|
|
Packit |
534379 |
struct _fpga_handle* _handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
_handle->magic = 0x123;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaSetUmsgAttributes(handle_, Umsghit_Disble));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Valid handle magic
|
|
Packit |
534379 |
_handle->magic = FPGA_HANDLE_MAGIC;
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaClose(handle_));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid Driver handle
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaOpen(tokens_[0], &handle_, 0));
|
|
Packit |
534379 |
_handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid handle fd
|
|
Packit |
534379 |
fddev = _handle->fddev;
|
|
Packit |
534379 |
_handle->fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaSetUmsgAttributes(handle_, Umsghit_Disble));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Valid handle fd
|
|
Packit |
534379 |
_handle->fddev = fddev;
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaClose(handle_));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invlaid Input Paramter
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaOpen(tokens_[0], &handle_, 0));
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaSetUmsgAttributes(handle_, 0xFFFFFFFF));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_drv_07
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the parameters are invalid and the drivers are
|
|
Packit |
534379 |
* loaded, xfpga_fpgaGetUmsgPtr returns fpga error.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_p, test_umsg_drv_07) {
|
|
Packit |
534379 |
uint64_t* umsg_ptr = NULL;
|
|
Packit |
534379 |
int fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// NULL Driver handle
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetUmsgPtr(NULL, &umsg_ptr));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid handle magic
|
|
Packit |
534379 |
struct _fpga_handle* _handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
_handle->magic = 0x123;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetUmsgPtr(handle_, &umsg_ptr));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Valid handle magic
|
|
Packit |
534379 |
_handle->magic = FPGA_HANDLE_MAGIC;
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaClose(handle_));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid Driver handle
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaOpen(tokens_[0], &handle_, 0));
|
|
Packit |
534379 |
_handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid handle fd
|
|
Packit |
534379 |
fddev = _handle->fddev;
|
|
Packit |
534379 |
_handle->fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetUmsgPtr(handle_, &umsg_ptr));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Valid handle fd
|
|
Packit |
534379 |
_handle->fddev = fddev;
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaClose(handle_));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid Input Parameter
|
|
Packit |
534379 |
ASSERT_EQ(FPGA_OK, xfpga_fpgaOpen(tokens_[0], &handle_, 0));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetUmsgPtr(handle_, NULL));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_08
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the handle parameter to xfpga_fpgaTriggerUmsg
|
|
Packit |
534379 |
* is NULL, the function returns FPGA_INVALID_PARAM.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_p, test_umsg_drv_08) {
|
|
Packit |
534379 |
int fddev = -1;
|
|
Packit |
534379 |
auto _handle = (struct _fpga_handle*)handle_;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Null handle
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaTriggerUmsg(NULL, 0));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Invalid handle fd
|
|
Packit |
534379 |
fddev = _handle->fddev;
|
|
Packit |
534379 |
_handle->fddev = -1;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaTriggerUmsg(handle_, 0));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Reset fd for fpgaClose
|
|
Packit |
534379 |
_handle->fddev = fddev;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
INSTANTIATE_TEST_CASE_P(umsg_c, umsg_c_p, ::testing::ValuesIn(test_platform::platforms({ "skx-p" })));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
class umsg_c_mcp_p : public umsg_c_p {
|
|
Packit |
534379 |
};
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_p
|
|
Packit |
534379 |
* @brief test_umsg_drv_01
|
|
Packit |
534379 |
* @details When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* fpgaUmsgGetNumber returns number of umsgs supported by
|
|
Packit |
534379 |
* slot.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P (umsg_c_mcp_p, test_umsg_drv_01) {
|
|
Packit |
534379 |
uint64_t Umsg_num = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaGetNumUmsg(handle_, NULL));
|
|
Packit |
534379 |
// Get umsg number
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, xfpga_fpgaGetNumUmsg(handle_, &Umsg_num));
|
|
Packit |
534379 |
EXPECT_GT(Umsg_num, 0);
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_drv_04
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* fpgaUmsgSetAttributes sets umsg hit Enable / Disable.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mcp_p, test_umsg_drv_04) {
|
|
Packit |
534379 |
uint64_t Umsghit_Enable = 0xffff;
|
|
Packit |
534379 |
uint64_t Umsghit_Disble = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Set umsg hint
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_MODE,umsg_set_mode);
|
|
Packit |
534379 |
EXPECT_NE(FPGA_OK, xfpga_fpgaSetUmsgAttributes(handle_, Umsghit_Enable));
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, xfpga_fpgaSetUmsgAttributes(handle_, Umsghit_Disble));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
INSTANTIATE_TEST_CASE_P(umsg_c, umsg_c_mcp_p,
|
|
Packit |
534379 |
::testing::ValuesIn(test_platform::platforms({"skx-p"})));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
class umsg_c_mock_p : public umsg_c_p {
|
|
Packit |
534379 |
};
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_08
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the handle parameter to xfpga_fpgaTriggerUmsg
|
|
Packit |
534379 |
* is valid, Then the function returns FPGA_OK when
|
|
Packit |
534379 |
* hugepages is allocated.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, test_umsg_08) {
|
|
Packit |
534379 |
auto res = xfpga_fpgaTriggerUmsg(handle_, 0);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, res) << "\t return value is " << res;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief get_num_umsg_ioctl_err
|
|
Packit |
534379 |
* @details When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* but the ioctl fails,
|
|
Packit |
534379 |
* fpgaGetNumUmsg returns FPGA_INVALID_PARAM/FPGA_EXCEPTION
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, get_num_umsg_ioctl_err) {
|
|
Packit |
534379 |
uint64_t num = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_GET_INFO, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaGetNumUmsg(handle_, &num);;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EFAULT
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_GET_INFO, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_EXCEPTION, xfpga_fpgaGetNumUmsg(handle_, &num);;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to ENOTSUP
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_GET_INFO, dummy_ioctl<-1,ENOTSUP>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_NOT_SUPPORTED, xfpga_fpgaGetNumUmsg(handle_, &num);;
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief set_umsg_attr_ioctl_err
|
|
Packit |
534379 |
* @details When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* but the ioctl fails,
|
|
Packit |
534379 |
* fpgaSetUmsgAttributes returns FPGA_INVALID_PARAM/FPGA_EXCEPTION
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, set_umsg_attr_ioctl_err) {
|
|
Packit |
534379 |
uint64_t value = 0;
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_MODE, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaSetUmsgAttributes(handle_, value));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EFAULT
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_MODE, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_EXCEPTION, xfpga_fpgaSetUmsgAttributes(handle_, value));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to ENOTSUP
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_MODE, dummy_ioctl<-1,ENOTSUP>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_NOT_SUPPORTED, xfpga_fpgaSetUmsgAttributes(handle_, value));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief get_umsg_ptr_ioctl_err
|
|
Packit |
534379 |
* @details When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* but the ioctl fails on FPGA_PORT_UMSG_ENABLE and FPGA_PORT_DMA_UNMAP
|
|
Packit |
534379 |
* fpgaGetUmsgPtr returns FPGA_INVALID_PARAM/FPGA_EXCEPTION
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, get_umsg_ptr_ioctl_err) {
|
|
Packit |
534379 |
uint64_t *value = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_ENABLE, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_UNMAP, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EFAULT
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_ENABLE, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_UNMAP, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_EXCEPTION, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to ENOTSUP
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_ENABLE, dummy_ioctl<-1,ENOTSUP>);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_UNMAP, dummy_ioctl<-1,ENOTSUP>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_NOT_SUPPORTED, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief get_umsg_ptr_ioctl_err_02
|
|
Packit |
534379 |
* @details When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* but the ioctl fails on FPGA_PORT_UMSG_SET_BASE_ADDR
|
|
Packit |
534379 |
* and FPGA_PORT_DMA_UNMAP. fpgaGetUmsgPtr returns
|
|
Packit |
534379 |
* FPGA_INVALID_PARAM/FPGA_EXCEPTION
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, get_umsg_ptr_ioctl_err_02) {
|
|
Packit |
534379 |
uint64_t *value = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to ENOTSUP
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_BASE_ADDR, dummy_ioctl<-1,ENOTSUP>);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_UNMAP, dummy_ioctl<-1,ENOTSUP>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_NOT_SUPPORTED, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EFAULT
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_BASE_ADDR, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_UNMAP, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_EXCEPTION, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief get_umsg_ptr_ioctl_err_03
|
|
Packit |
534379 |
* @details When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* but the ioctl fails on FPGA_PORT_DMA_MAP. fpgaGetUmsgPtr returns
|
|
Packit |
534379 |
* FPGA_INVALID_PARAM/FPGA_EXCEPTION
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, get_umsg_ptr_ioctl_err_03) {
|
|
Packit |
534379 |
uint64_t *value = 0;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_MAP, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EFAULT
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_MAP, dummy_ioctl<-1,EFAULT>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_EXCEPTION, xfpga_fpgaGetUmsgPtr(handle_, &value));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief invalid_free_umsg_buffer
|
|
Packit |
534379 |
* @details When the drivers are loaded and handle umsg_virt is mapped,
|
|
Packit |
534379 |
* but ioctl fails on FPGA_PORT_UMSG_DISABLE, FPGA_ERR outputs
|
|
Packit |
534379 |
* "Failed to disable UMSG" and returns FPGA_OK
|
|
Packit |
534379 |
* When ioctl fails on FPGA_PORT_UMSG_SET_BASE_ADDR, FPGA_ERR outputs
|
|
Packit |
534379 |
* "led to zero UMSG address" and returns FPGA_OK
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, invalid_free_umsg_buffer) {
|
|
Packit |
534379 |
uint64_t* umsg_ptr = NULL;
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_BASE_ADDR, umsg_set_base_addr);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_ENABLE, dummy_ioctl<0,EINVAL>);
|
|
Packit |
534379 |
auto res = xfpga_fpgaGetUmsgPtr(handle_, &umsg_ptr);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, res);
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_DISABLE, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, free_umsg_buffer(handle_));
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
res = xfpga_fpgaGetUmsgPtr(handle_, &umsg_ptr);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, res);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_DISABLE, dummy_ioctl<0,EINVAL>);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_BASE_ADDR, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, free_umsg_buffer(handle_));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test umsg_c_mock_p
|
|
Packit |
534379 |
* @brief invalid_free_umsg_buffer
|
|
Packit |
534379 |
* @details When the drivers are loaded and handle umsg_virt is mapped,
|
|
Packit |
534379 |
* but ioctl fails on FPGA_PORT_DMA_UNMAP, FPGA_ERR outputs
|
|
Packit |
534379 |
* "Failed to unmap UMSG Buffer" and returns FPGA_OK
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, invalid_free_umsg_buffer_02) {
|
|
Packit |
534379 |
uint64_t* umsg_ptr = NULL;
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_BASE_ADDR, umsg_set_base_addr);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_ENABLE, dummy_ioctl<0,EINVAL>);
|
|
Packit |
534379 |
auto res = xfpga_fpgaGetUmsgPtr(handle_, &umsg_ptr);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, res);
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_DMA_UNMAP, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, free_umsg_buffer(handle_));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_drv_06
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the parameters are valid and the drivers are loaded,
|
|
Packit |
534379 |
* xfpga_fpgaGetUmsgPtr returns umsg address.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, test_umsg_drv_06) {
|
|
Packit |
534379 |
uint64_t* umsg_ptr = NULL;
|
|
Packit |
534379 |
fpga_result res;
|
|
Packit |
534379 |
|
|
Packit |
534379 |
// Get umsg buffer
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_SET_BASE_ADDR, umsg_set_base_addr);
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_UMSG_ENABLE, dummy_ioctl<0,EINVAL>);
|
|
Packit |
534379 |
res = xfpga_fpgaGetUmsgPtr(handle_, &umsg_ptr);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_OK, res);
|
|
Packit |
534379 |
EXPECT_TRUE(umsg_ptr != NULL) << "\t this is umsg:" << res;
|
|
Packit |
534379 |
printf("umsg_ptr %p", umsg_ptr);
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
/**
|
|
Packit |
534379 |
* @test Umsg_09
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
* @brief When the handle parameter to xfpga_fpgaTriggerUmsg
|
|
Packit |
534379 |
* is invalid, Then the function returns FPGA_EXCEPTION.
|
|
Packit |
534379 |
*
|
|
Packit |
534379 |
*/
|
|
Packit |
534379 |
TEST_P(umsg_c_mock_p, test_umsg_09) {
|
|
Packit |
534379 |
// register an ioctl handler that will return -1 and set errno to EINVAL
|
|
Packit |
534379 |
system_->register_ioctl_handler(FPGA_PORT_GET_INFO, dummy_ioctl<-1,EINVAL>);
|
|
Packit |
534379 |
EXPECT_EQ(FPGA_INVALID_PARAM, xfpga_fpgaTriggerUmsg(handle_, 0));
|
|
Packit |
534379 |
}
|
|
Packit |
534379 |
|
|
Packit |
534379 |
INSTANTIATE_TEST_CASE_P(umsg_c, umsg_c_mock_p,
|
|
Packit |
534379 |
::testing::ValuesIn(test_platform::mock_platforms({ "skx-p"})));
|
|
Packit |
534379 |
|