# Copyright 2022 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.

load("//pw_build:pigweed.bzl", "pw_cc_binary")
load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")
load("@rules_proto//proto:defs.bzl", "proto_library")

pw_cc_binary(
    name = "server",
    srcs = ["server.cc"],
    deps = [
        ":config_cc_proto",
        "//pw_assert",
        "//pw_chrono:system_clock",
        "//pw_log",
        "//pw_rpc/system_server",
        "//pw_stream",
        "//pw_stream:std_file_stream",
        "//pw_thread:thread",
        "//pw_thread_stl:thread_headers",
        "//pw_transfer",
        "@com_google_protobuf//:protobuf",
    ],
)

py_binary(
    name = "proxy",
    srcs = ["proxy.py"],
    deps = [
        ":config_pb2",
        "//pw_hdlc/py:pw_hdlc",
        "//pw_transfer:transfer_proto_pb2",
        "//pw_transfer/py:pw_transfer",
        "@com_google_protobuf//:protobuf_python",
    ],
)

py_test(
    name = "proxy_test",
    srcs = [
        "proxy.py",
        "proxy_test.py",
    ],
    main = "proxy_test.py",
    deps = [
        ":config_pb2",
        "//pw_rpc:internal_packet_proto_pb2",
        "//pw_transfer:transfer_proto_pb2",
        "//pw_transfer/py:pw_transfer",
    ],
)

proto_library(
    name = "config_proto",
    srcs = ["config.proto"],
)

cc_proto_library(
    name = "config_cc_proto",
    deps = [":config_proto"],
)

py_proto_library(
    name = "config_pb2",
    srcs = ["config.proto"],
)

java_proto_library(
    name = "config_java_proto",
    deps = [":config_proto"],
)

pw_cc_binary(
    name = "cpp_client",
    srcs = ["client.cc"],
    deps = [
        ":config_cc_proto",
        "//pw_log",
        "//pw_rpc:integration_testing",
        "//pw_status",
        "//pw_stream:std_file_stream",
        "//pw_sync:binary_semaphore",
        "//pw_thread:thread",
        "//pw_transfer",
        "//pw_transfer:client",
        "@com_google_protobuf//:protobuf",
    ],
)

py_library(
    name = "integration_test_fixture",
    srcs = [
        "test_fixture.py",
    ],
    data = [
        ":cpp_client",
        ":java_client",
        ":proxy",
        ":python_client",
        ":server",
    ],
    deps = [
        ":config_pb2",
        "//pw_protobuf:status_proto_pb2",
        "@com_google_protobuf//:protobuf_python",
        "@rules_python//python/runfiles",
    ],
)

# Uses ports 3310 and 3311.
py_test(
    name = "cross_language_large_write_test",
    # Actually 1 hour, see
    # https://docs.bazel.build/versions/main/test-encyclopedia.html#role-of-the-test-runner
    timeout = "eternal",
    srcs = [
        "cross_language_large_write_test.py",
    ],
    # This test is not run in CQ because it's too slow.
    tags = ["manual"],
    deps = [
        ":integration_test_fixture",
    ],
)

# Uses ports 3306 and 3307.
py_test(
    name = "cross_language_large_read_test",
    # Actually 1 hour, see
    # https://docs.bazel.build/versions/main/test-encyclopedia.html#role-of-the-test-runner
    timeout = "eternal",
    srcs = [
        "cross_language_large_read_test.py",
    ],
    # This test is not run in CQ because it's too slow.
    tags = ["manual"],
    deps = [
        ":integration_test_fixture",
    ],
)

# Uses ports 3304 and 3305.
py_test(
    name = "cross_language_medium_read_test",
    timeout = "long",
    srcs = [
        "cross_language_medium_read_test.py",
    ],
    deps = [
        ":config_pb2",
        ":integration_test_fixture",
        "@com_google_protobuf//:protobuf_python",
    ],
)

# Uses ports 3316 and 3317.
py_test(
    name = "cross_language_medium_write_test",
    timeout = "long",
    srcs = [
        "cross_language_medium_write_test.py",
    ],
    deps = [
        ":config_pb2",
        ":integration_test_fixture",
        "@com_google_protobuf//:protobuf_python",
    ],
)

# Uses ports 3302 and 3303.
py_test(
    name = "cross_language_small_test",
    timeout = "moderate",
    srcs = [
        "cross_language_small_test.py",
    ],
    deps = [
        ":config_pb2",
        ":integration_test_fixture",
    ],
)

# Uses ports 3308 and 3309.
py_test(
    name = "multi_transfer_test",
    timeout = "moderate",
    srcs = [
        "multi_transfer_test.py",
    ],
    deps = [
        ":config_pb2",
        ":integration_test_fixture",
    ],
)

# Uses ports 3312 and 3313.
py_test(
    name = "expected_errors_test",
    timeout = "moderate",
    srcs = ["expected_errors_test.py"],
    deps = [
        ":config_pb2",
        ":integration_test_fixture",
        "//pw_protobuf:status_proto_pb2",
        "@com_google_protobuf//:protobuf_python",
    ],
)

# Uses ports 3314 and 3315.
py_test(
    name = "legacy_binaries_test",
    timeout = "moderate",
    srcs = ["legacy_binaries_test.py"],
    data = [
        "@pw_transfer_test_binaries//:all",
    ],
    deps = [
        ":config_pb2",
        ":integration_test_fixture",
        "//pw_protobuf:status_proto_pb2",
        "@rules_python//python/runfiles",
    ],
)

java_binary(
    name = "java_client",
    srcs = ["JavaClient.java"],
    main_class = "JavaClient",
    deps = [
        ":config_java_proto",
        "//pw_hdlc/java/main/dev/pigweed/pw_hdlc",
        "//pw_log/java/main/dev/pigweed/pw_log",
        "//pw_rpc/java/main/dev/pigweed/pw_rpc:client",
        "//pw_transfer/java/main/dev/pigweed/pw_transfer:client",
        "@com_google_protobuf//:protobuf_java",
        "@maven//:com_google_flogger_flogger_system_backend",
        "@maven//:com_google_guava_guava",
    ],
)

py_binary(
    name = "python_client",
    srcs = ["python_client.py"],
    deps = [
        ":config_pb2",
        "//pw_hdlc/py:pw_hdlc",
        "//pw_rpc/py:pw_rpc",
        "//pw_transfer:transfer_proto_pb2",
        "//pw_transfer/py:pw_transfer",
        "@com_google_protobuf//:protobuf_python",
    ],
)
