Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[test] packaging: add java test project #29297

Closed

Conversation

andyb-elastic
Copy link
Contributor

Adds behavior to the vagrant test plugin that runs jars from the
packagingTest configuration inside test VMs. Makes :qa:vagrant a project
which builds such a packaging test uberjar. This test project doesn't
run anything yet.

For #26741

Adds behavior to the vagrant test plugin that runs jars from the
packagingTest configuration inside test VMs. Makes :qa:vagrant a project
which builds such a packaging test uberjar. This test project doesn't
run anything yet.

For elastic#26741
@andyb-elastic andyb-elastic added >test Issues or PRs that are addressing/adding tests review :Delivery/Packaging RPM and deb packaging, tar and zip archives, shell and batch scripts labels Mar 29, 2018
@andyb-elastic
Copy link
Contributor Author

Jenkins test this please
Jenkins run packaging tests please

@elasticmachine
Copy link
Collaborator

Pinging @elastic/es-core-infra

description 'Clean the project build directory'
group 'Build'
delete project.buildDir
if (project.tasks.findByName('clean') == null) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

++. Because if it has the java plugin this isn't needed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I figured it would be good to not couple it to the expectation that the project also has the java plugin applied

packagingTest project(path: project.path, configuration: 'shadow')
}

shadowJar {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it'd be simpler not to make an uber jar at all and instead execute a main class with classpath. I see that you iterate so you can run multiple jar files so you'd lose that. And you'd have to communicate the main class name to the plugin. I don't know if that is worth it just not to have to build the uber jar, but I think it is worth thinking about.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. The iterating over multiple jars thing isn't really super important, I just figured "all the jars in this directory get executed" is a simple way to reason about it. It also gives a flexible way (the packagingTest configuration) to choose which test projects get included

Similarly, using an uberjar isn't necessarily the goal but I did want however it works to be easy to run by hand inside the test VM like we can with bats (since iterating through gradle on the host is time consuming)

I'll think about this more (also would like to hear thoughts from @rjernst on this)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would stay away from shading if we can. What about having the executable jar contain a classpath entry, and having a simple "test" script be generated which invokes the jar?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll give that a try. After thinking about it a little, dumping the test jars and all their dependencies into a directory and doing java -cp /project/packaging/tests MainClass is still really simple

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rjernst I pushed c16706d to have it copy the test jars and their deps separately (rather than an uberjar) and have the test projects specify a main class

Copy link
Member

@nik9000 nik9000 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@itsmed
Copy link

itsmed commented Apr 3, 2018

jenkins please test this

Copy link
Member

@rjernst rjernst left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left a couple questions.

testMainClass 'org.elasticsearch.packaging.PackagingMain'
}

tasks.test.enabled = false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does this use elasticsearch.build if all these tasks are just disabled? Should this just be a plain groovy project, or is there something else that is needed? If something else, please leave a comment in this file explaining the reasoning.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We discussed this - I was able to get most of the precommit tasks passing, now only test and the license checks are disabled

@@ -39,3 +54,18 @@ setupPackagingTest {
expectedPlugins.setText(plugins.join('\n'), 'UTF-8')
}
}

esvagrant {
testMainClass 'org.elasticsearch.packaging.PackagingMain'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could it be simpler to use a junit runner instead of having to define our own main class?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We discussed this and I changed it to use junit as an entrypoint, as we likely would have ended up reimplementing a bunch of junit's runners' features

@andyb-elastic
Copy link
Contributor Author

@rjernst I pushed 249d57a and 8dee0e6 to address what we discussed earlier

@andyb-elastic andyb-elastic changed the title [test] packaging: add groovy test project [test] packaging: add java test project Apr 4, 2018
@andyb-elastic
Copy link
Contributor Author

Closing in favor of #30161

@mark-vieira mark-vieira added the Team:Delivery Meta label for Delivery team label Nov 11, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
:Delivery/Packaging RPM and deb packaging, tar and zip archives, shell and batch scripts Team:Delivery Meta label for Delivery team >test Issues or PRs that are addressing/adding tests
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants