# Copyright 2016 gRPC authors.
#
# Licensed 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.

load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test", "grpc_cc_binary", "grpc_package")

grpc_package(name = "test/core/channel")

licenses(["notice"])  # Apache v2

grpc_cc_test(
    name = "channel_args_test",
    srcs = ["channel_args_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
    ],
)

grpc_cc_test(
    name = "channel_stack_test",
    srcs = ["channel_stack_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
    ],
)

grpc_cc_test(
    name = "channel_stack_builder_test",
    srcs = ["channel_stack_builder_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
    ],
)

grpc_cc_test(
    name = "minimal_stack_is_minimal_test",
    srcs = ["minimal_stack_is_minimal_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
    ],
)

grpc_cc_test(
    name = "channel_trace_test",
    srcs = ["channel_trace_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//:grpc++",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
        "//test/cpp/util:channel_trace_proto_helper",
    ],
    external_deps = [
        "gtest",
    ],
)

grpc_cc_test(
    name = "channelz_test",
    srcs = ["channelz_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//:grpc++",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
        "//test/cpp/util:channel_trace_proto_helper",
    ],
    external_deps = [
        "gtest",
    ],
)

grpc_cc_test(
    name = "channelz_registry_test",
    srcs = ["channelz_registry_test.cc"],
    language = "C++",
    deps = [
        "//:gpr",
        "//:grpc",
        "//:grpc++",
        "//test/core/util:gpr_test_util",
        "//test/core/util:grpc_test_util",
    ],
    external_deps = [
        "gtest",
    ],
)

grpc_cc_test(
    name = "status_util_test",
    srcs = ["status_util_test.cc"],
    language = "C++",
    deps = [
        "//:grpc",
        "//test/core/util:gpr_test_util",
    ],
    external_deps = [
        "gtest",
    ],
)
