#include <gtest/gtest.h>

#include <stdint.h>
#include <string.h>

extern "C" {
  #include "five_api.h"
  #include "pa_api.h"
}

extern "C" int FiveTaskGetIntegrity(pid_t pid) {
  return 0;
}

class PaApiTest : public ::testing::Test {
protected:
  virtual void SetUp() {
    memset(&m_handler, 0, sizeof(m_handler));
  }

  virtual void TearDown() {
    PaHandlerDestroy(&m_handler);
  }

  PaHandler m_handler;
};

TEST_F(PaApiTest, PaApiCreateHandle) {
  PaResult result = PaHandlerCreate(&m_handler);

  EXPECT_EQ(result, PA_SUCCESS);
}

TEST_F(PaApiTest, PaApiCreateHandle_DoubleTimes) {
  PaResult result;
  PaHandler handler1;
  PaHandler handler2;

  result = PaHandlerCreate(&handler1);
  EXPECT_EQ(result, PA_SUCCESS);

  result = PaHandlerCreate(&handler2);
  EXPECT_EQ(result, PA_SUCCESS);

  PaHandlerDestroy(&handler1);
  PaHandlerDestroy(&handler2);
}

TEST_F(PaApiTest, PaApiCreateHandle_NULL) {
  PaResult result = PaHandlerCreate(NULL);

  EXPECT_EQ(result, PA_INVALID_ARGUMENTS);
}

TEST_F(PaApiTest, PaApiDestroyHandle_Null) {
  EXPECT_NO_FATAL_FAILURE(PaHandlerDestroy(NULL));
}
