Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Kotlin测试未能验证连接,最终失败,表不存在_Mysql_Spring Boot_Kotlin_Spring Data Jpa_Liquibase - Fatal编程技术网

Mysql Kotlin测试未能验证连接,最终失败,表不存在

Mysql Kotlin测试未能验证连接,最终失败,表不存在,mysql,spring-boot,kotlin,spring-data-jpa,liquibase,Mysql,Spring Boot,Kotlin,Spring Data Jpa,Liquibase,得到以下错误,当我运行我的测试时,这是一个Kotlin项目,我正在重新运行我的测试的嵌入式版本Mariadb,当我从IntelliJ中运行独立测试时,此错误不存在。 看起来可能是表创建的超时问题。日志中提到的这个表是在其他各种测试中创建的 [INFO] Running com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT 2019-05-20 17:31:50.049 WARN 45164 --- [ main]

得到以下错误,当我运行我的测试时,这是一个Kotlin项目,我正在重新运行我的测试的嵌入式版本
Mariadb
,当我从
IntelliJ
中运行独立测试时,此错误不存在。 看起来可能是表创建的超时问题。日志中提到的这个表是在其他各种测试中创建的

[INFO] Running com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT
2019-05-20 17:31:50.049  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@678c1c13 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.055  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@4c8a0916 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.056  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@3d189ad8 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.057  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@110ff601 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.060  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@2cdda367 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.061  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@43bcef96 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.063  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@6bfcf5f (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.064  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@62a8e057 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.065  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@19fc522c (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
2019-05-20 17:31:50.066  WARN 45164 --- [           main] com.zaxxer.hikari.pool.PoolBase          : HikariPool-84 - Failed to validate connection org.mariadb.jdbc.MariaDbConnection@19201d11 (Connection.setNetworkTimeout cannot be called on a closed connection). Possibly consider using a shorter maxLifetime value.
Hibernate: select reportdefi0_.id as id1_9_, reportdefi0_.delivery_policy as delivery2_9_, reportdefi0_.enabled as enabled3_9_, reportdefi0_.name as name4_9_, reportdefi0_.parameter_policy as paramete5_9_, reportdefi0_.pipeline as pipeline6_9_, reportdefi0_.scheduling_policy as scheduli7_9_, reportdefi0_.schema_name as schema_n8_9_, reportdefi0_.transformation_policy as transfor9_9_ from report_definition reportdefi0_
2019-05-20 17:31:50.114  WARN 45164 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1146, SQLState: 42S02
2019-05-20 17:31:50.115 ERROR 45164 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : (conn=2) Table 'qronicle.report_definition' doesn't exist
2019-05-20 17:31:50.139  INFO 45164 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-84 - Shutdown initiated...
2019-05-20 17:31:50.145  INFO 45164 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-84 - Shutdown completed.
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 11.041 s <<< FAILURE! - in com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT
[ERROR] ReportJobManager saveDeliverables method should have transactional behavior  Time elapsed: 0.144 s  <<< ERROR!
org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT.setupReportDefinition(ReportJobManagerTransactionalIT.kt:83)
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
    at com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT.setupReportDefinition(ReportJobManagerTransactionalIT.kt:83)
Caused by: java.sql.SQLSyntaxErrorException: (conn=2) Table 'qronicle.report_definition' doesn't exist
    at com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT.setupReportDefinition(ReportJobManagerTransactionalIT.kt:83)
Caused by: java.sql.SQLException: 
Table 'qronicle.report_definition' doesn't exist
Query is: select reportdefi0_.id as id1_9_, reportdefi0_.delivery_policy as delivery2_9_, reportdefi0_.enabled as enabled3_9_, reportdefi0_.name as name4_9_, reportdefi0_.parameter_policy as paramete5_9_, reportdefi0_.pipeline as pipeline6_9_, reportdefi0_.scheduling_policy as scheduli7_9_, reportdefi0_.schema_name as schema_n8_9_, reportdefi0_.transformation_policy as transfor9_9_ from report_definition reportdefi0_
java thread: main
    at com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT.setupReportDefinition(ReportJobManagerTransactionalIT.kt:83)
[INFO]运行com.netapp.qronicle.jobs.ReportJobManagerTransactionalIT
2019-05-20 17:31:50.049警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-无法验证连接org.mariadb.jdbc。MariaDbConnection@678c1c13(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.055警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@4c8a0916(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.056警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@3d189ad8(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.057警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@110ff601(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.060警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@2cdda367(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.061警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@43bcef96(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.063警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@6bfcf5f(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.064警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@62a8e057(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.065警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@19fc522c(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
2019-05-20 17:31:50.066警告45164---[main]com.zaxxer.hikari.pool.PoolBase:HikariPool-84-验证连接org.mariadb.jdbc失败。MariaDbConnection@19201d11(无法在关闭的连接上调用Connection.setNetworkTimeout)。可能考虑使用较短的最大寿命值。
Hibernate:选择reportdefi0.id作为id1\u 9\u,reportdefi0.delivery\u策略作为delivery2\u 9\u,reportdefi0.enabled作为enabled3\u 9\u,reportdefi0\u.name作为name4\u 9\u,reportdefi0\u.parameter\u策略作为Parameter5\u 9\u,reportdefi0\u.pipeline作为pipeline6\u 9\u,reportdefi0\u,ReportDef0。转换策略从ReportDef0定义为Transformor9_
2019-05-20 17:31:50.114警告45164---[main]o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:1146,SQLState:42S02
2019-05-20 17:31:50.115错误45164---[main]o.h.engine.jdbc.spi.SqlExceptionHelper:(conn=2)表'qronicle.report_definition'不存在
2019-05-20 17:31:50.139信息45164---[main]com.zaxxer.hikari.HikariDataSource:hikaripol-84-已启动关机。。。
2019-05-20 17:31:50.145信息45164---[main]com.zaxxer.hikari.HikariDataSource:hikaripol-84-关闭完成。
[错误]测试运行:1,失败:0,错误:1,跳过:0,经过的时间:11.041秒
package com.netapp.qronicle.jobs

import com.netapp.qronicle.EmbeddedMariaDBLifecycle
import com.netapp.qronicle.model.internal.ReportDefinition
import com.netapp.qronicle.model.internal.ReportDeliverable
import com.netapp.qronicle.monitoring.PipelineMetrics
import com.netapp.qronicle.monitoring.ReportJobManagerMetrics
import com.netapp.qronicle.pipelines.PipelineFactory.ValidPipeline.AWS_CLOUD_VOLUMES
import com.netapp.qronicle.policies.delivery.Deliverable
import com.netapp.qronicle.policies.delivery.DeliverableType
import com.netapp.qronicle.policies.delivery.createRetentionProcessor
import com.netapp.qronicle.policies.parameters.PipelineParameters
import com.netapp.qronicle.registry.ValidDeliveryPolicy.EMAIL_RETENTION
import com.netapp.qronicle.registry.ValidParameterPolicy.OFFSET_DAILY
import com.netapp.qronicle.registry.ValidTransformationPolicy.NO_TRANSFORMATION
import com.netapp.qronicle.reports.ReportPipeline
import com.netapp.qronicle.reports.ReportPipelineResult
import com.netapp.qronicle.reports.SingleReportPipelineResult
import com.netapp.qronicle.repositories.internal.ReportDefinitionRepository
import com.netapp.qronicle.repositories.internal.ReportDeliverableRepository
import com.netapp.qronicle.repositories.internal.ReportOutputRepository
import com.netapp.qronicle.repositories.internal.ReportRetentionRepository
import io.micrometer.core.instrument.simple.SimpleMeterRegistry
import io.mockk.every
import io.mockk.mockk
import org.aspectj.lang.Aspects
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase.Replace
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
import org.springframework.context.annotation.AdviceMode
import org.springframework.test.annotation.DirtiesContext
import org.springframework.test.annotation.Rollback
import org.springframework.test.context.ActiveProfiles
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.transaction.annotation.EnableTransactionManagement
import javax.inject.Inject

@ExtendWith(SpringExtension::class, EmbeddedMariaDBLifecycle::class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
@ActiveProfiles("test")
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
class ReportJobManagerTransactionalIT {
    companion object {
        /**
         * The aspects must be initialized with counters so that the late-init properties are initialized. These
         * counters don't have to specifically be named correctly--just initialized so compile-time weaving code
         * executes properly.
         */
        @BeforeAll
        @JvmStatic
        fun initAspect() {
            val registry = SimpleMeterRegistry()
            val pipelineMetricsAspect = Aspects.aspectOf(PipelineMetrics::class.java)
            pipelineMetricsAspect.pipelinesSucceeded = registry.counter("test.pipelinesSucceeded")
            pipelineMetricsAspect.pipelinesFailed = registry.counter("test.pipelinesFailed")
            pipelineMetricsAspect.pipelineCreateCalls = registry.counter("test.pielinesCreated")

            val reportJobManagerMetricsAspect = Aspects.aspectOf(ReportJobManagerMetrics::class.java)
            reportJobManagerMetricsAspect.errorCount = registry.counter("test.errorCount")
            reportJobManagerMetricsAspect.callCount = registry.counter("test.callCount")
        }
    }

    @Inject
    lateinit var reportOutputRepo: ReportOutputRepository

    @Inject
    lateinit var reportDefinitionRepo: ReportDefinitionRepository

    @Inject
    lateinit var deliverableRepository: ReportDeliverableRepository

    @Inject
    lateinit var retentionRepository: ReportRetentionRepository

    @BeforeEach
    fun setupReportDefinition() {
        reportDefinitionRepo.deleteAll()
        reportOutputRepo.deleteAll()
        deliverableRepository.deleteAll()

        val def = ReportDefinition()
        def.deliveryPolicy = EMAIL_RETENTION
        def.parameterPolicy = OFFSET_DAILY
        def.name = "testDef"
        def.schemaName = "test"
        def.pipeline = AWS_CLOUD_VOLUMES
        def.transformationPolicy = NO_TRANSFORMATION
        def.attributes = mapOf(
            "test.delivery.email.host" to "testhost",
            "test.delivery.email.username" to "testuser",
            "test.delivery.email.password" to "testpw",
            "test.delivery.email.fromAddress" to "guy@place.com",
            "test.delivery.email.toAddresses" to "otherguy@otherplace.com",
            "test.delivery.email.port" to "123",
            "test.delivery.email.composite0.csvFileName" to "test.csv",
            "test.delivery.csvFileName" to "test.csv",
            "test.delivery.retention.reportType" to "MS_INTERNAL_BILLING",
            "test.delivery.retention.customerName" to "Microsoft",
            "test.delivery.retention.dataCenterId" to "DC1",
            "test.delivery.timezone" to "UTC",
            "test.delivery.offsetAmount" to "1",
            "test.delivery.offsetUnit" to "DAYS"
        )

        reportDefinitionRepo.save(def)
    }

    @Test
    @Rollback(false)
    @DirtiesContext
    fun `ReportJobManager saveDeliverables method should have transactional behavior`() {
        val brokenDeliverableRepo = mockk<ReportDeliverableRepository>()
        every { brokenDeliverableRepo.save(any<ReportDeliverable>()) } throws RuntimeException("Oh no")

        val reportJobManager = ReportJobManager(reportOutputRepo, brokenDeliverableRepo, mockk(relaxed = true), mockk(relaxed = true), mockk(relaxed = true))
        val savedDef = reportDefinitionRepo.findByName("testDef") ?: Assertions.fail("Could not find report definition in DB")

        val pipeline = object : ReportPipeline {
            override val isValid = true
            override fun runPipeline(): List<ReportPipelineResult> = emptyList()
            override fun validate(): List<String> = emptyList()
            override val parameterPolicy = object : PipelineParameters {
                override fun generateReportOutputName() = "testOutputName"
            }
            override val postProcessors = listOf(createRetentionProcessor(retentionRepository))
        }

        val deliverable = Deliverable(
            deliverable = "stuff".toByteArray(),
            mimeType = "text/plain",
            deliverableName = "testDeliverableName",
            successful = true,
            type = DeliverableType.AWS_CSV_ROW
        )

        val result = SingleReportPipelineResult(
            deliverables = listOf(deliverable),
            isSuccessful = true,
            error = null
        )

        Assertions.assertThrows(RuntimeException::class.java) {
            reportJobManager.saveOutput(savedDef, pipeline, listOf(result), null)
        }

        Assertions.assertEquals(0, reportOutputRepo.findAll().count()) { "Report outputs should not be found" }
        Assertions.assertEquals(0, deliverableRepository.findAll().count()) { "Deliverables were found" }
    }
}