Blame opae-libs/tests/xfpga/test_bmc_c.cpp

Packit 534379
// Copyright(c) 2018-2020, 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
Packit 534379
extern "C" {
Packit 534379
Packit 534379
#include <fcntl.h>
Packit 534379
#include <json-c/json.h>
Packit 534379
#include <stdlib.h>
Packit 534379
#include <uuid/uuid.h>
Packit 534379
#include "opae_int.h"
Packit 534379
#include "types_int.h"
Packit 534379
}
Packit 534379
Packit 534379
#include <config.h>
Packit 534379
#include <opae/fpga.h>
Packit 534379
Packit 534379
#include <dlfcn.h>
Packit 534379
#include <array>
Packit 534379
#include <cstdlib>
Packit 534379
#include <cstring>
Packit 534379
#include <map>
Packit 534379
#include <memory>
Packit 534379
#include <string>
Packit 534379
#include <vector>
Packit 534379
#include "gtest/gtest.h"
Packit 534379
#include "metrics/bmc/bmc.h"
Packit 534379
#include "metrics/bmc/bmc_ioctl.h"
Packit 534379
#include "metrics/bmc/bmcdata.h"
Packit 534379
#include "metrics/bmc/bmcinfo.h"
Packit 534379
#include "sysfs_int.h"
Packit 534379
#include "mock/test_system.h"
Packit 534379
#include "mock/test_utils.h"
Packit 534379
#include "token_list_int.h"
Packit 534379
#include "xfpga.h"
Packit 534379
Packit 534379
extern "C" {
Packit 534379
int xfpga_plugin_initialize(void);
Packit 534379
int xfpga_plugin_finalize(void);
Packit 534379
}
Packit 534379
Packit 534379
using namespace opae::testing;
Packit 534379
Packit 534379
class bmc_c_p : public ::testing::TestWithParam<std::string> {
Packit 534379
  protected:
Packit 534379
    bmc_c_p() 
Packit 534379
      : tokens_{{nullptr, nullptr}}, 
Packit 534379
        handle_(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
Packit 534379
    ASSERT_EQ(xfpga_fpgaGetProperties(nullptr, &filter_), FPGA_OK);
Packit 534379
    ASSERT_EQ(fpgaPropertiesSetObjectType(filter_, FPGA_DEVICE), FPGA_OK);
Packit 534379
    ASSERT_EQ(xfpga_fpgaEnumerate(&filter_, 1, tokens_.data(), tokens_.size(),
Packit 534379
                                  &num_matches_), FPGA_OK);
Packit 534379
    ASSERT_GT(num_matches_, 0);
Packit 534379
    ASSERT_EQ(xfpga_fpgaOpen(tokens_[0], &handle_, 0), FPGA_OK);
Packit 534379
  }
Packit 534379
Packit 534379
  virtual void TearDown() override {
Packit 534379
    EXPECT_EQ(fpgaDestroyProperties(&filter_), FPGA_OK);
Packit 534379
    for (auto &t : tokens_) {
Packit 534379
      if (t) {
Packit 534379
        EXPECT_EQ(xfpga_fpgaDestroyToken(&t), FPGA_OK);
Packit 534379
        t = nullptr;
Packit 534379
      }
Packit 534379
    }
Packit 534379
    if (handle_ != nullptr) {
Packit 534379
      EXPECT_EQ(xfpga_fpgaClose(handle_), FPGA_OK);
Packit 534379
      handle_ = nullptr;
Packit 534379
    }
Packit 534379
    xfpga_plugin_finalize();
Packit 534379
    system_->finalize();
Packit 534379
  }
Packit 534379
Packit 534379
  fpga_result write_sysfs_file(fpga_token token, const char *file, void *buf,
Packit 534379
                               size_t count);
Packit 534379
Packit 534379
  std::array<fpga_token, 2> tokens_;
Packit 534379
  fpga_handle handle_;
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
fpga_result bmc_c_p::write_sysfs_file(fpga_token token, const char *file,
Packit 534379
                                      void *buf, size_t count) {
Packit 534379
  fpga_result res = FPGA_OK;
Packit 534379
  char sysfspath[SYSFS_PATH_MAX] = { 0, };
Packit 534379
  int fd = 0;
Packit 534379
  size_t len;
Packit 534379
Packit 534379
  struct _fpga_token *tok = (struct _fpga_token *)token;
Packit 534379
  if (FPGA_TOKEN_MAGIC != tok->magic) {
Packit 534379
    return FPGA_INVALID_PARAM;
Packit 534379
  }
Packit 534379
Packit 534379
  len = strnlen(tok->sysfspath, sizeof(sysfspath) - 1);
Packit 534379
  strncpy(sysfspath, tok->sysfspath, len + 1);
Packit 534379
  strncat(sysfspath, "/", 2);
Packit 534379
  len = strnlen(file, sizeof(sysfspath) - (len + 1));
Packit 534379
  strncat(sysfspath, file, len + 1);
Packit 534379
Packit 534379
  glob_t pglob;
Packit 534379
  int gres = glob(sysfspath, GLOB_NOSORT, NULL, &pglob);
Packit 534379
  if ((gres) || (1 != pglob.gl_pathc)) {
Packit 534379
    globfree(&pglob);
Packit 534379
    return FPGA_NOT_FOUND;
Packit 534379
  }
Packit 534379
  fd = open(pglob.gl_pathv[0], O_WRONLY);
Packit 534379
  globfree(&pglob);
Packit 534379
  if (fd < 0) {
Packit 534379
    printf("open faild \n");
Packit 534379
    return FPGA_NOT_FOUND;
Packit 534379
  }
Packit 534379
Packit 534379
  ssize_t total_written = eintr_write(fd, buf, count);
Packit 534379
  printf("count %ld \n", count);
Packit 534379
  printf("total_written %ld \n", total_written);
Packit 534379
Packit 534379
  if (total_written == 0) {
Packit 534379
    close(fd);
Packit 534379
    printf("total_written faild \n");
Packit 534379
    return FPGA_INVALID_PARAM;
Packit 534379
  }
Packit 534379
Packit 534379
  close(fd);
Packit 534379
Packit 534379
  return res;
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmcGetLastResetCause,
Packit 534379
 *....................bmcGetFirmwareVersion
Packit 534379
 *....................bmcGetLastPowerdownCause functions
Packit 534379
 * @details    Validates bmc reset cause ,power down cause
Packit 534379
 *.....................bmc version
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_1) {
Packit 534379
  uint32_t version = 0;
Packit 534379
  char *string = NULL;
Packit 534379
Packit 534379
  // Get Reset & Power down cause
Packit 534379
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
  EXPECT_NE(bmcGetLastResetCause(tokens_[0], NULL), FPGA_OK);
Packit 534379
Packit 534379
  EXPECT_EQ(bmcGetLastPowerdownCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
  EXPECT_NE(bmcGetLastPowerdownCause(tokens_[0], NULL), FPGA_OK);
Packit 534379
Packit 534379
  // Get firmware version
Packit 534379
  EXPECT_EQ(bmcGetFirmwareVersion(tokens_[0], &version), FPGA_OK);
Packit 534379
  printf("bmc version=%d \n", version);
Packit 534379
Packit 534379
  EXPECT_NE(bmcGetFirmwareVersion(tokens_[0], NULL), FPGA_OK);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmcLoadSDRs,
Packit 534379
 *....................bmcReadSensorValues,
Packit 534379
 *....................bmcGetSDRDetails,
Packit 534379
 *....................bmcGetSensorReading,
Packit 534379
 *....................rawFromDouble,
Packit 534379
 *....................bmcDestroySensorValues,
Packit 534379
 *....................bmcDestroySDRs functions
Packit 534379
 * @details    Validates bmc load SDR and Read sensor values
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_2) {
Packit 534379
  bmc_sdr_handle sdrs = NULL;
Packit 534379
  bmc_values_handle values = NULL;
Packit 534379
  uint32_t num_sensors = 0;
Packit 534379
  uint32_t num_values = 0;
Packit 534379
  uint32_t i = 0;
Packit 534379
  uint32_t is_valid = 0;
Packit 534379
  double tmp = 0;
Packit 534379
  uint8_t raw = 0;
Packit 534379
  sdr_details details;
Packit 534379
Packit 534379
  memset(&details, 0, sizeof(sdr_details));
Packit 534379
Packit 534379
  // Load SDR
Packit 534379
  EXPECT_EQ(bmcLoadSDRs(tokens_[0], &sdrs, &num_sensors), FPGA_OK);
Packit 534379
  EXPECT_EQ(bmcReadSensorValues(sdrs, &values, &num_values), FPGA_OK);
Packit 534379
Packit 534379
  // Read sensor details & value
Packit 534379
  for (i = 0; i < num_sensors; i++) {
Packit 534379
    EXPECT_EQ(bmcGetSDRDetails(values, i, &details), FPGA_OK);
Packit 534379
    EXPECT_EQ(bmcGetSensorReading(values, i, &is_valid, &tmp), FPGA_OK);
Packit 534379
Packit 534379
    Values detail;
Packit 534379
    memset(&detail, 0, sizeof(detail));
Packit 534379
    EXPECT_EQ(rawFromDouble(&detail, tmp, &raw), FPGA_OK);
Packit 534379
Packit 534379
    detail.result_exp = 2;
Packit 534379
    EXPECT_EQ(rawFromDouble(&detail, tmp, &raw), FPGA_OK);
Packit 534379
Packit 534379
    detail.result_exp = -2;
Packit 534379
    EXPECT_EQ(rawFromDouble(&detail, tmp, &raw), FPGA_OK);
Packit 534379
  }
Packit 534379
Packit 534379
  // Destroy Sensor values & SDR
Packit 534379
  EXPECT_EQ(bmcDestroySensorValues(&values), FPGA_OK);
Packit 534379
  EXPECT_EQ(bmcDestroySDRs(&sdrs), FPGA_OK);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmcThresholdsTripped,
Packit 534379
 *....................bmcDestroyTripped functions
Packit 534379
 * @details    Validates bmc threshold trip
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_3) {
Packit 534379
  bmc_sdr_handle sdrs = NULL;
Packit 534379
  bmc_values_handle values = NULL;
Packit 534379
  uint32_t num_sensors = 0;
Packit 534379
  uint32_t num_values = 0;
Packit 534379
  tripped_thresholds *tripped = NULL;
Packit 534379
  uint32_t num_tripped = 0;
Packit 534379
  sdr_details details;
Packit 534379
Packit 534379
  memset(&details, 0, sizeof(details));
Packit 534379
  // Load SDR
Packit 534379
  EXPECT_EQ(bmcLoadSDRs(tokens_[0], &sdrs, &num_sensors), FPGA_OK);
Packit 534379
  EXPECT_EQ(bmcReadSensorValues(sdrs, &values, &num_values), FPGA_OK);
Packit 534379
Packit 534379
  // Get threshold trip point
Packit 534379
  EXPECT_EQ(bmcThresholdsTripped(values, &tripped, &num_tripped), FPGA_OK);
Packit 534379
  printf("num_tripped = %d \n", num_tripped);
Packit 534379
Packit 534379
  struct _bmc_values *vals = (struct _bmc_values *)values;
Packit 534379
  for (uint32_t i = 0; i < vals->num_records; i++) {
Packit 534379
    vals->contents[i].threshold_events._value = 1;
Packit 534379
  }
Packit 534379
Packit 534379
  // Get threshold trip point
Packit 534379
  EXPECT_EQ(bmcThresholdsTripped(values, &tripped, &num_tripped), FPGA_OK);
Packit 534379
  printf("num_tripped = %d \n", num_tripped);
Packit 534379
Packit 534379
  // Destroy Threshold
Packit 534379
  EXPECT_EQ(bmcDestroyTripped(tripped), FPGA_OK);
Packit 534379
Packit 534379
  EXPECT_EQ(bmcDestroySensorValues(&values), FPGA_OK);
Packit 534379
  EXPECT_EQ(bmcDestroySDRs(&sdrs), FPGA_OK);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmcSetHWThresholds,
Packit 534379
 *..................._bmcGetThreshold
Packit 534379
 *..................._bmcGetThreshold
Packit 534379
 *................. .fill_set_request fucntions
Packit 534379
 * @details    Validates bmc set and get thresholds
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_4) {
Packit 534379
  bmc_sdr_handle sdrs = NULL;
Packit 534379
  bmc_values_handle values = NULL;
Packit 534379
  uint32_t num_sensors = 0;
Packit 534379
  uint32_t num_values = 0;
Packit 534379
  sdr_details details;
Packit 534379
Packit 534379
  memset(&details, 0, sizeof(details));
Packit 534379
  // Load SDR
Packit 534379
  EXPECT_EQ(bmcLoadSDRs(tokens_[0], &sdrs, &num_sensors), FPGA_OK);
Packit 534379
  EXPECT_EQ(bmcReadSensorValues(sdrs, &values, &num_values), FPGA_OK);
Packit 534379
Packit 534379
  threshold_list thresh;
Packit 534379
Packit 534379
  memset(&thresh, 0, sizeof(thresh));
Packit 534379
  thresh.upper_nr_thresh.is_valid = 1;
Packit 534379
  thresh.upper_nr_thresh.value = 20;
Packit 534379
Packit 534379
  EXPECT_NE(bmcSetHWThresholds(sdrs, 1, &thresh), FPGA_OK);
Packit 534379
Packit 534379
  // Destroy sensor value and SDR
Packit 534379
  EXPECT_EQ(bmcDestroySensorValues(&values), FPGA_OK);
Packit 534379
  EXPECT_EQ(bmcDestroySDRs(&sdrs), FPGA_OK);
Packit 534379
Packit 534379
  // Set & Get  threshold
Packit 534379
  bmc_get_thresh_response thres;
Packit 534379
  _bmcGetThreshold(1, 1, &thres);
Packit 534379
Packit 534379
  bmc_set_thresh_request req;
Packit 534379
  _bmcSetThreshold(1, 1, &req;;
Packit 534379
Packit 534379
  Values vals;
Packit 534379
  memset(&vals, 0, sizeof(vals));
Packit 534379
  fill_set_request(&vals, &thresh, &req;;
Packit 534379
Packit 534379
  thresh.upper_nr_thresh.is_valid = true;
Packit 534379
  thresh.upper_c_thresh.is_valid = true;
Packit 534379
  thresh.upper_nc_thresh.is_valid = true;
Packit 534379
  thresh.lower_nr_thresh.is_valid = true;
Packit 534379
  thresh.lower_c_thresh.is_valid = true;
Packit 534379
  thresh.lower_nc_thresh.is_valid = true;
Packit 534379
Packit 534379
  fill_set_request(&vals, &thresh, &req;;
Packit 534379
Packit 534379
  thresh.upper_nr_thresh.is_valid = false;
Packit 534379
  thresh.upper_c_thresh.is_valid = false;
Packit 534379
  thresh.upper_nc_thresh.is_valid = false;
Packit 534379
  thresh.lower_nr_thresh.is_valid = false;
Packit 534379
  thresh.lower_c_thresh.is_valid = false;
Packit 534379
  thresh.lower_nc_thresh.is_valid = false;
Packit 534379
Packit 534379
  fill_set_request(&vals, &thresh, &req;;
Packit 534379
Packit 534379
  thresh.upper_nr_thresh.is_valid = false;
Packit 534379
  fill_set_request(&vals, &thresh, &req;;
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmcGetLastResetCause
Packit 534379
 * @details    Validates reset cause
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_5) {
Packit 534379
  uint32_t tot_bytes_ret = 0;
Packit 534379
  char *string = NULL;
Packit 534379
  void *buf = NULL;
Packit 534379
Packit 534379
  read_sysfs_file(
Packit 534379
      tokens_[0],
Packit 534379
      (const char *)"/sys/class/fpga/intel-fpga-dev.0/intel-fpga-fme.0/",
Packit 534379
      (void **)&buf, &tot_bytes_ret);
Packit 534379
Packit 534379
  // write to reset cause
Packit 534379
  reset_cause reset;
Packit 534379
  memset(&reset, 0, sizeof(reset_cause));
Packit 534379
  reset.completion_code = 1;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
Packit 534379
  EXPECT_NE(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.completion_code = 0;
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_EXTRST;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_BOD_IO;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_OCD;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_POR;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_SOFT;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_SPIKE;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reset.reset_cause = CHIP_RESET_CAUSE_WDT;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_RESET_FILE, (void *)(&reset),
Packit 534379
                   sizeof(reset_cause));
Packit 534379
  EXPECT_EQ(bmcGetLastResetCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  printf("string= %s", string);
Packit 534379
  if (string) {
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmcGetLastPowerdownCause
Packit 534379
 *...................bmcGetFirmwareVersion functions
Packit 534379
 * @details    Validates power down cause & FW version
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_6) {
Packit 534379
  powerdown_cause reset;
Packit 534379
  char *string = NULL;
Packit 534379
  device_id dev_id;
Packit 534379
Packit 534379
  memset(&reset, 0, sizeof(powerdown_cause));
Packit 534379
  memset(&dev_id, 0, sizeof(device_id));
Packit 534379
  reset.completion_code = 1;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_PWRDN_FILE, (void *)(&reset),
Packit 534379
                   sizeof(powerdown_cause));
Packit 534379
  EXPECT_NE(bmcGetLastPowerdownCause(tokens_[0], &string), FPGA_OK);
Packit 534379
  if (string) {
Packit 534379
    printf("string= %s", string);
Packit 534379
    free(string);
Packit 534379
    string = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  dev_id.completion_code = 1;
Packit 534379
  uint32_t version;
Packit 534379
  write_sysfs_file(tokens_[0], SYSFS_DEVID_FILE, (void *)(&dev_id),
Packit 534379
                   sizeof(device_id));
Packit 534379
  EXPECT_NE(bmcGetFirmwareVersion(tokens_[0], &version), FPGA_OK);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       bmc
Packit 534379
 * @brief      Tests: bmc_build_values
Packit 534379
 * @details    Validates build values
Packit 534379
 *
Packit 534379
 */
Packit 534379
TEST_P(bmc_c_p, test_bmc_7) {
Packit 534379
  sensor_reading reading;
Packit 534379
  sdr_header header;
Packit 534379
  sdr_key key;
Packit 534379
  sdr_body body;
Packit 534379
  Values *vals = NULL;
Packit 534379
Packit 534379
  memset(&reading, 0, sizeof(sensor_reading));
Packit 534379
  memset(&key, 0, sizeof(sdr_key));
Packit 534379
  memset(&header, 0, sizeof(sdr_header));
Packit 534379
  memset(&body, 0, sizeof(sdr_body));
Packit 534379
Packit 534379
  // build bmc values
Packit 534379
  reading.sensor_validity.sensor_state.sensor_scanning_disabled = true;
Packit 534379
  vals = bmc_build_values(&reading, &header, &key, &body);
Packit 534379
  if (vals) {
Packit 534379
    free(vals->name);
Packit 534379
    free(vals);
Packit 534379
    vals = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reading.sensor_validity.sensor_state.sensor_scanning_disabled = false;
Packit 534379
  reading.sensor_validity.sensor_state.event_messages_disabled = true;
Packit 534379
  vals = bmc_build_values(&reading, &header, &key, &body);
Packit 534379
  if (vals) {
Packit 534379
    free(vals->name);
Packit 534379
    free(vals);
Packit 534379
    vals = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  reading.sensor_validity.sensor_state.sensor_scanning_disabled = false;
Packit 534379
  reading.sensor_validity.sensor_state.event_messages_disabled = false;
Packit 534379
  vals = bmc_build_values(&reading, &header, &key, &body);
Packit 534379
  if (vals) {
Packit 534379
    free(vals->name);
Packit 534379
    free(vals);
Packit 534379
    vals = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  body.id_string_type_length_code.bits.format = ASCII_8;
Packit 534379
  body.id_string_type_length_code.bits.len_in_characters = 0;
Packit 534379
  vals = bmc_build_values(&reading, &header, &key, &body);
Packit 534379
  if (vals) {
Packit 534379
    free(vals->name);
Packit 534379
    free(vals);
Packit 534379
    vals = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  body.sensor_units_1.bits.analog_data_format = 0x3;
Packit 534379
  vals = bmc_build_values(&reading, &header, &key, &body);
Packit 534379
  if (vals) {
Packit 534379
    free(vals->name);
Packit 534379
    free(vals);
Packit 534379
    vals = NULL;
Packit 534379
  }
Packit 534379
Packit 534379
  body.sensor_units_2 = 0xff;
Packit 534379
  vals = bmc_build_values(&reading, &header, &key, &body);
Packit 534379
  if (vals) {
Packit 534379
    free(vals->name);
Packit 534379
    free(vals);
Packit 534379
    vals = NULL;
Packit 534379
  }
Packit 534379
}
Packit 534379
Packit 534379
INSTANTIATE_TEST_CASE_P(bmc_c, bmc_c_p,
Packit 534379
                        ::testing::ValuesIn(test_platform::mock_platforms({"dcp-rc"})));