// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <gtest/gtest.h>

#include "tools/fidlcat/interception_tests/interception_workflow_test.h"

namespace fidlcat {

std::unique_ptr<SystemCallTest> ZxChannelCreate(int64_t result, std::string_view result_name,
                                                uint32_t options, zx_handle_t* out0,
                                                zx_handle_t* out1);

#define DISPLAY_STACK_TEST_CONTENT(errno, level, expected)                                       \
  decode_options_.stack_level = level;                                                           \
  zx_handle_t out0 = 0x12345678;                                                                 \
  zx_handle_t out1 = 0x87654321;                                                                 \
  PerformDisplayTest("$plt(zx_channel_create)", ZxChannelCreate(errno, #errno, 0, &out0, &out1), \
                     expected)

#define DISPLAY_STACK_TEST(name, errno, level, expected) \
  TEST_F(InterceptionWorkflowTestX64, name) {            \
    DISPLAY_STACK_TEST_CONTENT(errno, level, expected);  \
  }                                                      \
  TEST_F(InterceptionWorkflowTestArm, name) { DISPLAY_STACK_TEST_CONTENT(errno, level, expected); }

DISPLAY_STACK_TEST(
    DisplayNoStack, ZX_OK, kNoStack,
    "\n"
    "\x1B[32m0.000000\x1B[0m "
    "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m zx_channel_create("
    "options: \x1B[32muint32\x1B[0m = \x1B[34m0\x1B[0m)\n"
    "\x1B[32m0.000000\x1B[0m "
    "  -> \x1B[32mZX_OK\x1B[0m (out0: \x1B[32mhandle\x1B[0m = \x1B[31m12345678\x1B[0m, "
    "out1: \x1B[32mhandle\x1B[0m = \x1B[31m87654321\x1B[0m)\n")

DISPLAY_STACK_TEST(
    DisplayPartialStack, ZX_OK, kPartialStack,
    "\n"
    "\x1B[32m0.000000\x1B[0m "
    "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m \x1B[103m"
    "at \x1B[31mfidlcat/main.cc\x1B[0m\x1B[103m:\x1B[34m10:2\x1B[0m\n"
    "\x1B[32m0.000000\x1B[0m "
    "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m \x1B[103m"
    "at \x1B[31mfidlcat/foo.cc\x1B[0m\x1B[103m:\x1B[34m50:4\x1B[0m\n"
    "\x1B[32m0.000000\x1B[0m "
    "test_3141 \x1B[31m3141\x1B[0m:\x1B[31m8764\x1B[0m zx_channel_create("
    "options: \x1B[32muint32\x1B[0m = \x1B[34m0\x1B[0m)\n"
    "\x1B[32m0.000000\x1B[0m "
    "  -> \x1B[32mZX_OK\x1B[0m (out0: \x1B[32mhandle\x1B[0m = \x1B[31m12345678\x1B[0m, "
    "out1: \x1B[32mhandle\x1B[0m = \x1B[31m87654321\x1B[0m)\n")

#define BAD_STACK_TEST_CONTENT(errno, expected)                                                  \
  set_bad_stack();                                                                               \
  zx_handle_t out0 = 0x12345678;                                                                 \
  zx_handle_t out1 = 0x87654321;                                                                 \
  PerformAbortedTest("$plt(zx_channel_create)", ZxChannelCreate(errno, #errno, 0, &out0, &out1), \
                     expected)

#define BAD_STACK_TEST(name, errno, expected)                                            \
  TEST_F(InterceptionWorkflowTestX64, name) { BAD_STACK_TEST_CONTENT(errno, expected); } \
  TEST_F(InterceptionWorkflowTestArm, name) { BAD_STACK_TEST_CONTENT(errno, expected); }

// Checks that we don't crash if zxdb doesn't provide a stack.
BAD_STACK_TEST(BadStack, ZX_OK, "")

}  // namespace fidlcat
