# Copyright 2021 The Pigweed 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
#
#     https://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.

# Tests for the generic pw_rpc client.

licenses(["notice"])

java_library(
    name = "test_client",
    testonly = True,
    srcs = ["TestClient.java"],
    visibility = ["__pkg__"],
    deps = [
        "//pw_rpc:packet_proto_java_lite",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@com_google_protobuf//java/lite",
        "@maven//:com_google_code_findbugs_jsr305",
        "@maven//:com_google_guava_guava",
    ],
)

java_test(
    name = "ClientTest",
    size = "small",
    srcs = ["ClientTest.java"],
    test_class = "dev.pigweed.pw_rpc.ClientTest",
    deps = [
        ":test_proto_java_proto_lite",
        "//pw_rpc:packet_proto_java_lite",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@com_google_protobuf//java/lite",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_guava_guava",
        "@maven//:com_google_truth_truth",
        "@maven//:org_mockito_mockito_core",
    ],
)

java_test(
    name = "IdsTest",
    size = "small",
    srcs = ["IdsTest.java"],
    test_class = "dev.pigweed.pw_rpc.IdsTest",
    deps = [
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_truth_truth",
    ],
)

java_test(
    name = "PacketsTest",
    size = "small",
    srcs = ["PacketsTest.java"],
    test_class = "dev.pigweed.pw_rpc.PacketsTest",
    deps = [
        "//pw_rpc:packet_proto_java_lite",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@com_google_protobuf//java/lite",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_truth_truth",
    ],
)

java_test(
    name = "RpcManagerTest",
    size = "small",
    srcs = ["RpcManagerTest.java"],
    test_class = "dev.pigweed.pw_rpc.RpcManagerTest",
    deps = [
        ":test_proto_java_proto_lite",
        "//pw_rpc:packet_proto_java_lite",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@com_google_protobuf//java/lite",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_truth_truth",
        "@maven//:org_mockito_mockito_core",
    ],
)

java_test(
    name = "StreamObserverCallTest",
    size = "small",
    srcs = ["StreamObserverCallTest.java"],
    test_class = "dev.pigweed.pw_rpc.StreamObserverCallTest",
    deps = [
        ":test_proto_java_proto_lite",
        "//pw_rpc:packet_proto_java_lite",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_truth_truth",
        "@maven//:org_mockito_mockito_core",
    ],
)

java_test(
    name = "StreamObserverMethodClientTest",
    size = "small",
    srcs = ["StreamObserverMethodClientTest.java"],
    test_class = "dev.pigweed.pw_rpc.StreamObserverMethodClientTest",
    deps = [
        ":test_proto_java_proto_lite",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "@com_google_protobuf//java/lite",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_truth_truth",
        "@maven//:org_mockito_mockito_core",
    ],
)

test_suite(
    name = "pw_rpc",
    tests = [
        ":ClientTest",
        ":IdsTest",
        ":PacketsTest",
        ":RpcManagerTest",
        ":StreamObserverCallTest",
        ":StreamObserverMethodClientTest",
    ],
)

proto_library(
    name = "test_proto",
    srcs = ["test.proto"],
)

java_lite_proto_library(
    name = "test_proto_java_proto_lite",
    deps = [":test_proto"],
)
