# 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("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") load("@rules_java//java:defs.bzl", "java_binary") load("@rules_jvm_external//:defs.bzl", "artifact") load("@rules_python//python:defs.bzl", "py_library") load("@rules_python//python:proto.bzl", "py_proto_library") load("//pw_build:compatibility.bzl", "incompatible_with_mcu") load("//pw_build:pw_cc_binary.bzl", "pw_cc_binary") load("//pw_build:python.bzl", "pw_py_binary", "pw_py_test") package(features = ["-layering_check"]) pw_cc_binary( name = "server", srcs = ["server.cc"], deps = [ ":config_cc_proto", "//pw_assert:check", "//pw_chrono:system_clock", "//pw_log", "//pw_rpc/system_server", "//pw_stream", "//pw_stream:std_file_stream", "//pw_thread:thread", "//pw_transfer", "@com_google_protobuf//:protobuf", ], ) pw_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", ], ) pw_py_test( name = "proxy_test", srcs = [ "proxy.py", "proxy_test.py", ], imports = ["."], main = "proxy_test.py", deps = [ ":config_pb2", "//pw_hdlc/py:pw_hdlc", "//pw_rpc:internal_packet_proto_pb2", "//pw_transfer:transfer_proto_pb2", "//pw_transfer/py:pw_transfer", ], ) proto_library( name = "config_proto", srcs = ["config.proto"], deps = ["//pw_protobuf:status_proto"], ) cc_proto_library( name = "config_cc_proto", # cc_proto_library pulls in the regular proto library, which is only # needed for host tests. target_compatible_with = incompatible_with_mcu(), deps = [":config_proto"], ) py_proto_library( name = "config_pb2", deps = [":config_proto"], ) java_proto_library( name = "config_java_proto", deps = [":config_proto"], ) pw_cc_binary( name = "cpp_client", testonly = True, srcs = ["client.cc"], deps = [ ":config_cc_proto", "//pw_assert:check", "//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", testonly = True, srcs = [ "test_fixture.py", ], data = [ ":cpp_client", ":java_client", ":proxy", ":python_client", ":server", ], imports = ["."], deps = [ ":config_pb2", "//pw_protobuf:status_proto_pb2", "@com_google_protobuf//:protobuf_python", "@rules_python//python/runfiles", ], ) # Uses ports 3310 and 3311. pw_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", ], tags = [ # This test is not run in CQ because it's too slow. "manual", "integration", ], deps = [ ":integration_test_fixture", "@python_packages//parameterized", ], ) # Uses ports 3306 and 3307. pw_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", ], tags = [ # This test is not run in CQ because it's too slow. "manual", "integration", ], deps = [ ":integration_test_fixture", "@python_packages//parameterized", ], ) # Uses ports 3304 and 3305. pw_py_test( name = "cross_language_medium_read_test", timeout = "moderate", srcs = [ "cross_language_medium_read_test.py", ], tags = [ "integration", ], deps = [ ":config_pb2", ":integration_test_fixture", "@com_google_protobuf//:protobuf_python", "@python_packages//parameterized", ], ) # Uses ports 3316 and 3317. pw_py_test( name = "cross_language_medium_write_test", timeout = "long", srcs = [ "cross_language_medium_write_test.py", ], tags = [ "integration", ], deps = [ ":config_pb2", ":integration_test_fixture", "@com_google_protobuf//:protobuf_python", "@python_packages//parameterized", ], ) # Uses ports 3302 and 3303. pw_py_test( name = "cross_language_small_test", timeout = "moderate", srcs = [ "cross_language_small_test.py", ], tags = [ "integration", ], deps = [ ":config_pb2", ":integration_test_fixture", "@python_packages//parameterized", ], ) # Uses ports 3308 and 3309. pw_py_test( name = "multi_transfer_test", timeout = "moderate", srcs = [ "multi_transfer_test.py", ], tags = [ "integration", ], deps = [ ":config_pb2", ":integration_test_fixture", "@python_packages//parameterized", ], ) # Uses ports 3312 and 3313. pw_py_test( name = "expected_errors_test", timeout = "long", srcs = ["expected_errors_test.py"], tags = [ "integration", ], deps = [ ":config_pb2", ":integration_test_fixture", "//pw_protobuf:status_proto_pb2", "@com_google_protobuf//:protobuf_python", "@python_packages//parameterized", ], ) # Uses ports 3314 and 3315. pw_py_test( name = "legacy_binaries_test", timeout = "moderate", srcs = ["legacy_binaries_test.py"], data = [ "@pw_transfer_test_binaries//:all", ], tags = [ "integration", ], # Legacy binaries were only built for linux-x86_64. target_compatible_with = ["@platforms//os:linux"], deps = [ ":config_pb2", ":integration_test_fixture", "//pw_protobuf:status_proto_pb2", "@python_packages//parameterized", "@rules_python//python/runfiles", ], ) java_binary( name = "java_client", srcs = ["JavaClient.java"], main_class = "JavaClient", target_compatible_with = incompatible_with_mcu(), 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", artifact("com.google.flogger:flogger-system-backend"), artifact("com.google.guava:guava"), ], ) pw_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", "@python_packages//pyserial", ], )