Make tests depend on another project?


(Josiah Niedrauer) #1

I’ve got a large repo with multiple projects in it. I have one which compiles the project into a single package. This one depends on the build phase of all the other projects.

I want to install the resulting compiled package, and then run unit tests on some of the projects that have already built. Is it possible to run projects like this? :project1:build -> project2:build -> project1:test

This is what I’ve got so far. It’s not working obviously, but it seems like it should.

if (project.hasProperty('integrationTestCategory')) {
    test.dependsOn {
        ':rpm:build'
        'stopServicesForIntegrationTests'
    }
}

test {
    useJUnit { excludeCategories 'com.organization.util.IntegrationTest' }
    if (project.hasProperty('integrationTestCategory')) {
        useJUnit { includeCategories project.integrationTestCategory }
    }
}

task setupRepoFile(type: Copy) {
    from "${projectDir}/src/test/resources/organization.repo"
    into '/etc/yum.repos.d'
}

task installForIntegrationTests(type: Exec, dependsOn: ':rpm:build') {
    dependsOn 'setupRepoFile'
    String rpmPkg = project(':rpm').rpmBuild.getArtifactPath('server')
    commandLine 'sudo', 'yum', '-y', 'install', rpmPkg
}

task stopServicesForIntegrationTests(type: Exec, dependsOn: installForIntegrationTests) {
    dependsOn 'installForIntegrationTests'
    doLast {
        commandLine 'sudo', 'service', 'project-server', 'stop'
    }
}

The above code runs the integration test (or tries to) before the ‘:rpm’ project has built (seemingly ignoring the dependencies), which fails as the artifact does not yet exist.