1plugins { 2 id "application" 3 id "java" 4 id "maven-publish" 5 6 id "com.google.protobuf" 7 id "ru.vyarus.animalsniffer" 8} 9 10description = "gRPC: Integration Testing" 11 12configurations { 13 alpnagent 14} 15 16dependencies { 17 implementation project(path: ':grpc-alts', configuration: 'shadow'), 18 project(':grpc-auth'), 19 project(':grpc-census'), 20 project(':grpc-core'), 21 project(':grpc-googleapis'), 22 project(':grpc-netty'), 23 project(':grpc-okhttp'), 24 project(':grpc-protobuf'), 25 project(':grpc-rls'), 26 project(':grpc-services'), 27 project(':grpc-stub'), 28 project(':grpc-testing'), 29 project(path: ':grpc-xds', configuration: 'shadow'), 30 libraries.hdrhistogram, 31 libraries.junit, 32 libraries.truth, 33 libraries.opencensus.contrib.grpc.metrics, 34 libraries.google.auth.oauth2Http 35 compileOnly libraries.javax.annotation 36 // TODO(sergiitk): replace with com.google.cloud:google-cloud-logging 37 // Used instead of google-cloud-logging because it's failing 38 // due to a circular dependency on grpc. 39 // https://cloud.google.com/logging/docs/setup/java#the_javautillogging_handler 40 // Error example: "java.util.logging.ErrorManager: 1" 41 // Latest failing version com.google.cloud:google-cloud-logging:2.1.2 42 runtimeOnly group: 'io.github.devatherock', name: 'jul-jsonformatter', version: '1.1.0' 43 runtimeOnly libraries.opencensus.impl, 44 libraries.netty.tcnative, 45 libraries.netty.tcnative.classes, 46 project(':grpc-grpclb'), 47 project(':grpc-rls') 48 testImplementation testFixtures(project(':grpc-context')), 49 testFixtures(project(':grpc-api')), 50 testFixtures(project(':grpc-core')), 51 libraries.mockito.core, 52 libraries.okhttp 53 alpnagent libraries.jetty.alpn.agent 54 55 signature libraries.signature.java 56 signature libraries.signature.android 57} 58 59configureProtoCompilation() 60 61import net.ltgt.gradle.errorprone.CheckSeverity 62 63tasks.named("compileJava").configure { 64 // This isn't a library; it can use beta APIs 65 options.errorprone.check("BetaApi", CheckSeverity.OFF) 66} 67tasks.named("test").configure { 68 // For the automated tests, use Jetty ALPN. 69 jvmArgs "-javaagent:" + configurations.alpnagent.asPath 70} 71 72// For the generated scripts, use Netty tcnative (i.e. OpenSSL). 73// Note that OkHttp currently only supports ALPN, so OpenSSL version >= 1.0.2 is required. 74 75def test_client = tasks.register("test_client", CreateStartScripts) { 76 mainClass = "io.grpc.testing.integration.TestServiceClient" 77 applicationName = "test-client" 78 defaultJvmOpts = [ 79 "-javaagent:JAVAAGENT_APP_HOME" + configurations.alpnagent.singleFile.name 80 ] 81 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 82 classpath = startScripts.classpath 83 doLast { 84 unixScript.text = unixScript.text.replace('JAVAAGENT_APP_HOME', '\'"\$APP_HOME"\'/lib/') 85 windowsScript.text = windowsScript.text.replace('JAVAAGENT_APP_HOME', '%APP_HOME%\\lib\\') 86 } 87} 88 89def test_server = tasks.register("test_server", CreateStartScripts) { 90 mainClass = "io.grpc.testing.integration.TestServiceServer" 91 applicationName = "test-server" 92 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 93 classpath = startScripts.classpath 94} 95 96def reconnect_test_client = tasks.register("reconnect_test_client", CreateStartScripts) { 97 mainClass = "io.grpc.testing.integration.ReconnectTestClient" 98 applicationName = "reconnect-test-client" 99 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 100 classpath = startScripts.classpath 101} 102 103def stresstest_client = tasks.register("stresstest_client", CreateStartScripts) { 104 mainClass = "io.grpc.testing.integration.StressTestClient" 105 applicationName = "stresstest-client" 106 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 107 classpath = startScripts.classpath 108 defaultJvmOpts = [ 109 "-verbose:gc", 110 "-XX:+PrintFlagsFinal" 111 ] 112} 113 114def http2_client = tasks.register("http2_client", CreateStartScripts) { 115 mainClass = "io.grpc.testing.integration.Http2Client" 116 applicationName = "http2-client" 117 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 118 classpath = startScripts.classpath 119} 120 121def grpclb_long_lived_affinity_test_client = tasks.register("grpclb_long_lived_affinity_test_client", CreateStartScripts) { 122 mainClass = "io.grpc.testing.integration.GrpclbLongLivedAffinityTestClient" 123 applicationName = "grpclb-long-lived-affinity-test-client" 124 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 125 classpath = startScripts.classpath 126 defaultJvmOpts = [ 127 "-Dio.grpc.internal.DnsNameResolverProvider.enable_service_config=true" 128 ] 129} 130 131def grpclb_fallback_test_client = tasks.register("grpclb_fallback_test_client", CreateStartScripts) { 132 mainClass = "io.grpc.testing.integration.GrpclbFallbackTestClient" 133 applicationName = "grpclb-fallback-test-client" 134 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 135 classpath = startScripts.classpath 136 defaultJvmOpts = [ 137 "-Dio.grpc.internal.DnsNameResolverProvider.enable_service_config=true" 138 ] 139} 140 141def xds_test_client = tasks.register("xds_test_client", CreateStartScripts) { 142 mainClass = "io.grpc.testing.integration.XdsTestClient" 143 applicationName = "xds-test-client" 144 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 145 classpath = startScripts.classpath 146} 147 148def xds_test_server = tasks.register("xds_test_server", CreateStartScripts) { 149 mainClass = "io.grpc.testing.integration.XdsTestServer" 150 applicationName = "xds-test-server" 151 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 152 classpath = startScripts.classpath 153} 154 155def xds_federation_test_client = tasks.register("xds_federation_test_client", CreateStartScripts) { 156 mainClass = "io.grpc.testing.integration.XdsFederationTestClient" 157 applicationName = "xds-federation-test-client" 158 outputDir = new File(project.buildDir, 'tmp/scripts/' + name) 159 classpath = startScripts.classpath 160} 161 162applicationDistribution.into("bin") { 163 from(test_client) 164 from(test_server) 165 from(reconnect_test_client) 166 from(stresstest_client) 167 from(http2_client) 168 from(grpclb_long_lived_affinity_test_client) 169 from(grpclb_fallback_test_client) 170 from(xds_test_client) 171 from(xds_test_server) 172 from(xds_federation_test_client) 173 fileMode = 0755 174} 175 176applicationDistribution.into("lib") { 177 from(configurations.alpnagent) 178} 179 180publishing { 181 publications { 182 maven(MavenPublication) { 183 artifact distZip 184 artifact distTar 185 } 186 } 187} 188