| // Copyright 2017 The gRPC 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 |
| // |
| // http://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. |
| description = 'gRPC: gae interop testing (jdk7)' |
| |
| buildscript { |
| // Configuration for building |
| repositories { |
| jcenter() // Bintray's repository - a fast Maven Central mirror & more |
| maven { // The google mirror is less flaky than mavenCentral() |
| url "https://maven-central.storage-download.googleapis.com/repos/central/data/" } |
| } |
| dependencies { |
| classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.5' |
| classpath 'com.squareup.okhttp:okhttp:2.5.0' |
| } |
| } |
| |
| repositories { |
| // repositories for Jar's you access in your code |
| mavenLocal() |
| maven { // The google mirror is less flaky than mavenCentral() |
| url "https://maven-central.storage-download.googleapis.com/repos/central/data/" } |
| jcenter() |
| } |
| |
| apply plugin: 'java' // standard Java tasks |
| apply plugin: 'war' // standard Web Archive plugin |
| apply plugin: 'com.google.cloud.tools.appengine' // App Engine tasks |
| |
| dependencies { |
| providedCompile group: 'javax.servlet', name: 'servlet-api', version:'2.5' |
| compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.59' |
| // Deps needed by all gRPC apps in GAE |
| compile libraries.google_api_protos |
| compile project(":grpc-okhttp") |
| compile project(":grpc-protobuf") |
| compile project(":grpc-stub") |
| compile (project(":grpc-interop-testing")) { |
| exclude group: 'io.opencensus', module: 'opencensus-impl' |
| } |
| // The lite version of opencensus is required for jdk7 GAE |
| runtime libraries.opencensus_impl_lite |
| } |
| |
| // [START model] |
| appengine { |
| // App Engine tasks configuration |
| run { // local (dev_appserver) configuration (standard environments only) |
| port = 8080 // default |
| } |
| |
| deploy { |
| // deploy configuration |
| // default - stop the current version |
| stopPreviousVersion = System.getProperty('gaeStopPreviousVersion') ?: true |
| // default - make this the current version |
| promote = System.getProperty('gaePromote') ?: true |
| // Use -DgaeDeployVersion if set, otherwise the version is null and the plugin will generate it |
| version = System.getProperty('gaeDeployVersion') |
| } |
| } |
| // [END model] |
| |
| group = 'io.grpc' // Generated output GroupId |
| version = '1.0-SNAPSHOT' // Version in generated output |
| |
| sourceCompatibility = 1.7 |
| targetCompatibility = 1.7 |
| |
| /** Returns the service name. */ |
| String getGaeProject() { |
| def stream = new ByteArrayOutputStream() |
| exec { |
| executable 'gcloud' |
| args = [ |
| 'config', |
| 'get-value', |
| 'project' |
| ] |
| standardOutput = stream |
| } |
| return stream.toString().trim() |
| } |
| |
| String getService(java.nio.file.Path projectPath) { |
| Node xml = new XmlParser().parse(projectPath.resolve("src/main/webapp/WEB-INF/appengine-web.xml").toFile()) |
| if (xml.service.isEmpty()) { |
| return null |
| } else { |
| return xml.service.text() |
| } |
| } |
| |
| String getAppUrl(String project, String service, String version) { |
| if (version != null && service != null) { |
| return "http://${version}.${service}.${project}.appspot.com" |
| } else { |
| return "http://${project}.appspot.com" |
| } |
| } |
| |
| task runInteropTestRemote(dependsOn: 'appengineDeploy') { |
| doLast { |
| // give remote app some time to settle down |
| sleep(20000) |
| |
| def appUrl = getAppUrl( |
| getGaeProject(), |
| getService(project.getProjectDir().toPath()), |
| System.getProperty('gaeDeployVersion')) |
| logger.log(LogLevel.INFO, "the appURL=" + appUrl) |
| def client = new com.squareup.okhttp.OkHttpClient() |
| // The test suite can take a while to run |
| client.setReadTimeout(3, java.util.concurrent.TimeUnit.MINUTES) |
| // The '?jdk8' argument is ignored by the server, it exists only to tag the request log entry |
| def interopRequest = new com.squareup.okhttp.Request.Builder() |
| .url("${appUrl}/?jdk7").build() |
| |
| // Retry in case GAE is slow and times out |
| int maxRetries = 5 |
| String result = null |
| Throwable caught = null |
| for (int attempt = 0; attempt < maxRetries; attempt++) { |
| try { |
| def response = client.newCall(interopRequest).execute() |
| result = response.body().string() |
| if (response.code() == 200) { |
| return |
| } |
| } catch (Throwable t) { |
| caught = t |
| logger.log(LogLevel.ERROR, "caught exception. will retry if possible", t) |
| } |
| } |
| throw new GradleException("Interop test failed:\nresponse: ${result}\nthrowable:${caught}") |
| } |
| } |