# Paketo Buildpackage testing ### Basics - We don't want to re-do all the testing we did in implementation buildpacks, we are not testing buildpack features only that detection in the`order` we outline is valid. - Maybe we don't need to fully commit to any of these right now given we are just worried about `node` `php` and `go` and `dotnet` ### Strategies: Lets consider a 'future' Ruby CNB with the following `buildpack.toml` ``` [[order]] [[order.group]] id = "mri" [[order.group]] id = "bundler" [[order.group]] id = "bundler-install" [[order.group]] id = "ruby-server" [[order.group]] id = "web-framework1" optional = true [[order.group]] id = "web-framework2" optional = true [[order.group]] id = "web-framework3" optional = true [[order]] [[order.group]] id = "jruby" [[order.group]] id = "bundler" [[order.group]] id = "bundler-install" [[order.group]] id = "ruby-server" [[order.group]] id = "web-framework1" optional = true [[order.group]] id = "web-framework2" optional = true [[order.group]] id = "web-framework3" optional = true ``` The buildpackage that will result from this `buildpack.toml` has multiple buildpacks that provide `ruby` and multiple buildpacks that end the group. So a single `pack build` will give us a path through the `buildpack.toml` - Ex: `mri, bundler, bundler-install, ruby-server, web-framework1` This gives us a couple stragies to test these buildpacks. #### Gotta test em all Test all paths through the buildpack. Probably a bad idea... Resulting paths from above: - mri | bundler | bundler-install | ruby-server - mri | bundler | bundler-install | ruby-server | web-framework-1 - mri | bundler | bundler-install | ruby-server | web-framework-2 - ... - No #### Test each buildpack at least once Basic idea is that we want at least one end to end to include each buildpack. Gives us a stronger guarentee that our buildpacks work correctly Resulting tests from this strategy: - mri | bundler | bundler-install | ruby-server | web-framework-1 - jruby | bundler | bundler-install | ruby-server | web-framework-2 - mri | bundler | bundler-install | ruby-server | web-framework-3 #### Test a single `pack` path through an order group This is the least rigourous. Pushes most testing responsibility onto the buildpacks themselves. We only need a single test for each order group to make sure that it is reachable. Assume that all buildpacks in a group have been tested. - (+) minimum number of tests - (-) requires a implementation buildpack to be responsible for testing all possible pack paths that end with it. Resulting tets from this strategy: - mri | bundler | bundler-install | ruby-server | web-framework-1 - jruby | bundler | bundler-install | ruby-server | web-framework-2