// -------------------------------------------------------------------------------------------
// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
// This file is part of the AWS CDI-SDK, licensed under the BSD 2-Clause "Simplified" License.
// License details at: https://github.com/aws/aws-cdi-sdk/blob/mainline/LICENSE
// -------------------------------------------------------------------------------------------

/**
 * @file
 * @brief
 * This file contains a unit test for the CdiList functionality.
 */

#include "cdi_core_api.h"
#include "cdi_logger_api.h"

/// Test case for multiline logger API when a component is disabled.
static CdiReturnStatus TestMultilineLoggerDisabled(void)
{
    CdiLoggerInitialize();

    CdiLogHandle handle = CdiLoggerThreadLogGet();
    CdiLogMultilineState state;
    bool component_enabled = false;

    CdiLoggerComponentEnable(handle, kLogComponentEndpointManager, component_enabled);
    CdiLoggerMultilineBegin(handle, kLogComponentEndpointManager, kLogError, "SomeFunction", 123, &state);
    CdiLoggerMultiline(&state, "This is a multiline message");
    CdiLoggerMultilineEnd(&state);

    CdiLoggerComponentEnable(handle, kLogComponentEndpointManager, component_enabled);
    CdiLoggerMultilineBegin(handle, kLogComponentEndpointManager, kLogError, "SomeFunction", 123, &state);
    CdiLoggerMultiline(&state, "This is another multiline message");
    char* buffer = CdiLoggerMultilineGetBuffer(&state);
    CdiLoggerMultilineEnd(&state);

    CdiLoggerShutdown(false);

    return component_enabled == (NULL != buffer) ? kCdiStatusOk : kCdiStatusFatal;
}

/// Helper macro.
#define RUN_TEST(test_func)                     \
    do {                                        \
        CdiReturnStatus test_rs = test_func();  \
        if (kCdiStatusOk != test_rs) {          \
            CDI_LOG_THREAD(kLogError, "Logger test "#test_func" failed [%s].", CdiCoreStatusToString(test_rs)); \
            rs = kCdiStatusFatal;               \
    } } while (false)                           \

CdiReturnStatus TestUnitLogger(void)
{
    CdiReturnStatus rs = kCdiStatusOk;
    RUN_TEST(TestMultilineLoggerDisabled);
    return rs;
}