/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
 
 * ubs-hcom is licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *      http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

#include "test_msg.h"

using namespace std;
using namespace ock::hcom;
void TestMsg::SetUp() const {}
void TestMsg::TearDown() const {}

void TestMsg::SetUpTestCase() {}
void TestMsg::TearDownTestCase() {}

TEST_F(TestMsg, test_msg_response_give_nullptr_return_ok)
{
    EXPECT_EQ(HTracerInit("30000"), NN_OK);

    TRACE_DELAY_BEGIN(0);
    TRACE_DELAY_END(0, 0);
    auto tTranceInfos = TracerServiceHelper::GetTraceInfos(0, 0, TraceManager::IsLatencyQuantileEnable());
    Message response(nullptr, 0);
    EXPECT_EQ(QueryTraceInfoResponse::BuildMessage(tTranceInfos, response), NN_OK);
    HTracerExit();
}

TEST_F(TestMsg, test_msg_response_give_new_return_true)
{
    EXPECT_EQ(HTracerInit("2999"), NN_OK);
    QueryTraceInfoRequest *queryRequest = static_cast<QueryTraceInfoRequest *>(malloc(sizeof(QueryTraceInfoRequest)));
    queryRequest->serviceId = 1;
    Message request(queryRequest, sizeof(QueryTraceInfoRequest));

    TRACE_DELAY_BEGIN(0);
    TRACE_DELAY_END(0, 0);
    TRACE_DELAY_BEGIN(1);
    TRACE_DELAY_END(1, 0);
    TRACE_DELAY_BEGIN(2);
    TRACE_DELAY_END(2, 0);

    auto tTranceInfos = TracerServiceHelper::GetTraceInfos(0, 0, TraceManager::IsLatencyQuantileEnable());

    uint32_t bodySize = sizeof(uint32_t) + sizeof(TTraceInfo) * tTranceInfos.size();
    uint32_t messageSize = sizeof(MessageHeader) + bodySize;
    Message queryResponse{};

    EXPECT_EQ(QueryTraceInfoResponse::BuildMessage(tTranceInfos, queryResponse), NN_OK);

    HTracerExit();
}

TEST_F(TestMsg, test_msg_give_request_return_true)
{
    QueryTraceInfoRequest queryRequest;
    queryRequest.serviceId = 1;
    EXPECT_EQ(queryRequest.serviceId, 1);
    EXPECT_EQ(queryRequest.bodySize, 0);
    EXPECT_EQ(queryRequest.crc, 0);
    EXPECT_EQ(queryRequest.version, VERSION);
    EXPECT_EQ(queryRequest.magicCode, MAGIC_CODE);
    EXPECT_EQ(queryRequest.opcode, TRACE_OP_QUERY);
}