blob: f6fb88bb99b03fbcb84f75026bf1a087d20ecef4 [file] [log] [blame]
// 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.
#ifndef SRC_SECURITY_TEE_MANAGER_TEST_COMMON_H_
#define SRC_SECURITY_TEE_MANAGER_TEST_COMMON_H_
#include <fuchsia/tee/cpp/fidl.h>
#include <gtest/gtest.h>
#include <tee-client-api/tee_client_api.h>
namespace optee {
namespace test {
struct OperationResult {
TEEC_Result result;
uint32_t return_origin;
};
::testing::AssertionResult IsTeecSuccess(TEEC_Result result);
::testing::AssertionResult IsTeecSuccess(const OperationResult& op_result);
// Helper class to print numeric values in hex for gtest
template <typename NumericType>
class Hex {
public:
constexpr explicit Hex(NumericType number) : number_(number) {}
friend std::ostream& operator<<(std::ostream& os, const Hex<NumericType>& obj) {
return os << "0x" << std::hex << obj.number_;
}
private:
NumericType number_;
};
std::vector<uint8_t> StringToBuffer(const std::string& s);
std::string BufferToString(const std::vector<uint8_t>& buf);
class ContextGuard {
public:
ContextGuard();
explicit ContextGuard(TEEC_Context* context);
~ContextGuard();
ContextGuard(ContextGuard&& other);
ContextGuard& operator=(ContextGuard&& other);
ContextGuard(const ContextGuard&) = delete;
ContextGuard& operator=(const ContextGuard&) = delete;
bool IsValid() const;
TEEC_Context* Get() const;
void Close();
TEEC_Context* Release();
private:
TEEC_Context* context_;
};
class SessionGuard {
public:
SessionGuard();
explicit SessionGuard(TEEC_Session* session);
~SessionGuard();
SessionGuard(SessionGuard&& other);
SessionGuard& operator=(SessionGuard&& other);
SessionGuard(const SessionGuard&) = delete;
SessionGuard& operator=(const SessionGuard&) = delete;
bool IsValid() const;
TEEC_Session* Get() const;
void Close();
TEEC_Session* Release();
private:
TEEC_Session* session_;
};
} // namespace test
} // namespace optee
#endif // SRC_SECURITY_TEE_MANAGER_TEST_COMMON_H_