Blame opae-libs/tests/bitstream/test_metadatav1_c.cpp

Packit 534379
// Copyright(c) 2019-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
#include "libbitstream/bitstream.h"
Packit 534379
#include "libbitstream/metadatav1.h"
Packit 534379
Packit 534379
extern "C" {
Packit 534379
Packit 534379
fpga_result opae_bitstream_parse_accelerator_cluster_v1(json_object *j_cluster,
Packit 534379
				opae_metadata_accelerator_cluster_v1 *cluster);
Packit 534379
Packit 534379
fpga_result opae_bitstream_parse_afu_image_v1(json_object *j_afu_image,
Packit 534379
					      opae_metadata_afu_image_v1 *img,
Packit 534379
					      fpga_guid pr_interface_id);
Packit 534379
Packit 534379
}
Packit 534379
Packit 534379
#include <config.h>
Packit 534379
#include <opae/fpga.h>
Packit 534379
Packit 534379
#include "gtest/gtest.h"
Packit 534379
#include "mock/test_system.h"
Packit 534379
Packit 534379
using namespace opae::testing;
Packit 534379
Packit 534379
class metadatav1_c_p : public ::testing::TestWithParam<std::string> {
Packit 534379
 protected:
Packit 534379
Packit 534379
  virtual void SetUp() override {
Packit 534379
    std::string platform_key = GetParam();
Packit 534379
    ASSERT_TRUE(test_platform::exists(platform_key));
Packit 534379
    platform_ = test_platform::get(platform_key);
Packit 534379
    system_ = test_system::instance();
Packit 534379
    system_->initialize();
Packit 534379
    system_->prepare_syfs(platform_);
Packit 534379
Packit 534379
    j_root_ = nullptr;
Packit 534379
  }
Packit 534379
Packit 534379
  virtual void TearDown() override {
Packit 534379
Packit 534379
    if (j_root_)
Packit 534379
      json_object_put(j_root_);
Packit 534379
Packit 534379
    system_->finalize();
Packit 534379
  }
Packit 534379
Packit 534379
  json_object *parse(const char *json_str)
Packit 534379
  {
Packit 534379
    enum json_tokener_error j_err = json_tokener_success;
Packit 534379
    return j_root_ = json_tokener_parse_verbose(json_str, &j_err);
Packit 534379
  }
Packit 534379
Packit 534379
  json_object *j_root_;
Packit 534379
  test_platform platform_;
Packit 534379
  test_system *system_;
Packit 534379
};
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       cluster_err0
Packit 534379
 * @brief      Test: opae_bitstream_parse_accelerator_cluster_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "total-contexts" key,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, cluster_err0) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"name": "nlb_400",
Packit 534379
"accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
})mdata";
Packit 534379
  json_object *j_cluster;
Packit 534379
Packit 534379
  j_cluster = parse(mdata);
Packit 534379
  ASSERT_NE(j_cluster, nullptr);
Packit 534379
Packit 534379
  opae_metadata_accelerator_cluster_v1 cluster;
Packit 534379
  memset(&cluster, 0, sizeof(cluster));
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_accelerator_cluster_v1(j_cluster,
Packit 534379
							&cluster),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(cluster.total_contexts, 0);
Packit 534379
  EXPECT_EQ(cluster.name, nullptr);
Packit 534379
  EXPECT_EQ(cluster.accelerator_type_uuid, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       cluster_err1
Packit 534379
 * @brief      Test: opae_bitstream_parse_accelerator_cluster_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "name" key,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, cluster_err1) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"total-contexts": 1,
Packit 534379
"accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
})mdata";
Packit 534379
  json_object *j_cluster;
Packit 534379
Packit 534379
  j_cluster = parse(mdata);
Packit 534379
  ASSERT_NE(j_cluster, nullptr);
Packit 534379
Packit 534379
  opae_metadata_accelerator_cluster_v1 cluster;
Packit 534379
  memset(&cluster, 0, sizeof(cluster));
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_accelerator_cluster_v1(j_cluster,
Packit 534379
							&cluster),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(cluster.total_contexts, 1);
Packit 534379
  EXPECT_EQ(cluster.name, nullptr);
Packit 534379
  EXPECT_EQ(cluster.accelerator_type_uuid, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       cluster_err2
Packit 534379
 * @brief      Test: opae_bitstream_parse_accelerator_cluster_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "accelerator-type-uuid" key,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, cluster_err2) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"total-contexts": 1,
Packit 534379
"name": "nlb_400"
Packit 534379
})mdata";
Packit 534379
  json_object *j_cluster;
Packit 534379
Packit 534379
  j_cluster = parse(mdata);
Packit 534379
  ASSERT_NE(j_cluster, nullptr);
Packit 534379
Packit 534379
  opae_metadata_accelerator_cluster_v1 cluster;
Packit 534379
  memset(&cluster, 0, sizeof(cluster));
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_accelerator_cluster_v1(j_cluster,
Packit 534379
							&cluster),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(cluster.total_contexts, 1);
Packit 534379
  EXPECT_EQ(cluster.name, nullptr);
Packit 534379
  EXPECT_EQ(cluster.accelerator_type_uuid, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err0
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "clock-frequency-high" key,
Packit 534379
 *             the fn returns FPGA_OK.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err0) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_OK);
Packit 534379
Packit 534379
  free(img.interface_uuid);
Packit 534379
  free(img.accelerator_clusters[0].name);
Packit 534379
  free(img.accelerator_clusters[0].accelerator_type_uuid);
Packit 534379
  free(img.accelerator_clusters);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err1
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "clock-frequency-low" key,
Packit 534379
 *             the fn returns FPGA_OK.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err1) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 31.2,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_OK);
Packit 534379
Packit 534379
  EXPECT_EQ(img.clock_frequency_high, 31.2);
Packit 534379
  EXPECT_EQ(img.power, 50.0);
Packit 534379
Packit 534379
  free(img.interface_uuid);
Packit 534379
  free(img.accelerator_clusters[0].name);
Packit 534379
  free(img.accelerator_clusters[0].accelerator_type_uuid);
Packit 534379
  free(img.accelerator_clusters);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err2
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "power" key,
Packit 534379
 *             the fn returns FPGA_OK.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err2) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 3.12,
Packit 534379
"clock-frequency-low": 1.56,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_OK);
Packit 534379
Packit 534379
  EXPECT_EQ(img.clock_frequency_high, 3.12);
Packit 534379
  EXPECT_EQ(img.clock_frequency_low, 1.56);
Packit 534379
Packit 534379
  free(img.interface_uuid);
Packit 534379
  free(img.accelerator_clusters[0].name);
Packit 534379
  free(img.accelerator_clusters[0].accelerator_type_uuid);
Packit 534379
  free(img.accelerator_clusters);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err3
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "magic-no" key,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err3) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err4
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains,
Packit 534379
 *             a "magic-no" key that doesn't match the expected,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err4) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605311,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err5
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains no,
Packit 534379
 *             "interface-uuid" key,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err5) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err6
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains an,
Packit 534379
 *             "interface-uuid" key that is not a valid guid,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err6) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "not a valid guid",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err7
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains no
Packit 534379
 *             "accelerator-clusters" key,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err7) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err8
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If the given json_object contains an,
Packit 534379
 *             "accelerator-clusters" key that is not an array,
Packit 534379
 *             the fn returns FPGA_EXCEPTION.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err8) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": 3
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err10
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If an error occurs when parsing
Packit 534379
 *             the "accelerator-clusters" array,
Packit 534379
 *             the fn frees any successfully-parsed
Packit 534379
 *             array entries and propagates the error
Packit 534379
 *             code from opae_bitstream_parse_accelerator_cluster_v1.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, image_err10) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  },
Packit 534379
  {
Packit 534379
    "total-contexts": "not an integer",
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_EXCEPTION);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       parse_v1_err1
Packit 534379
 * @brief      Test: opae_bitstream_parse_metadata_v1
Packit 534379
 * @details    If the given json_object has no
Packit 534379
 *             "platform-name" key,
Packit 534379
 *             the fn returns a valid v1 metadata object.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, parse_v1_err1) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
  "version": 1,
Packit 534379
  "afu-image": {
Packit 534379
    "clock-frequency-high": 312,
Packit 534379
    "clock-frequency-low": 156,
Packit 534379
    "power": 50,
Packit 534379
    "interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
    "magic-no": 488605312,
Packit 534379
Packit 534379
    "accelerator-clusters": [
Packit 534379
      {
Packit 534379
        "total-contexts": 1,
Packit 534379
        "name": "nlb_400",
Packit 534379
        "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
      }
Packit 534379
    ]
Packit 534379
  }
Packit 534379
})mdata";
Packit 534379
Packit 534379
  json_object *root;
Packit 534379
Packit 534379
  root = parse(mdata);
Packit 534379
  ASSERT_NE(root, nullptr);
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  opae_bitstream_metadata_v1 *md =
Packit 534379
    opae_bitstream_parse_metadata_v1(root, ifc_id);
Packit 534379
Packit 534379
  ASSERT_NE(md, nullptr);
Packit 534379
  opae_bitstream_release_metadata_v1(md);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       parse_v1_err2
Packit 534379
 * @brief      Test: opae_bitstream_parse_metadata_v1
Packit 534379
 * @details    If the given json_object has no
Packit 534379
 *             "afu-image" key,
Packit 534379
 *             the fn returns NULL.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, parse_v1_err2) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
  "version": 1,
Packit 534379
  "platform-name": "DCP"
Packit 534379
})mdata";
Packit 534379
Packit 534379
  json_object *root;
Packit 534379
Packit 534379
  root = parse(mdata);
Packit 534379
  ASSERT_NE(root, nullptr);
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_metadata_v1(root,
Packit 534379
                                             ifc_id),
Packit 534379
            nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       parse_v1_err3
Packit 534379
 * @brief      Test: opae_bitstream_parse_metadata_v1
Packit 534379
 * @details    If the call to opae_bitstream_parse_afu_image_v1 fails,
Packit 534379
 *             the fn returns NULL.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, parse_v1_err3) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
  "version": 1,
Packit 534379
  "afu-image": {
Packit 534379
    "clock-frequency-high": 312,
Packit 534379
    "clock-frequency-low": 156,
Packit 534379
    "power": 50,
Packit 534379
    "interface-uuid": "not a valid guid",
Packit 534379
    "magic-no": 488605312,
Packit 534379
Packit 534379
    "accelerator-clusters": [
Packit 534379
      {
Packit 534379
        "total-contexts": 1,
Packit 534379
        "name": "nlb_400",
Packit 534379
        "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
      }
Packit 534379
    ]
Packit 534379
  },
Packit 534379
  "platform-name": "DCP"
Packit 534379
})mdata";
Packit 534379
Packit 534379
  json_object *root;
Packit 534379
Packit 534379
  root = parse(mdata);
Packit 534379
  ASSERT_NE(root, nullptr);
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_metadata_v1(root,
Packit 534379
                                             ifc_id),
Packit 534379
            nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       parse_v1_ok
Packit 534379
 * @brief      Test: opae_bitstream_parse_metadata_v1
Packit 534379
 * @details    When successful,
Packit 534379
 *             the fn returns places the parsed "interface-uuid" key
Packit 534379
 *             into the pr_interface_id parameter,
Packit 534379
 *             and returns FPGA_OK.
Packit 534379
 */
Packit 534379
TEST_P(metadatav1_c_p, parse_v1_ok) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
  "version": 1,
Packit 534379
  "afu-image": {
Packit 534379
    "clock-frequency-high": 312.0,
Packit 534379
    "clock-frequency-low": 156,
Packit 534379
    "power": 50.2,
Packit 534379
    "interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
    "magic-no": 488605312,
Packit 534379
Packit 534379
    "accelerator-clusters": [
Packit 534379
      {
Packit 534379
        "total-contexts": 1,
Packit 534379
        "name": "nlb_400",
Packit 534379
        "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
      },
Packit 534379
      {
Packit 534379
        "total-contexts": 2,
Packit 534379
        "name": "nlb_400",
Packit 534379
        "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
      },
Packit 534379
      {
Packit 534379
        "total-contexts": 3,
Packit 534379
        "name": "nlb_400",
Packit 534379
        "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
      }
Packit 534379
    ]
Packit 534379
  },
Packit 534379
  "platform-name": "DCP"
Packit 534379
})mdata";
Packit 534379
Packit 534379
  fpga_guid expected_id = {
Packit 534379
    0x01, 0x23, 0x45, 0x67,
Packit 534379
    0x89, 0xab,
Packit 534379
    0xcd, 0xef,
Packit 534379
    0x01, 0x23,
Packit 534379
    0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
Packit 534379
  };
Packit 534379
Packit 534379
  json_object *root;
Packit 534379
Packit 534379
  root = parse(mdata);
Packit 534379
  ASSERT_NE(root, nullptr);
Packit 534379
Packit 534379
  fpga_guid ifc_id = { 0, };
Packit 534379
Packit 534379
  opae_bitstream_metadata_v1 *md = 
Packit 534379
    opae_bitstream_parse_metadata_v1(root, ifc_id);
Packit 534379
Packit 534379
  EXPECT_EQ(memcmp(ifc_id, expected_id, sizeof(fpga_guid)), 0);
Packit 534379
Packit 534379
  ASSERT_NE(md, nullptr);
Packit 534379
  EXPECT_EQ(md->version, 1);
Packit 534379
Packit 534379
  ASSERT_NE(md->platform_name, nullptr);
Packit 534379
  EXPECT_STREQ(md->platform_name, "DCP");
Packit 534379
Packit 534379
  EXPECT_EQ(md->afu_image.clock_frequency_high, 312.0);
Packit 534379
  EXPECT_EQ(md->afu_image.clock_frequency_low, 156.0);
Packit 534379
  EXPECT_EQ(md->afu_image.power, 50.2);
Packit 534379
Packit 534379
  ASSERT_NE(md->afu_image.interface_uuid, nullptr);
Packit 534379
  EXPECT_STREQ(md->afu_image.interface_uuid, "01234567-89AB-CDEF-0123-456789ABCDEF");
Packit 534379
Packit 534379
  EXPECT_EQ(md->afu_image.magic_no, 0x1d1f8680);
Packit 534379
Packit 534379
  EXPECT_EQ(md->afu_image.num_clusters, 3);
Packit 534379
Packit 534379
  ASSERT_NE(md->afu_image.accelerator_clusters, nullptr);
Packit 534379
Packit 534379
  int i;
Packit 534379
  for (i = 0 ; i < md->afu_image.num_clusters ; ++i) {
Packit 534379
    opae_metadata_accelerator_cluster_v1 *c =
Packit 534379
      &md->afu_image.accelerator_clusters[i];
Packit 534379
Packit 534379
    EXPECT_EQ(c->total_contexts, i + 1);
Packit 534379
    ASSERT_NE(c->name, nullptr);
Packit 534379
    EXPECT_STREQ(c->name, "nlb_400");
Packit 534379
    ASSERT_NE(c->accelerator_type_uuid, nullptr);
Packit 534379
    EXPECT_STREQ(c->accelerator_type_uuid, "d8424dc4-a4a3-c413-f89e-433683f9040b");
Packit 534379
  }
Packit 534379
Packit 534379
  opae_bitstream_release_metadata_v1(md);
Packit 534379
}
Packit 534379
Packit 534379
INSTANTIATE_TEST_CASE_P(metadatav1_c, metadatav1_c_p,
Packit 534379
    ::testing::ValuesIn(test_platform::platforms({})));
Packit 534379
Packit 534379
Packit 534379
class mock_metadatav1_c_p : public metadatav1_c_p {};
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       image_err9
Packit 534379
 * @brief      Test: opae_bitstream_parse_afu_image_v1
Packit 534379
 * @details    If calloc fails,
Packit 534379
 *             the fn returns FPGA_NO_MEMORY.
Packit 534379
 */
Packit 534379
TEST_P(mock_metadatav1_c_p, image_err9) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
"clock-frequency-high": 312,
Packit 534379
"clock-frequency-low": 156,
Packit 534379
"power": 50,
Packit 534379
"interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
"magic-no": 488605312,
Packit 534379
Packit 534379
"accelerator-clusters": [
Packit 534379
  {
Packit 534379
    "total-contexts": 1,
Packit 534379
    "name": "nlb_400",
Packit 534379
    "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
  }
Packit 534379
]
Packit 534379
})mdata";
Packit 534379
  json_object *j_afu_image;
Packit 534379
Packit 534379
  j_afu_image = parse(mdata);
Packit 534379
  ASSERT_NE(j_afu_image, nullptr);
Packit 534379
Packit 534379
  opae_metadata_afu_image_v1 img;
Packit 534379
  memset(&img, 0, sizeof(img));
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  system_->invalidate_calloc(0, "opae_bitstream_parse_afu_image_v1");
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_afu_image_v1(j_afu_image,
Packit 534379
					      &img,
Packit 534379
					      ifc_id),
Packit 534379
            FPGA_NO_MEMORY);
Packit 534379
Packit 534379
  EXPECT_EQ(img.interface_uuid, nullptr);
Packit 534379
  EXPECT_EQ(img.accelerator_clusters, nullptr);
Packit 534379
}
Packit 534379
Packit 534379
/**
Packit 534379
 * @test       parse_v1_err0
Packit 534379
 * @brief      Test: opae_bitstream_parse_metadata_v1
Packit 534379
 * @details    If calloc fails,
Packit 534379
 *             the fn returns NULL.
Packit 534379
 */
Packit 534379
TEST_P(mock_metadatav1_c_p, parse_v1_err0) {
Packit 534379
    const char *mdata =
Packit 534379
    R"mdata({
Packit 534379
  "version": 1,
Packit 534379
  "afu-image": {
Packit 534379
    "clock-frequency-high": 312,
Packit 534379
    "clock-frequency-low": 156,
Packit 534379
    "power": 50,
Packit 534379
    "interface-uuid": "01234567-89AB-CDEF-0123-456789ABCDEF",
Packit 534379
    "magic-no": 488605312,
Packit 534379
Packit 534379
    "accelerator-clusters": [
Packit 534379
      {
Packit 534379
        "total-contexts": 1,
Packit 534379
        "name": "nlb_400",
Packit 534379
        "accelerator-type-uuid": "d8424dc4-a4a3-c413-f89e-433683f9040b"
Packit 534379
      }
Packit 534379
    ]
Packit 534379
  },
Packit 534379
  "platform-name": "DCP"
Packit 534379
})mdata";
Packit 534379
Packit 534379
  json_object *root;
Packit 534379
Packit 534379
  root = parse(mdata);
Packit 534379
  ASSERT_NE(root, nullptr);
Packit 534379
Packit 534379
  fpga_guid ifc_id;
Packit 534379
Packit 534379
  system_->invalidate_calloc(0, "opae_bitstream_parse_metadata_v1");
Packit 534379
  EXPECT_EQ(opae_bitstream_parse_metadata_v1(root,
Packit 534379
                                             ifc_id),
Packit 534379
            nullptr);
Packit 534379
}
Packit 534379
Packit 534379
INSTANTIATE_TEST_CASE_P(metadatav1_c, mock_metadatav1_c_p,
Packit 534379
    ::testing::ValuesIn(test_platform::mock_platforms({})));