fun testEndToEnd()

in jetbrains-core/it/software/aws/toolkits/jetbrains/services/clouddebug/python/PythonDebugEndToEndTest.kt [37:109]


    fun testEndToEnd() {
        // setup project workspace
        val testScript = addPythonFile(
            "test.py",
            """
            import hello
            import folderNoTrailingSlash.hello
            import folderTrailingSlash.hello
            """.trimIndent()
        )
        val file = addPythonFile("hello.py")
        projectRule.addBreakpoint()

        val folderNoTrailingSlash = addPythonFile("folderNoTrailingSlash/hello.py")
        projectRule.addBreakpoint()
        projectRule.fixture.addFileToProject("folderNoTrailingSlash/__init__.py", "")

        val folderTrailingSlash = addPythonFile("folderTrailingSlash/hello.py")
        projectRule.addBreakpoint()
        projectRule.fixture.addFileToProject("folderTrailingSlash/__init__.py", "")

        // set breakpoint
        val countDown = CountDownLatch(3)
        checkBreakPointHit(projectRule.project) {
            countDown.countDown()
        }

        setUpMocks()

        // run a run configuration
        val configuration = EcsCloudDebugRunConfiguration(
            projectRule.project,
            EcsCloudDebugRunConfigurationProducer.getFactory()
        ).apply {
            clusterArn(service.clusterArn())
            // TODO: remove this once we fix the UX around which service is debugged
            serviceArn(
                service.serviceArn().let {
                    // replace service name with instrumented service name
                    val instrumentedServiceName = "cloud-debug-${EcsUtils.serviceArnToName(service.serviceArn())}"
                    it.replace(EcsUtils.serviceArnToName(it), instrumentedServiceName)
                }
            )
            containerOptions(
                mapOf(
                    "ContainerName" to ContainerOptions().apply {
                        platform = CloudDebuggingPlatform.PYTHON
                        startCommand = "python /${testScript.fileName}"
                        artifactMappings = listOf(
                            ArtifactMapping(testScript.toString(), "/test.py"),
                            ArtifactMapping(file.toString(), "/hello.py"),
                            ArtifactMapping(folderNoTrailingSlash.parent.toString().trimEnd('/'), "/"),
                            ArtifactMapping(folderTrailingSlash.parent.toString().trimEnd('/') + '/', "/folderTrailingSlash")
                        )
                    }
                )
            )
        }

        runUnderRealCredentials(projectRule.project) {
            try {
                configuration.regionId(projectRule.project.activeRegion().id)
                configuration.credentialProviderId(projectRule.project.activeCredentialProvider().id)
                configuration.checkConfiguration()
            } catch (_: RuntimeConfigurationWarning) {
                // ignore warnings because we know what we're doing
            }
            executeRunConfigurationAndWait(configuration, DefaultDebugExecutor.EXECUTOR_ID)
        }

        // check breakpoint hit
        assertThat(countDown.count).isEqualTo(0)
    }