Cloud-Init test context
The cloud-init context allows assertions based on the artifacts generated after a cloud-init run. Like in the SSH context, the connection to the machine is created via SSH, so the same prerequisites as for the SSH context apply.
package solidblocks.test.gradle.cloudinit
import de.solidblocks.infra.test.SolidblocksTest
import de.solidblocks.infra.test.SolidblocksTestContext
import org.awaitility.Awaitility.await
import org.awaitility.kotlin.withPollInterval
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import java.time.Duration.ofSeconds
import java.util.concurrent.TimeUnit
@ExtendWith(SolidblocksTest::class)
public class CloudInitContext {
@Test
fun terraformExtension(context: SolidblocksTestContext) {
val cloudInit = context.cloudInit("<ssh_host>", "<private_key>")
// print the output of '/var/log/cloud-init-output.log' in case a
// test fails. This is disabled by default to avoid accidental leakage
// of secrets that may be processed during cloud-init runs
cloudInit.printOutputLogOnTestFailure()
// 'isFinished()' will return true, when
// the '/var/lib/cloud/instance/boot-finished'
// file is present
await().atMost(1, TimeUnit.MINUTES).withPollInterval(ofSeconds(5)).until {
cloudInit.isFinished()
}
}
}Note
By enabling CloudInitTestContext.printOutputLogOnTestFailure the output from /var/log/cloud-init-output.log
will be printed if a test fails, please be aware that this might leak credentials. that are processed in a cloud-init script.
Assertions
package solidblocks.test.gradle.cloudinit
import de.solidblocks.infra.test.SolidblocksTest
import de.solidblocks.infra.test.SolidblocksTestContext
import de.solidblocks.infra.test.assertions.shouldBeSuccess
import org.awaitility.Awaitility.await
import org.awaitility.kotlin.withPollInterval
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import java.time.Duration.ofSeconds
import java.util.concurrent.TimeUnit
@ExtendWith(SolidblocksTest::class)
public class CloudInitAssertions {
@Test
fun terraformExtension(context: SolidblocksTestContext) {
val cloudInit = context.cloudInit("<ssh_host>", "<private_key>")
// ensure cloud-init finished without errors
cloudInit.result().shouldBeSuccess()
// dump the cloud-init output log to stdout
cloudInit.printOutputLog()
}
}