diff --git a/.travis.yml b/.travis.yml index 933e5e504..955add4a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,5 +61,5 @@ script: # using "&&" instead of several "-" means that integrationTest does not run if test fails, # and Docker test does not run if integration test fails, which makes PR failure easier to understand. # @see https://docs.travis-ci.com/user/job-lifecycle/#customizing-the-build-phase - - ./gradlew clean && ./gradlew --console=plain licenseMain licenseTest licenseIntegrationTest check && ./gradlew --console=plain integrationTest && sudo service mysql stop && docker-compose build && docker-compose up -d && sleep 30s && http --verify=no --timeout 240 --check-status get https://localhost:8443/fineract-provider/actuator/health + - ./gradlew --console=plain licenseMain licenseTest licenseIntegrationTest check && ./gradlew --console=plain integrationTest && sudo service mysql stop && docker-compose build && docker-compose up -d && sleep 30s && http --verify=no --timeout 240 --check-status get https://localhost:8443/fineract-provider/actuator/health # We stop the mysql system service when running the Docker test to avoid port 3306 conflicts (unless we run the mysql in docker-compose on another port; req. FINERACT-773) diff --git a/fineract-provider/.gitignore b/fineract-provider/.gitignore index 011882799..e4bae8609 100644 --- a/fineract-provider/.gitignore +++ b/fineract-provider/.gitignore @@ -1,7 +1,6 @@ bin out/ build -src/main/resources/git.properties repos .classpath .project diff --git a/fineract-provider/build.gradle b/fineract-provider/build.gradle index 595e755d2..955375f12 100644 --- a/fineract-provider/build.gradle +++ b/fineract-provider/build.gradle @@ -24,33 +24,33 @@ gradle clean tomcatrunwar project.ext.jerseyVersion = '1.17' buildscript { - ext { - openJPAVersion = '3.1.0' - jacocoVersion = '0.8.5' - } - repositories { - jcenter() - mavenCentral() - maven { url "https://plugins.gradle.org/m2/" } - } + ext { + openJPAVersion = '3.1.0' + jacocoVersion = '0.8.5' + } + repositories { + jcenter() + mavenCentral() + maven { url "https://plugins.gradle.org/m2/" } + } - dependencies { - classpath 'io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE' - classpath 'com.bmuschko:gradle-tomcat-plugin:2.5', - 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0', - 'org.zeroturnaround:gradle-jrebel-plugin:1.1.2', - 'org.springframework.boot:spring-boot-gradle-plugin:2.2.4.RELEASE' - // below - classpath "org.apache.openjpa:openjpa:$openJPAVersion" - classpath 'com.radcortez.gradle:openjpa-gradle-plugin:3.1.0' - classpath "org.nosphere.apache:creadur-rat-gradle:0.6.0" - classpath "com.github.spotbugs:spotbugs-gradle-plugin:2.0.1" - // Use Guava version 23+ as a workaround to spotbug intergration. - // See: https://github.com/spotbugs/spotbugs-gradle-plugin/issues/128#issuecomment-535864882 - classpath 'com.google.guava:guava:28.1-jre' - classpath "gradle.plugin.com.github.andygoossens:gradle-modernizer-plugin:1.3.0" - classpath "gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:2.2.2" - } + dependencies { + classpath 'io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE' + classpath 'com.bmuschko:gradle-tomcat-plugin:2.5', + 'nl.javadude.gradle.plugins:license-gradle-plugin:0.11.0', + 'org.zeroturnaround:gradle-jrebel-plugin:1.1.2', + 'org.springframework.boot:spring-boot-gradle-plugin:2.2.4.RELEASE' + // below + classpath "org.apache.openjpa:openjpa:$openJPAVersion" + classpath 'com.radcortez.gradle:openjpa-gradle-plugin:3.1.0' + classpath 'gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.2.2' + classpath "com.github.spotbugs:spotbugs-gradle-plugin:2.0.1" + // Use Guava version 23+ as a workaround to spotbug intergration. + // See: https://github.com/spotbugs/spotbugs-gradle-plugin/issues/128#issuecomment-535864882 + classpath 'com.google.guava:guava:28.1-jre' + classpath "gradle.plugin.com.github.andygoossens:gradle-modernizer-plugin:1.3.0" + classpath "gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:2.2.2" + } } apply plugin: 'io.spring.dependency-management' @@ -73,70 +73,70 @@ apply plugin: "com.gorylenko.gradle-git-properties" // apply plugin: 'pmd' dependencyManagement { - imports { - mavenBom 'org.springframework:spring-framework-bom:5.2.3.RELEASE' - } + imports { + mavenBom 'org.springframework:spring-framework-bom:5.2.3.RELEASE' + } - dependencies { - dependency 'org.springframework.security.oauth:spring-security-oauth2:2.3.6.RELEASE' - dependency 'org.apache.openjpa:openjpa:3.1.0' - dependency 'com.squareup.retrofit:retrofit:1.6.1' - dependency 'com.squareup.okhttp:okhttp:2.0.0' - dependency 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' - dependency 'com.google.code.gson:gson:+' - dependency 'com.google.guava:guava:28.1-jre' - dependency 'joda-time:joda-time:+' - dependency 'org.apache.commons:commons-email:1.3.3' - dependency 'org.apache.commons:commons-lang3:+' - dependency 'org.drizzle.jdbc:drizzle-jdbc:1.4' - dependency 'com.lowagie:itext:2.1.7' - dependency 'com.lowagie:itext-rtf:2.1.7' - dependency 'org.mnode.ical4j:ical4j:1.0.4' - dependency 'com.googlecode.flyway:flyway-core:2.1.1' - dependency 'org.quartz-scheduler:quartz:+' - dependency 'com.amazonaws:aws-java-sdk-s3:1.11.80' - dependency 'net.sf.ehcache:ehcache:+' - dependency 'com.github.spullara.mustache.java:compiler:0.8.12' - dependency 'com.jayway.jsonpath:json-path:0.9.1' - dependency 'org.apache.tika:tika-core:1.9' - dependency 'org.apache.httpcomponents:httpclient:+' - dependency 'io.swagger:swagger-jersey-jaxrs:1.5.15' - dependency 'org.springframework:spring-jms:4.0.7.RELEASE' - dependency 'org.apache.activemq:activemq-broker:+' - dependency 'javax.validation:validation-api:+' - dependency 'org.apache.bval:org.apache.bval.bundle:2.0.2' - dependencySet(group: 'io.rest-assured', version: '3.3.0'){ - entry 'rest-assured' - } - dependency 'junit:junit:+' - //dependency 'junit:junit-dep:4.11' - dependency 'org.mockito:mockito-core:+' - dependency 'org.slf4j:slf4j-simple:1.7.30' - dependency 'com.mockrunner:mockrunner-jms:2.0.1' - dependency 'com.mockrunner:mockrunner-jdbc:2.0.1' + dependencies { + dependency 'org.springframework.security.oauth:spring-security-oauth2:2.3.6.RELEASE' + dependency 'org.apache.openjpa:openjpa:3.1.0' + dependency 'com.squareup.retrofit:retrofit:1.6.1' + dependency 'com.squareup.okhttp:okhttp:2.0.0' + dependency 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' + dependency 'com.google.code.gson:gson:+' + dependency 'com.google.guava:guava:28.1-jre' + dependency 'joda-time:joda-time:+' + dependency 'org.apache.commons:commons-email:1.3.3' + dependency 'org.apache.commons:commons-lang3:+' + dependency 'org.drizzle.jdbc:drizzle-jdbc:1.4' + dependency 'com.lowagie:itext:2.1.7' + dependency 'com.lowagie:itext-rtf:2.1.7' + dependency 'org.mnode.ical4j:ical4j:1.0.4' + dependency 'com.googlecode.flyway:flyway-core:2.1.1' + dependency 'org.quartz-scheduler:quartz:+' + dependency 'com.amazonaws:aws-java-sdk-s3:1.11.80' + dependency 'net.sf.ehcache:ehcache:+' + dependency 'com.github.spullara.mustache.java:compiler:0.8.12' + dependency 'com.jayway.jsonpath:json-path:0.9.1' + dependency 'org.apache.tika:tika-core:1.9' + dependency 'org.apache.httpcomponents:httpclient:+' + dependency 'io.swagger:swagger-jersey-jaxrs:1.5.15' + dependency 'org.springframework:spring-jms:4.0.7.RELEASE' + dependency 'org.apache.activemq:activemq-broker:+' + dependency 'javax.validation:validation-api:+' + dependency 'org.apache.bval:org.apache.bval.bundle:2.0.2' + dependencySet(group: 'io.rest-assured', version: '3.3.0'){ + entry 'rest-assured' + } + dependency 'junit:junit:+' + //dependency 'junit:junit-dep:4.11' + dependency 'org.mockito:mockito-core:+' + dependency 'org.slf4j:slf4j-simple:1.7.30' + dependency 'com.mockrunner:mockrunner-jms:2.0.1' + dependency 'com.mockrunner:mockrunner-jdbc:2.0.1' - dependencySet(group: 'com.sun.jersey', version: jerseyVersion) { - entry 'jersey-core' - entry 'jersey-servlet' - entry 'jersey-server' - entry 'jersey-json' - } - dependencySet(group: 'com.sun.jersey.contribs', version: jerseyVersion) { - entry 'jersey-spring' - entry 'jersey-multipart' - } - dependencySet(group: 'org.apache.poi', version: '3.9') { - entry 'poi' - entry 'poi-ooxml' - entry 'poi-ooxml-schemas' - } - dependencySet(group: 'org.apache.tomcat.embed', version: '7.0.94') { - entry 'tomcat-embed-core' - entry 'tomcat-embed-jasper' - entry 'tomcat-embed-logging-log4j' - } - - } + dependencySet(group: 'com.sun.jersey', version: jerseyVersion) { + entry 'jersey-core' + entry 'jersey-servlet' + entry 'jersey-server' + entry 'jersey-json' + } + dependencySet(group: 'com.sun.jersey.contribs', version: jerseyVersion) { + entry 'jersey-spring' + entry 'jersey-multipart' + } + dependencySet(group: 'org.apache.poi', version: '3.9') { + entry 'poi' + entry 'poi-ooxml' + entry 'poi-ooxml-schemas' + } + dependencySet(group: 'org.apache.tomcat.embed', version: '7.0.94') { + entry 'tomcat-embed-core' + entry 'tomcat-embed-jasper' + entry 'tomcat-embed-logging-log4j' + } + + } } /* define the valid syntax level for source files */ @@ -175,7 +175,11 @@ jacocoTestReport{ } rat { + xmlOutput = false + htmlOutput = false + plainOutput = true verbose = false + // inputDir = './..' reportDir = new File(buildDir,'reports/rat') excludes = [ '**/licenses/**', @@ -250,6 +254,9 @@ rat { '**/assets/uglify.js', //Ignore out folder '**/out/**', + + // Git build info + "**/git.properties", ] } @@ -457,20 +464,20 @@ sourceSets.test.output.resourcesDir = sourceSets.test.java.outputDir /* Exclude maria db and embedded tomcat related files for non dev builds */ if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) { -sourceSets { - main { - java { - exclude '**/Server*' - exclude '**/MariaDB4j*' - exclude '**/EmbeddedTomcatWithSSLConfiguration.java' + sourceSets { + main { + java { + exclude '**/Server*' + exclude '**/MariaDB4j*' + exclude '**/EmbeddedTomcatWithSSLConfiguration.java' + } + } + test { + java { + exclude '**/core/boot/tests/**' + } } } - test { - java { - exclude '**/core/boot/tests/**' - } - } -} } sourceSets { @@ -575,14 +582,11 @@ tasks.withType(SpotBugsTask) { } gitProperties { - gitPropertiesResourceDir = "${project.rootDir}/src/main/resources" + gitPropertiesResourceDir = "$buildDir/classes/java/main/resources" dateFormat = "yyyy-MM-dd'T'HH:mmZ" dateFormatTimeZone = "GMT" + failOnNoGitDirectory = false } +// make sure the generateGitProperties task always executes (even when git.properties is not changed) generateGitProperties.outputs.upToDateWhen { false } - -clean { - delete "${project.rootDir}/src/main/resources/git.properties" -} - diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ActuatorIntegrationTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ActuatorIntegrationTest.java new file mode 100644 index 000000000..48219f873 --- /dev/null +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/ActuatorIntegrationTest.java @@ -0,0 +1,47 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +package org.apache.fineract.integrationtests; + +import static org.junit.Assert.assertTrue; + +import io.restassured.RestAssured; +import io.restassured.http.ContentType; +import io.restassured.response.Response; +import java.util.Map; +import org.junit.Test; + +public class ActuatorIntegrationTest { + + private final static String INFO_URL = "/fineract-provider/actuator/info"; + + @Test + public void testActuatorGitBuildInfo() { + Response response = RestAssured.given() + .headers("Content-Type", ContentType.JSON, "Accept", ContentType.JSON).when() + .get(INFO_URL).then().contentType(ContentType.JSON).extract().response(); + + Map gitBuildInfo = response.jsonPath().getMap("git"); + + assertTrue(gitBuildInfo.containsKey("branch")); + assertTrue(gitBuildInfo.containsKey("remote")); + + } + +}