From 856c59f351fad6d14ab67894d74f81aa3ae03b89 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 15:04:22 -0400 Subject: [PATCH 01/11] build: add flatbuffers Signed-off-by: Snow Pettersen --- bazel/envoy_mobile_dependencies.bzl | 10 ++++++ bazel/flatbuffers.BUILD | 13 +++++++ library/swift/BUILD | 1 + library/swift/EngineBuilder.swift | 2 ++ test/fbs/BUILD | 35 +++++++++++++++++++ test/fbs/test.fbs | 7 ++++ test/kotlin/io/envoyproxy/envoymobile/BUILD | 10 ++++++ .../envoyproxy/envoymobile/FlatBuffersTest.kt | 22 ++++++++++++ test/swift/integration/BUILD | 12 +++++++ test/swift/integration/FlatBufferTest.swift | 11 ++++++ 10 files changed, 123 insertions(+) create mode 100644 bazel/flatbuffers.BUILD create mode 100644 test/fbs/BUILD create mode 100644 test/fbs/test.fbs create mode 100644 test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt create mode 100644 test/swift/integration/FlatBufferTest.swift diff --git a/bazel/envoy_mobile_dependencies.bzl b/bazel/envoy_mobile_dependencies.bzl index cc850eca68..37f285b7e3 100644 --- a/bazel/envoy_mobile_dependencies.bzl +++ b/bazel/envoy_mobile_dependencies.bzl @@ -1,6 +1,7 @@ load("@build_bazel_rules_swift//swift:repositories.bzl", "swift_rules_dependencies") load("@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies") load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@rules_jvm_external//:defs.bzl", "maven_install") load("@rules_detekt//detekt:dependencies.bzl", "rules_detekt_dependencies") load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories") @@ -57,10 +58,19 @@ def swift_dependencies(): apple_rules_dependencies(ignore_version_differences = True) swift_rules_dependencies() + http_archive( + name = "swift_flatbuffers", + sha256 = "ffd68aebdfb300c9e82582ea38bf4aa9ce65c77344c94d5047f3be754cc756ea", + build_file = "//bazel:flatbuffers.BUILD", + strip_prefix = "flatbuffers-2.0.0", + urls = ["https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.zip"], + ) + def kotlin_dependencies(): maven_install( artifacts = [ "com.google.code.findbugs:jsr305:3.0.2", + "com.google.flatbuffers:flatbuffers-java:2.0.3", # Kotlin "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.11", "androidx.recyclerview:recyclerview:1.1.0", diff --git a/bazel/flatbuffers.BUILD b/bazel/flatbuffers.BUILD new file mode 100644 index 0000000000..6b785a9b78 --- /dev/null +++ b/bazel/flatbuffers.BUILD @@ -0,0 +1,13 @@ +licenses(["notice"]) + +load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") + +package( + default_visibility = ["//visibility:public"], +) + +swift_library( + name = "FlatBuffers", + srcs = glob(["swift/Sources/FlatBuffers/*.swift"]), + module_name = "FlatBuffers", +) diff --git a/library/swift/BUILD b/library/swift/BUILD index 35e91c0a80..91c973aa77 100644 --- a/library/swift/BUILD +++ b/library/swift/BUILD @@ -50,6 +50,7 @@ swift_library( private_deps = [ "//library/objective-c:envoy_engine_objc_lib", "@envoy_mobile_extra_swift_sources//:extra_private_dep", + "@swift_flatbuffers//:FlatBuffers", ], visibility = ["//visibility:public"], ) diff --git a/library/swift/EngineBuilder.swift b/library/swift/EngineBuilder.swift index e1ce8999ed..97781e726d 100644 --- a/library/swift/EngineBuilder.swift +++ b/library/swift/EngineBuilder.swift @@ -1,5 +1,6 @@ @_implementationOnly import EnvoyEngine import Foundation +import FlatBuffers /// Builder used for creating and running a new Engine instance. @objcMembers @@ -47,6 +48,7 @@ open class EngineBuilder: NSObject { /// Initialize a new builder with standard HTTP library configuration. public override init() { self.base = .standard + let _ = FlatBufferBuilder() } /// Initialize a new builder with a custom full YAML configuration. diff --git a/test/fbs/BUILD b/test/fbs/BUILD new file mode 100644 index 0000000000..8e87085b37 --- /dev/null +++ b/test/fbs/BUILD @@ -0,0 +1,35 @@ +load("@envoy//bazel:envoy_build_system.bzl", "envoy_package") +load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_library_public", "flatbuffer_cc_library") +load("@rules_java//java:defs.bzl", "java_library") + +licenses(["notice"]) # Apache 2 + +envoy_package() + +flatbuffer_cc_library( + name = "test_cc_fbs", + srcs = ["test.fbs"], +) + +flatbuffer_library_public( + name = "test_java_fbs_srcs", + outs = ["Test/SomeType.java"], + srcs = ["test.fbs"], + out_prefix = ["Test"], + language_flag = "-j", +) + +java_library( + name = "test_java_fbs", + srcs = [":test_java_fbs_srcs"], + deps = ["@maven//:com_google_flatbuffers_flatbuffers_java"], +) + +flatbuffer_library_public( + name = "test_swift_fbs_srcs", + outs = [ + "test_generated.swift", + ], + srcs = ["test.fbs"], + language_flag = "--swift", +) diff --git a/test/fbs/test.fbs b/test/fbs/test.fbs new file mode 100644 index 0000000000..b0fd77da77 --- /dev/null +++ b/test/fbs/test.fbs @@ -0,0 +1,7 @@ +namespace Test; + +table SomeType { +} + +root_type SomeType; + diff --git a/test/kotlin/io/envoyproxy/envoymobile/BUILD b/test/kotlin/io/envoyproxy/envoymobile/BUILD index c6d034925e..c0f2236fa6 100644 --- a/test/kotlin/io/envoyproxy/envoymobile/BUILD +++ b/test/kotlin/io/envoyproxy/envoymobile/BUILD @@ -16,6 +16,16 @@ envoy_mobile_kt_test( ], ) +envoy_mobile_kt_test( + name = "flatbuffers_test", + srcs = [ + "FlatBuffersTest.kt", + ], + deps = [ + "//test/fbs:test_java_fbs", + ], +) + envoy_mobile_kt_test( name = "grpc_request_headers_builder_test", srcs = [ diff --git a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt new file mode 100644 index 0000000000..50f1fed6b8 --- /dev/null +++ b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt @@ -0,0 +1,22 @@ +package io.envoyproxy.envoymobile + +import io.envoyproxy.envoymobile.engine.EnvoyEngine +import com.google.flatbuffers.FlatBufferBuilder +import org.assertj.core.api.Assertions.assertThat +import org.junit.Test +import org.mockito.Mockito.mock + +class FlatBuffersTest { + + @Test + fun `flatbuffers construction`() { +// This test doesn't really test any functionality, just demonstrates that we are able to utilize flatbuffers pending +// real usage within the code base. + engineBuilder = EngineBuilder(Standard()) + engineBuilder.addEngineType { envoyEngine } + engineBuilder.addNativeFilter("name", "config") + + val engine = engineBuilder.build() as EngineImpl + assertThat(engine.envoyConfiguration!!.nativeFilterChain.size).isEqualTo(1) + } +} diff --git a/test/swift/integration/BUILD b/test/swift/integration/BUILD index 3294c1c0ef..1da529c60d 100644 --- a/test/swift/integration/BUILD +++ b/test/swift/integration/BUILD @@ -40,6 +40,18 @@ envoy_mobile_swift_test( ], ) +envoy_mobile_swift_test( + name = "flatbuffer_test", + srcs = [ + "FlatBufferTest.swift", + ] + [ + "//test/fbs:test_swift_fbs_srcs", + ], + deps = [ + "@swift_flatbuffers//:FlatBuffers", + ], +) + envoy_cc_library( name = "test_extensions_cc", srcs = [ diff --git a/test/swift/integration/FlatBufferTest.swift b/test/swift/integration/FlatBufferTest.swift new file mode 100644 index 0000000000..4f807d52ab --- /dev/null +++ b/test/swift/integration/FlatBufferTest.swift @@ -0,0 +1,11 @@ +import Envoy +import FlatBuffers +import XCTest + +final class FlatBufferTest: XCTestCase { + func testCreateFlatBuffer() { + // This test simply verifies that we can import both the generated types as well as upstream FlatBuffers. + let _ = Test_SomeTypeT() + let _ = FlatBufferBuilder() + } +} From 3d8572a06f324084196ad6fc8d87ea9d1830e362 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 16:23:57 -0400 Subject: [PATCH 02/11] format ++ Signed-off-by: Snow Pettersen --- bazel/envoy_mobile_dependencies.bzl | 2 +- bazel/flatbuffers.BUILD | 4 +-- test/fbs/BUILD | 25 +++++++++++-------- test/fbs/test.fbs | 4 +++ test/kotlin/io/envoyproxy/envoymobile/BUILD | 2 +- .../envoyproxy/envoymobile/FlatBuffersTest.kt | 14 ++++------- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/bazel/envoy_mobile_dependencies.bzl b/bazel/envoy_mobile_dependencies.bzl index 37f285b7e3..5955aec181 100644 --- a/bazel/envoy_mobile_dependencies.bzl +++ b/bazel/envoy_mobile_dependencies.bzl @@ -61,7 +61,7 @@ def swift_dependencies(): http_archive( name = "swift_flatbuffers", sha256 = "ffd68aebdfb300c9e82582ea38bf4aa9ce65c77344c94d5047f3be754cc756ea", - build_file = "//bazel:flatbuffers.BUILD", + build_file = "@envoy_mobile//bazel:flatbuffers.BUILD", strip_prefix = "flatbuffers-2.0.0", urls = ["https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.zip"], ) diff --git a/bazel/flatbuffers.BUILD b/bazel/flatbuffers.BUILD index 6b785a9b78..baf4dbe92c 100644 --- a/bazel/flatbuffers.BUILD +++ b/bazel/flatbuffers.BUILD @@ -1,7 +1,7 @@ -licenses(["notice"]) - load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") +licenses(["notice"]) # Apache 2 + package( default_visibility = ["//visibility:public"], ) diff --git a/test/fbs/BUILD b/test/fbs/BUILD index 8e87085b37..68fc9d4917 100644 --- a/test/fbs/BUILD +++ b/test/fbs/BUILD @@ -1,6 +1,6 @@ load("@envoy//bazel:envoy_build_system.bzl", "envoy_package") -load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_library_public", "flatbuffer_cc_library") -load("@rules_java//java:defs.bzl", "java_library") +load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_library_public") +load("@envoy_mobile//bazel:kotlin_lib.bzl", "envoy_mobile_kt_library") licenses(["notice"]) # Apache 2 @@ -12,24 +12,27 @@ flatbuffer_cc_library( ) flatbuffer_library_public( - name = "test_java_fbs_srcs", - outs = ["Test/SomeType.java"], + name = "test_kt_fbs_srcs", srcs = ["test.fbs"], - out_prefix = ["Test"], - language_flag = "-j", + # TODO(snowp): For some reason I can't get this to work with just one output file for java. For now we can avoid dealing with this since basically all use cases of this would result in multiple files for Java. + outs = [ + "Test/SomeOtherType.kt", + "Test/SomeType.kt", + ], + language_flag = "--kotlin", ) -java_library( - name = "test_java_fbs", - srcs = [":test_java_fbs_srcs"], +envoy_mobile_kt_library( + name = "test_kt_lib", + srcs = [":test_kt_fbs_srcs"], deps = ["@maven//:com_google_flatbuffers_flatbuffers_java"], ) flatbuffer_library_public( name = "test_swift_fbs_srcs", + srcs = ["test.fbs"], outs = [ - "test_generated.swift", + "test_generated.swift", ], - srcs = ["test.fbs"], language_flag = "--swift", ) diff --git a/test/fbs/test.fbs b/test/fbs/test.fbs index b0fd77da77..6cbdf91fb8 100644 --- a/test/fbs/test.fbs +++ b/test/fbs/test.fbs @@ -3,5 +3,9 @@ namespace Test; table SomeType { } +table SomeOtherType { + +} + root_type SomeType; diff --git a/test/kotlin/io/envoyproxy/envoymobile/BUILD b/test/kotlin/io/envoyproxy/envoymobile/BUILD index c0f2236fa6..965651e2f3 100644 --- a/test/kotlin/io/envoyproxy/envoymobile/BUILD +++ b/test/kotlin/io/envoyproxy/envoymobile/BUILD @@ -22,7 +22,7 @@ envoy_mobile_kt_test( "FlatBuffersTest.kt", ], deps = [ - "//test/fbs:test_java_fbs", + "//test/fbs:test_kt_lib", ], ) diff --git a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt index 50f1fed6b8..621b8378c4 100644 --- a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt +++ b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt @@ -1,22 +1,18 @@ package io.envoyproxy.envoymobile -import io.envoyproxy.envoymobile.engine.EnvoyEngine import com.google.flatbuffers.FlatBufferBuilder import org.assertj.core.api.Assertions.assertThat import org.junit.Test import org.mockito.Mockito.mock +import Test.SomeType; class FlatBuffersTest { @Test fun `flatbuffers construction`() { -// This test doesn't really test any functionality, just demonstrates that we are able to utilize flatbuffers pending -// real usage within the code base. - engineBuilder = EngineBuilder(Standard()) - engineBuilder.addEngineType { envoyEngine } - engineBuilder.addNativeFilter("name", "config") - - val engine = engineBuilder.build() as EngineImpl - assertThat(engine.envoyConfiguration!!.nativeFilterChain.size).isEqualTo(1) + // This test doesn't really test any functionality, just demonstrates that we are able to utilize flatbuffers pending + // real usage within the code base. + val s = SomeType() + val f = FlatBufferBuilder() } } From fe486d62b62c26d8cccebb331cdd4b6935fc7723 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 16:28:09 -0400 Subject: [PATCH 03/11] fix linter Signed-off-by: Snow Pettersen --- bazel/envoy_mobile_dependencies.bzl | 8 -------- bazel/envoy_mobile_repositories.bzl | 8 ++++++++ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bazel/envoy_mobile_dependencies.bzl b/bazel/envoy_mobile_dependencies.bzl index 5955aec181..89739c9491 100644 --- a/bazel/envoy_mobile_dependencies.bzl +++ b/bazel/envoy_mobile_dependencies.bzl @@ -58,14 +58,6 @@ def swift_dependencies(): apple_rules_dependencies(ignore_version_differences = True) swift_rules_dependencies() - http_archive( - name = "swift_flatbuffers", - sha256 = "ffd68aebdfb300c9e82582ea38bf4aa9ce65c77344c94d5047f3be754cc756ea", - build_file = "@envoy_mobile//bazel:flatbuffers.BUILD", - strip_prefix = "flatbuffers-2.0.0", - urls = ["https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.zip"], - ) - def kotlin_dependencies(): maven_install( artifacts = [ diff --git a/bazel/envoy_mobile_repositories.bzl b/bazel/envoy_mobile_repositories.bzl index 0fda43c24d..179dc670d1 100644 --- a/bazel/envoy_mobile_repositories.bzl +++ b/bazel/envoy_mobile_repositories.bzl @@ -10,6 +10,14 @@ def envoy_mobile_repositories(): urls = ["https://github.com/google/bazel-common/archive/413b433b91f26dbe39cdbc20f742ad6555dd1e27.zip"], ) + http_archive( + name = "swift_flatbuffers", + sha256 = "ffd68aebdfb300c9e82582ea38bf4aa9ce65c77344c94d5047f3be754cc756ea", + build_file = "@envoy_mobile//bazel:flatbuffers.BUILD", + strip_prefix = "flatbuffers-2.0.0", + urls = ["https://github.com/google/flatbuffers/archive/refs/tags/v2.0.0.zip"], + ) + upstream_envoy_overrides() swift_repos() kotlin_repos() From 1f0106813a630c916038f79a6296ddcb6a577057 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 16:44:25 -0400 Subject: [PATCH 04/11] revert core swift changes Signed-off-by: Snow Pettersen --- library/swift/BUILD | 1 - library/swift/EngineBuilder.swift | 53 +++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/library/swift/BUILD b/library/swift/BUILD index 91c973aa77..35e91c0a80 100644 --- a/library/swift/BUILD +++ b/library/swift/BUILD @@ -50,7 +50,6 @@ swift_library( private_deps = [ "//library/objective-c:envoy_engine_objc_lib", "@envoy_mobile_extra_swift_sources//:extra_private_dep", - "@swift_flatbuffers//:FlatBuffers", ], visibility = ["//visibility:public"], ) diff --git a/library/swift/EngineBuilder.swift b/library/swift/EngineBuilder.swift index 97781e726d..0e4a8f1bf5 100644 --- a/library/swift/EngineBuilder.swift +++ b/library/swift/EngineBuilder.swift @@ -1,6 +1,5 @@ @_implementationOnly import EnvoyEngine import Foundation -import FlatBuffers /// Builder used for creating and running a new Engine instance. @objcMembers @@ -17,17 +16,19 @@ open class EngineBuilder: NSObject { private var adminInterfaceEnabled = false private var grpcStatsDomain: String? private var connectTimeoutSeconds: UInt32 = 30 - private var dnsRefreshSeconds: UInt32 = 60 private var dnsFailureRefreshSecondsBase: UInt32 = 2 private var dnsFailureRefreshSecondsMax: UInt32 = 10 private var dnsQueryTimeoutSeconds: UInt32 = 25 + private var dnsMinRefreshSeconds: UInt32 = 60 private var dnsPreresolveHostnames: String = "[]" + private var dnsRefreshSeconds: UInt32 = 60 private var enableHappyEyeballs: Bool = false private var enableInterfaceBinding: Bool = false private var enforceTrustChainVerification: Bool = true private var h2ConnectionKeepaliveIdleIntervalMilliseconds: UInt32 = 100000000 private var h2ConnectionKeepaliveTimeoutSeconds: UInt32 = 10 private var h2RawDomains: [String] = [] + private var maxConnectionsPerHost: UInt32 = 7 private var statsFlushSeconds: UInt32 = 60 private var streamIdleTimeoutSeconds: UInt32 = 15 private var perTryIdleTimeoutSeconds: UInt32 = 15 @@ -48,7 +49,6 @@ open class EngineBuilder: NSObject { /// Initialize a new builder with standard HTTP library configuration. public override init() { self.base = .standard - let _ = FlatBufferBuilder() } /// Initialize a new builder with a custom full YAML configuration. @@ -94,17 +94,6 @@ open class EngineBuilder: NSObject { return self } - /// Add a rate at which to refresh DNS. - /// - /// - parameter dnsRefreshSeconds: Rate in seconds to refresh DNS. - /// - /// - returns: This builder. - @discardableResult - public func addDNSRefreshSeconds(_ dnsRefreshSeconds: UInt32) -> Self { - self.dnsRefreshSeconds = dnsRefreshSeconds - return self - } - /// Add a rate at which to refresh DNS in case of DNS failure. /// /// - parameter base: Base rate in seconds. @@ -129,6 +118,18 @@ open class EngineBuilder: NSObject { return self } + /// Add the minimum rate at which to refresh DNS. Once DNS has been resolved for a host, DNS TTL + /// will be respected, subject to this minimum. Defaults to 60 seconds. + /// + /// - parameter dnsMinRefreshSeconds: Minimum rate in seconds at which to refresh DNS. + /// + /// - returns: This builder. + @discardableResult + public func addDNSMinRefreshSeconds(_ dnsMinRefreshSeconds: UInt32) -> Self { + self.dnsMinRefreshSeconds = dnsMinRefreshSeconds + return self + } + /// Add a list of hostnames to preresolve on Engine startup. /// /// - parameter dnsPreresolveHostnames: the hostnames to resolve. @@ -140,6 +141,17 @@ open class EngineBuilder: NSObject { return self } + /// Add a default rate at which to refresh DNS. + /// + /// - parameter dnsRefreshSeconds: Default rate in seconds at which to refresh DNS. + /// + /// - returns: This builder. + @discardableResult + public func addDNSRefreshSeconds(_ dnsRefreshSeconds: UInt32) -> Self { + self.dnsRefreshSeconds = dnsRefreshSeconds + return self + } + /// Specify whether to use Happy Eyeballs when multiple IP stacks may be supported. /// /// - parameter enableHappyEyeballs: whether to enable RFC 6555 handling for IPv4/IPv6. @@ -213,6 +225,17 @@ open class EngineBuilder: NSObject { return self } + /// Set the maximum number of connections to open to a single host. Default is 7. + /// + /// - parameter maxConnectionsPerHost: the maximum number of connections per host. + /// + /// - returns: This builder. + @discardableResult + public func setMaxConnectionsPerHost(_ maxConnectionsPerHost: UInt32) -> Self { + self.maxConnectionsPerHost = maxConnectionsPerHost + return self + } + /// Add an interval at which to flush Envoy stats. /// /// - parameter statsFlushSeconds: Interval at which to flush Envoy stats. @@ -402,6 +425,7 @@ open class EngineBuilder: NSObject { dnsFailureRefreshSecondsBase: self.dnsFailureRefreshSecondsBase, dnsFailureRefreshSecondsMax: self.dnsFailureRefreshSecondsMax, dnsQueryTimeoutSeconds: self.dnsQueryTimeoutSeconds, + dnsMinRefreshSeconds: self.dnsMinRefreshSeconds, dnsPreresolveHostnames: self.dnsPreresolveHostnames, enableHappyEyeballs: self.enableHappyEyeballs, enableInterfaceBinding: self.enableInterfaceBinding, @@ -410,6 +434,7 @@ open class EngineBuilder: NSObject { self.h2ConnectionKeepaliveIdleIntervalMilliseconds, h2ConnectionKeepaliveTimeoutSeconds: self.h2ConnectionKeepaliveTimeoutSeconds, h2RawDomains: self.h2RawDomains, + maxConnectionsPerHost: self.maxConnectionsPerHost, statsFlushSeconds: self.statsFlushSeconds, streamIdleTimeoutSeconds: self.streamIdleTimeoutSeconds, perTryIdleTimeoutSeconds: self.perTryIdleTimeoutSeconds, From 02166d971f9d9bd55fcef049d8af9a67f002e875 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 16:57:20 -0400 Subject: [PATCH 05/11] format test Signed-off-by: Snow Pettersen --- test/swift/integration/FlatBufferTest.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/swift/integration/FlatBufferTest.swift b/test/swift/integration/FlatBufferTest.swift index 4f807d52ab..cb3de0b9ad 100644 --- a/test/swift/integration/FlatBufferTest.swift +++ b/test/swift/integration/FlatBufferTest.swift @@ -3,9 +3,9 @@ import FlatBuffers import XCTest final class FlatBufferTest: XCTestCase { - func testCreateFlatBuffer() { - // This test simply verifies that we can import both the generated types as well as upstream FlatBuffers. - let _ = Test_SomeTypeT() - let _ = FlatBufferBuilder() - } + func testCreateFlatBuffer() { + // This test simply verifies that we can import both the generated types as well as upstream FlatBuffers. + _ = Test_SomeTypeT() + _ = FlatBufferBuilder() + } } From 8562df8b746b55c71046075eb1809047893c892e Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 16:58:02 -0400 Subject: [PATCH 06/11] more formatting Signed-off-by: Snow Pettersen --- test/swift/integration/FlatBufferTest.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/swift/integration/FlatBufferTest.swift b/test/swift/integration/FlatBufferTest.swift index cb3de0b9ad..55d83b63fa 100644 --- a/test/swift/integration/FlatBufferTest.swift +++ b/test/swift/integration/FlatBufferTest.swift @@ -4,7 +4,8 @@ import XCTest final class FlatBufferTest: XCTestCase { func testCreateFlatBuffer() { - // This test simply verifies that we can import both the generated types as well as upstream FlatBuffers. + // This test simply verifies that we can import both the generated types as + // well as upstream FlatBuffers. _ = Test_SomeTypeT() _ = FlatBufferBuilder() } From 387ba0d55c059881a6812e389c0b9a6719d82568 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 18:20:55 -0400 Subject: [PATCH 07/11] run pc Signed-off-by: Snow Pettersen --- bazel/envoy_mobile_dependencies.bzl | 1 - test/fbs/test.fbs | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/bazel/envoy_mobile_dependencies.bzl b/bazel/envoy_mobile_dependencies.bzl index 89739c9491..c80e2fa599 100644 --- a/bazel/envoy_mobile_dependencies.bzl +++ b/bazel/envoy_mobile_dependencies.bzl @@ -1,7 +1,6 @@ load("@build_bazel_rules_swift//swift:repositories.bzl", "swift_rules_dependencies") load("@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies") load("@build_bazel_apple_support//lib:repositories.bzl", "apple_support_dependencies") -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") load("@rules_jvm_external//:defs.bzl", "maven_install") load("@rules_detekt//detekt:dependencies.bzl", "rules_detekt_dependencies") load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kotlin_repositories") diff --git a/test/fbs/test.fbs b/test/fbs/test.fbs index 6cbdf91fb8..134ccaac22 100644 --- a/test/fbs/test.fbs +++ b/test/fbs/test.fbs @@ -4,8 +4,7 @@ table SomeType { } table SomeOtherType { - + } root_type SomeType; - From ed9febff0891f83544231848e9fa98aa80462b24 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Mon, 28 Mar 2022 19:49:36 -0400 Subject: [PATCH 08/11] kotlin format Signed-off-by: Snow Pettersen --- test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt index 621b8378c4..849aa11549 100644 --- a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt +++ b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt @@ -1,10 +1,8 @@ package io.envoyproxy.envoymobile +import Test.SomeType import com.google.flatbuffers.FlatBufferBuilder -import org.assertj.core.api.Assertions.assertThat import org.junit.Test -import org.mockito.Mockito.mock -import Test.SomeType; class FlatBuffersTest { @@ -12,7 +10,7 @@ class FlatBuffersTest { fun `flatbuffers construction`() { // This test doesn't really test any functionality, just demonstrates that we are able to utilize flatbuffers pending // real usage within the code base. - val s = SomeType() + val s = SomeType() val f = FlatBufferBuilder() } } From f23f5f3a24ac17312a87fbb88a4d404f202058b4 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Tue, 29 Mar 2022 10:12:51 -0400 Subject: [PATCH 09/11] extract to bazel rule Signed-off-by: Snow Pettersen --- bazel/flatbuffers.bzl | 33 +++++++++++++++++ test/fbs/BUILD | 36 ++++--------------- test/fbs/test.fbs | 2 +- test/kotlin/io/envoyproxy/envoymobile/BUILD | 2 +- .../envoyproxy/envoymobile/FlatBuffersTest.kt | 2 +- test/swift/integration/BUILD | 2 +- test/swift/integration/FlatBufferTest.swift | 2 +- 7 files changed, 45 insertions(+), 34 deletions(-) create mode 100644 bazel/flatbuffers.bzl diff --git a/bazel/flatbuffers.bzl b/bazel/flatbuffers.bzl new file mode 100644 index 0000000000..41f3161495 --- /dev/null +++ b/bazel/flatbuffers.bzl @@ -0,0 +1,33 @@ +load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_library_public") +load("@envoy_mobile//bazel:kotlin_lib.bzl", "envoy_mobile_kt_library") + +def envoy_mobile_flatbuffers_library(name, srcs, namespace, types): + flatbuffer_cc_library( + name = "{}_fb_cc_lib".format(name), + srcs = srcs, + ) + + directory_path = namespace.replace(".", "/") + kotlin_files = [directory_path + "/" + t + ".kt" for t in types] + flatbuffer_library_public( + name = "{}_fb_kt_srcs".format(name), + srcs = srcs, + # TODO(snowp): For some reason I can't get this to work with just one output file for java. For now we can avoid dealing with this since basically all use cases of this would result in multiple files for Java. + outs = kotlin_files, + language_flag = "--kotlin", + ) + + envoy_mobile_kt_library( + name = "{}_fb_kt_lib".format(name), + srcs = [":{}_fb_kt_srcs".format(name)], + deps = ["@maven//:com_google_flatbuffers_flatbuffers_java"], + ) + + flatbuffer_library_public( + name = "{}_fb_swift_srcs".format(name), + srcs = ["test.fbs"], + outs = [ + "test_generated.swift", + ], + language_flag = "--swift", + ) diff --git a/test/fbs/BUILD b/test/fbs/BUILD index 68fc9d4917..c3048ea724 100644 --- a/test/fbs/BUILD +++ b/test/fbs/BUILD @@ -1,38 +1,16 @@ load("@envoy//bazel:envoy_build_system.bzl", "envoy_package") -load("@com_github_google_flatbuffers//:build_defs.bzl", "flatbuffer_cc_library", "flatbuffer_library_public") -load("@envoy_mobile//bazel:kotlin_lib.bzl", "envoy_mobile_kt_library") +load("//bazel:flatbuffers.bzl", "envoy_mobile_flatbuffers_library") licenses(["notice"]) # Apache 2 envoy_package() -flatbuffer_cc_library( - name = "test_cc_fbs", +envoy_mobile_flatbuffers_library( + name = "test", srcs = ["test.fbs"], -) - -flatbuffer_library_public( - name = "test_kt_fbs_srcs", - srcs = ["test.fbs"], - # TODO(snowp): For some reason I can't get this to work with just one output file for java. For now we can avoid dealing with this since basically all use cases of this would result in multiple files for Java. - outs = [ - "Test/SomeOtherType.kt", - "Test/SomeType.kt", - ], - language_flag = "--kotlin", -) - -envoy_mobile_kt_library( - name = "test_kt_lib", - srcs = [":test_kt_fbs_srcs"], - deps = ["@maven//:com_google_flatbuffers_flatbuffers_java"], -) - -flatbuffer_library_public( - name = "test_swift_fbs_srcs", - srcs = ["test.fbs"], - outs = [ - "test_generated.swift", + namespace = "Test.Nested", + types = [ + "SomeType", + "SomeOtherType", ], - language_flag = "--swift", ) diff --git a/test/fbs/test.fbs b/test/fbs/test.fbs index 134ccaac22..f1de5813c0 100644 --- a/test/fbs/test.fbs +++ b/test/fbs/test.fbs @@ -1,4 +1,4 @@ -namespace Test; +namespace Test.Nested; table SomeType { } diff --git a/test/kotlin/io/envoyproxy/envoymobile/BUILD b/test/kotlin/io/envoyproxy/envoymobile/BUILD index 965651e2f3..7140a39e9b 100644 --- a/test/kotlin/io/envoyproxy/envoymobile/BUILD +++ b/test/kotlin/io/envoyproxy/envoymobile/BUILD @@ -22,7 +22,7 @@ envoy_mobile_kt_test( "FlatBuffersTest.kt", ], deps = [ - "//test/fbs:test_kt_lib", + "//test/fbs:test_fb_kt_lib", ], ) diff --git a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt index 849aa11549..65d8e674ac 100644 --- a/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt +++ b/test/kotlin/io/envoyproxy/envoymobile/FlatBuffersTest.kt @@ -1,6 +1,6 @@ package io.envoyproxy.envoymobile -import Test.SomeType +import Test.Nested.SomeType import com.google.flatbuffers.FlatBufferBuilder import org.junit.Test diff --git a/test/swift/integration/BUILD b/test/swift/integration/BUILD index 1da529c60d..d8ca9cf690 100644 --- a/test/swift/integration/BUILD +++ b/test/swift/integration/BUILD @@ -45,7 +45,7 @@ envoy_mobile_swift_test( srcs = [ "FlatBufferTest.swift", ] + [ - "//test/fbs:test_swift_fbs_srcs", + "//test/fbs:test_fb_swift_srcs", ], deps = [ "@swift_flatbuffers//:FlatBuffers", diff --git a/test/swift/integration/FlatBufferTest.swift b/test/swift/integration/FlatBufferTest.swift index 55d83b63fa..f7b697d87e 100644 --- a/test/swift/integration/FlatBufferTest.swift +++ b/test/swift/integration/FlatBufferTest.swift @@ -6,7 +6,7 @@ final class FlatBufferTest: XCTestCase { func testCreateFlatBuffer() { // This test simply verifies that we can import both the generated types as // well as upstream FlatBuffers. - _ = Test_SomeTypeT() + _ = Test_Nested_SomeTypeT() _ = FlatBufferBuilder() } } From 3e66b6dc7b9e1e346cda583f40ab7f7086670f32 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Wed, 30 Mar 2022 07:49:00 -0400 Subject: [PATCH 10/11] fix swift rule Signed-off-by: Snow Pettersen --- bazel/flatbuffers.bzl | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/bazel/flatbuffers.bzl b/bazel/flatbuffers.bzl index 41f3161495..5af1c20622 100644 --- a/bazel/flatbuffers.bzl +++ b/bazel/flatbuffers.bzl @@ -23,11 +23,10 @@ def envoy_mobile_flatbuffers_library(name, srcs, namespace, types): deps = ["@maven//:com_google_flatbuffers_flatbuffers_java"], ) + swift_outputs = ["{}_generated.swift".format(f.replace(".fbs", "")) for f in srcs] flatbuffer_library_public( name = "{}_fb_swift_srcs".format(name), - srcs = ["test.fbs"], - outs = [ - "test_generated.swift", - ], + srcs = srcs, + outs = swift_outputs, language_flag = "--swift", ) From 509898e7032e0d342bd26cff40db3180800e0897 Mon Sep 17 00:00:00 2001 From: Snow Pettersen Date: Wed, 30 Mar 2022 08:14:04 -0400 Subject: [PATCH 11/11] add private dep to main EM swift target Signed-off-by: Snow Pettersen --- library/swift/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/library/swift/BUILD b/library/swift/BUILD index 35e91c0a80..f4cc2cfa45 100644 --- a/library/swift/BUILD +++ b/library/swift/BUILD @@ -49,6 +49,7 @@ swift_library( module_name = "Envoy", private_deps = [ "//library/objective-c:envoy_engine_objc_lib", + "@swift_flatbuffers//:FlatBuffers", "@envoy_mobile_extra_swift_sources//:extra_private_dep", ], visibility = ["//visibility:public"],