# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[package]
name = "teaclave_unit_tests_enclave"
version = "0.5.0"
authors = ["Teaclave Contributors <dev@teaclave.apache.org>"]
description = "Enclave Unit Test"
license = "Apache-2.0"
edition = "2021"

[lib]
name = "teaclave_unit_tests_enclave"
crate-type = ["staticlib"]

[features]
default = []
mesalock_sgx = [
  "teaclave_attestation/mesalock_sgx",
  "teaclave_attestation/enclave_unit_test",
  "teaclave_binder/mesalock_sgx",
  "teaclave_rpc/mesalock_sgx",
  "teaclave_service_enclave_utils/mesalock_sgx",
  "teaclave_types/mesalock_sgx",
  "teaclave_types/enclave_unit_test",
  "teaclave_crypto/mesalock_sgx",
  "teaclave_crypto/enclave_unit_test",
  "teaclave_logger/mesalock_sgx",
  "teaclave_logger/enclave_unit_test",
  "teaclave_config/mesalock_sgx",
  "teaclave_access_control_service_enclave/mesalock_sgx",
  "teaclave_access_control_service_enclave/enclave_unit_test",
  "teaclave_authentication_service_enclave/mesalock_sgx",
  "teaclave_authentication_service_enclave/enclave_unit_test",
  "teaclave_management_service_enclave/mesalock_sgx",
  "teaclave_management_service_enclave/enclave_unit_test",
  "teaclave_storage_service_enclave/mesalock_sgx",
  "teaclave_storage_service_enclave/enclave_unit_test",
  "teaclave_execution_service_enclave/mesalock_sgx",
  "teaclave_execution_service_enclave/enclave_unit_test",
  "teaclave_scheduler_service_enclave/mesalock_sgx",
  "teaclave_scheduler_service_enclave/enclave_unit_test",
  "teaclave_frontend_service_enclave/mesalock_sgx",
  "teaclave_frontend_service_enclave/enclave_unit_test",
  "teaclave_worker/mesalock_sgx",
  "teaclave_worker/enclave_unit_test",
  "teaclave_executor/mesalock_sgx",
  "teaclave_executor/enclave_unit_test",
  "teaclave_function/mesalock_sgx",
  "teaclave_function/enclave_unit_test",
  "teaclave_runtime/mesalock_sgx",
  "teaclave_runtime/enclave_unit_test",
  "teaclave_executor_context/mesalock_sgx",
  "teaclave_executor_context/enclave_unit_test",
  "rusty-leveldb/mesalock_sgx",
  "rusty-leveldb/enclave_unit_test",
]
cov = ["teaclave_service_enclave_utils/cov"]

[dependencies]
log         = { version = "0.4.17", features = ["release_max_level_info"] }
anyhow      = { version = "1.0.26" }
serde       = { version = "1.0.92" }
thiserror   = { version = "1.0.9" }

teaclave_access_control_service_enclave = { path = "../../../services/access_control/enclave" }
teaclave_authentication_service_enclave = { path = "../../../services/authentication/enclave" }
teaclave_storage_service_enclave = { path = "../../../services/storage/enclave" }
teaclave_execution_service_enclave = { path = "../../../services/execution/enclave" }
teaclave_management_service_enclave = { path = "../../../services/management/enclave" }
teaclave_scheduler_service_enclave = { path = "../../../services/scheduler/enclave" }
teaclave_frontend_service_enclave = { path = "../../../services/frontend/enclave" }

teaclave_worker                = { path = "../../../worker" }
teaclave_executor              = { path = "../../../executor" }
teaclave_executor_context      = { path = "../../../executor/context" }
teaclave_function              = { path = "../../../function" }
teaclave_runtime               = { path = "../../../runtime" }
rusty-leveldb                  = { path = "../../../common/rusty_leveldb_sgx", default-features = false, optional = true }

teaclave_test_utils            = { path = "../../utils" }
teaclave_attestation           = { path = "../../../attestation" }
teaclave_config                = { path = "../../../config" }
teaclave_binder                = { path = "../../../binder" }
teaclave_rpc                   = { path = "../../../rpc" }
teaclave_service_enclave_utils = { path = "../../../services/utils/service_enclave_utils" }
teaclave_types                 = { path = "../../../types" }
teaclave_crypto                = { path = "../../../crypto" }
teaclave_logger                = { path = "../../../logger" }

[target.'cfg(not(target_vendor = "teaclave"))'.dependencies]
sgx_types = { version = "2.0.0" }
