void testWithLocallyBuiltImage()

in plugins/sandbox/src/integrationTest/java/co/elastic/gradle/sandbox/SandboxPluginIT.java [271:332]


    void testWithLocallyBuiltImage() {
        helper.settings("""
                include("subproject")
                """
        );

        helper.buildScript("subproject", String.format("""
                        import %s
                        abstract class BuildDockerImage : DefaultTask(), ContainerImageProviderTask {
                            init {
                                tag.convention("ubuntu:20.04@sha256:8ae9bafbb64f63a50caab98fd3a5e37b3eb837a3e0780b78e5218e63193961f9")
                                imageId.convention("test")
                            }
                            abstract override fun getTag(): Property<String>
                            abstract override fun getImageId(): Property<String>
                        }
                        val dockerTask by tasks.registering(BuildDockerImage::class)
                """, ContainerImageProviderTask.class.getName()
        ));
        helper.buildScript(String.format("""
                import %s
                import %s
                plugins {
                    id("co.elastic.sandbox")
                }
                                
                abstract class BuildDockerImage : DefaultTask(), ContainerImageProviderTask {
                    init {
                        tag.convention("ubuntu:20.04@sha256:8ae9bafbb64f63a50caab98fd3a5e37b3eb837a3e0780b78e5218e63193961f9")
                        imageId.convention("test")
                    }
                    abstract override fun getTag(): Property<String>
                    abstract override fun getImageId(): Property<String>
                }
                                
                val dockerTask by tasks.registering(BuildDockerImage::class)
                                
                tasks.register<SandboxDockerExecTask>("test1") {
                    image(dockerTask)
                    setCommandLine(listOf("uname", "-r", "-s"))
                }
                tasks.register<SandboxDockerExecTask>("test2") {
                    image(project(":subproject"))
                    setCommandLine(listOf("uname", "-r", "-s"))
                }
                """, SandboxDockerExecTask.class.getName(), ContainerImageProviderTask.class.getName()
        ));

        final BuildResult result = gradleRunner
                .withArguments("--warning-mode", "fail", "-s", "test1", "test2")
                .build();

        assertDoesNotContain(
                result.getOutput(),
                "Pulling docker image: ubuntu:20.04@sha256:8ae9bafbb64f63a50caab98fd3a5e37b3eb837a3e0780b78e5218e63193961f9"
        );
        assertContains(result.getOutput(), "Linux ");

        // Assert that the dependent tasks ran. These will be up-to-date as they don't have any task actions
        assertEquals(Objects.requireNonNull(result.task(":dockerTask")).getOutcome(), TaskOutcome.UP_TO_DATE);
        assertEquals(Objects.requireNonNull(result.task(":subproject:dockerTask")).getOutcome(), TaskOutcome.UP_TO_DATE);
    }