@@ -2,23 +2,20 @@ package com.saveourtool.save.orchestrator.service
22
33import com.github.dockerjava.api.DockerClient
44import com.github.dockerjava.api.async.ResultCallback
5- import com.github.dockerjava.api.command.PullImageResultCallback
65import com.github.dockerjava.api.model.*
76import com.saveourtool.save.entities.Execution
87import com.saveourtool.save.entities.Project
98import com.saveourtool.save.execution.ExecutionStatus
10- import com.saveourtool.save.orchestrator.createTgzStream
119import com.saveourtool.save.orchestrator.docker.DockerContainerRunner
1210import com.saveourtool.save.orchestrator.runner.ContainerRunnerException
1311import com.saveourtool.save.orchestrator.utils.DockerClientTestConfiguration
12+ import com.saveourtool.save.orchestrator.utils.MockserverExtension
13+ import com.saveourtool.save.orchestrator.utils.MockserverExtension.Companion.MOCKSERVER_MOCK_URL
1414
1515import com.saveourtool.save.orchestrator.utils.silentlyCleanupContainer
16- import com.saveourtool.save.orchestrator.utils.silentlyExec
1716import com.saveourtool.save.utils.error
1817import org.junit.jupiter.api.*
19- import org.junit.jupiter.api.condition.DisabledOnOs
20- import org.junit.jupiter.api.condition.EnabledOnOs
21- import org.junit.jupiter.api.condition.OS
18+ import org.junit.jupiter.api.extension.ExtendWith
2219import org.junit.jupiter.api.io.TempDir
2320import org.mockito.kotlin.*
2421import org.slf4j.LoggerFactory
@@ -29,7 +26,6 @@ import org.springframework.context.annotation.Import
2926import org.springframework.http.ResponseEntity
3027import org.springframework.test.context.ActiveProfiles
3128import reactor.kotlin.core.publisher.toMono
32- import java.net.ServerSocket
3329import java.net.URL
3430import java.nio.file.Path
3531import kotlin.io.path.*
@@ -44,19 +40,12 @@ import kotlin.random.Random
4440 ContainerService ::class ,
4541 AgentService ::class ,
4642)
43+ @ExtendWith(MockserverExtension ::class )
4744class ContainerServiceTest {
4845 @Autowired private lateinit var dockerClient: DockerClient
4946 @Autowired private lateinit var containerService: ContainerService
5047 @MockBean private lateinit var orchestratorAgentService: OrchestratorAgentService
5148 private lateinit var testContainerId: String
52- private lateinit var mockserverContainerId: String
53- private val mockserverPort: Int = ServerSocket (0 ).localPort
54- private val mockserverImageName = " mockserver/mockserver"
55- private val mockserverImageVersion = " 5.15.0"
56- private val mockserverImageFullName = " $mockserverImageName :$mockserverImageVersion "
57- private val mockserverVolumeName = " mockserver-config"
58- private val mockserverConfigPath = " /config"
59- private val mockUrl = " /some-path-do-download-save-agent"
6049
6150 init {
6251 if (System .getProperty(" os.name" ).lowercase().contains(" win" )) {
@@ -68,57 +57,6 @@ class ContainerServiceTest {
6857 fun setUp (@TempDir tmpDir : Path ) {
6958 whenever(orchestratorAgentService.updateExecutionStatus(any(), any(), anyOrNull()))
7059 .thenReturn(ResponseEntity .ok().build<Void >().toMono())
71-
72- val configFile = (tmpDir / " initializerJson.json" ).createFile()
73- .also {
74- it.writeText(
75- """
76- [
77- {
78- "httpRequest": {
79- "path": "$mockUrl "
80- },
81- "httpResponse": {
82- "body": "!#/bin/bash\n echo \"sleep\"\n sleep 5000"
83- }
84- }
85- ]
86- """ .trimIndent()
87- )
88- }
89- dockerClient.pullImageCmd(mockserverImageName)
90- .withTag(mockserverImageVersion)
91- .exec(PullImageResultCallback ())
92- .awaitCompletion()
93- dockerClient.createVolumeCmd()
94- .withName(mockserverVolumeName)
95- .exec()
96- mockserverContainerId = dockerClient.createContainerCmd(mockserverImageFullName)
97- .withHostName(" mockserver" )
98- .withHostConfig(
99- HostConfig .newHostConfig()
100- .withBinds(Bind (mockserverVolumeName, Volume (mockserverConfigPath)))
101- .withPortBindings(
102- Ports (
103- ExposedPort .tcp(1080 ),
104- Ports .Binding .bindPort(mockserverPort),
105- )
106- )
107- )
108- .withExposedPorts(ExposedPort .tcp(mockserverPort))
109- .withEnv(" MOCKSERVER_INITIALIZATION_JSON_PATH=$mockserverConfigPath /${configFile.fileName} " )
110- .exec()
111- .id
112- .also { containerId ->
113- createTgzStream(configFile.toFile()).use { out ->
114- dockerClient.copyArchiveToContainerCmd(containerId)
115- .withTarInputStream(out .toByteArray().inputStream())
116- .withRemotePath(mockserverConfigPath)
117- .exec()
118- }
119- dockerClient.startContainerCmd(containerId).exec()
120- }
121-
12260 }
12361
12462 @Test
@@ -134,7 +72,7 @@ class ContainerServiceTest {
13472 }
13573 val configuration = containerService.prepareConfiguration(
13674 testExecution.toRunRequest(
137- saveAgentUrl = URL (" http://host.docker.internal:$mockserverPort$mockUrl " ),
75+ saveAgentUrl = URL (" http://host.docker.internal:${ MockserverExtension .getMockserverExposedPort()}$MOCKSERVER_MOCK_URL " ),
13876 )
13977 )
14078 // start container and query backend
@@ -180,11 +118,6 @@ class ContainerServiceTest {
180118 if (::testContainerId.isInitialized) {
181119 dockerClient.silentlyCleanupContainer(testContainerId)
182120 }
183- if (::mockserverContainerId.isInitialized) {
184- dockerClient.silentlyCleanupContainer(mockserverContainerId)
185- }
186- dockerClient.removeVolumeCmd(mockserverVolumeName).silentlyExec()
187- dockerClient.removeImageCmd(mockserverImageFullName).silentlyExec()
188121 }
189122
190123 companion object {
0 commit comments