Skip to content

Commit 3aa3cea

Browse files
Merge pull request #78 from leanix/feature/cid-3525-fix-readiness
cid-3525: Change the full scan to async method
2 parents 6a2c467 + 1c9c7b3 commit 3aa3cea

File tree

4 files changed

+128
-88
lines changed

4 files changed

+128
-88
lines changed
Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package net.leanix.githubagent.listener
22

3-
import net.leanix.githubagent.handler.BrokerStompSessionHandler
4-
import net.leanix.githubagent.services.CachingService
5-
import net.leanix.githubagent.services.GitHubAuthenticationService
6-
import net.leanix.githubagent.services.GitHubEnterpriseService
7-
import net.leanix.githubagent.services.GitHubScanningService
8-
import net.leanix.githubagent.services.SyncLogService
9-
import net.leanix.githubagent.services.WebSocketService
10-
import net.leanix.githubagent.shared.APP_NAME_TOPIC
3+
import net.leanix.githubagent.services.GitHubStartService
114
import org.slf4j.LoggerFactory
125
import org.springframework.boot.context.event.ApplicationReadyEvent
136
import org.springframework.context.ApplicationListener
@@ -17,40 +10,13 @@ import org.springframework.stereotype.Component
1710
@Component
1811
@Profile("!test")
1912
class ApplicationReadyListener(
20-
private val githubAuthenticationService: GitHubAuthenticationService,
21-
private val webSocketService: WebSocketService,
22-
private val gitHubScanningService: GitHubScanningService,
23-
private val gitHubEnterpriseService: GitHubEnterpriseService,
24-
private val cachingService: CachingService,
25-
private val brokerStompSessionHandler: BrokerStompSessionHandler,
26-
private val syncLogService: SyncLogService
13+
private val gitHubStartService: GitHubStartService,
2714
) : ApplicationListener<ApplicationReadyEvent> {
2815

2916
private val logger = LoggerFactory.getLogger(this::class.java)
3017

3118
override fun onApplicationEvent(event: ApplicationReadyEvent) {
32-
webSocketService.initSession()
33-
if (!brokerStompSessionHandler.isConnected()) {
34-
logger.error("Stopping the application as the WebSocket connection could not be established.")
35-
return
36-
}
37-
kotlin.runCatching {
38-
syncLogService.sendFullScanStart(null)
39-
scanResources()
40-
}.onSuccess {
41-
syncLogService.sendFullScanSuccess()
42-
}.onFailure {
43-
syncLogService.sendFullScanFailure(it.message)
44-
}
45-
}
46-
47-
private fun scanResources() {
48-
githubAuthenticationService.generateAndCacheJwtToken()
49-
val jwt = cachingService.get("jwtToken") as String
50-
webSocketService.sendMessage(
51-
APP_NAME_TOPIC,
52-
gitHubEnterpriseService.getGitHubApp(jwt).slug
53-
)
54-
gitHubScanningService.scanGitHubResources()
19+
logger.info("Agent started")
20+
gitHubStartService.startAgent()
5521
}
5622
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package net.leanix.githubagent.services
2+
3+
import net.leanix.githubagent.handler.BrokerStompSessionHandler
4+
import net.leanix.githubagent.shared.APP_NAME_TOPIC
5+
import org.slf4j.LoggerFactory
6+
import org.springframework.scheduling.annotation.Async
7+
import org.springframework.stereotype.Service
8+
9+
@Service
10+
class GitHubStartService(
11+
private val githubAuthenticationService: GitHubAuthenticationService,
12+
private val webSocketService: WebSocketService,
13+
private val gitHubScanningService: GitHubScanningService,
14+
private val gitHubEnterpriseService: GitHubEnterpriseService,
15+
private val cachingService: CachingService,
16+
private val brokerStompSessionHandler: BrokerStompSessionHandler,
17+
private val syncLogService: SyncLogService
18+
) {
19+
20+
private val logger = LoggerFactory.getLogger(this::class.java)
21+
22+
@Async
23+
fun startAgent() {
24+
webSocketService.initSession()
25+
if (!brokerStompSessionHandler.isConnected()) {
26+
logger.error("Stopping the application as the WebSocket connection could not be established.")
27+
return
28+
}
29+
kotlin.runCatching {
30+
syncLogService.sendFullScanStart(null)
31+
scanResources()
32+
}.onSuccess {
33+
syncLogService.sendFullScanSuccess()
34+
}.onFailure {
35+
syncLogService.sendFullScanFailure(it.message)
36+
}
37+
}
38+
39+
private fun scanResources() {
40+
githubAuthenticationService.generateAndCacheJwtToken()
41+
val jwt = cachingService.get("jwtToken") as String
42+
webSocketService.sendMessage(
43+
APP_NAME_TOPIC,
44+
gitHubEnterpriseService.getGitHubApp(jwt).slug
45+
)
46+
gitHubScanningService.scanGitHubResources()
47+
}
48+
}

src/test/kotlin/net/leanix/githubagent/listener/ApplicationReadyListenerTest.kt

Lines changed: 7 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,73 +3,30 @@ package net.leanix.githubagent.listener
33
import io.mockk.every
44
import io.mockk.mockk
55
import io.mockk.verify
6-
import net.leanix.githubagent.dto.GitHubAppResponse
7-
import net.leanix.githubagent.handler.BrokerStompSessionHandler
8-
import net.leanix.githubagent.services.CachingService
9-
import net.leanix.githubagent.services.GitHubAuthenticationService
10-
import net.leanix.githubagent.services.GitHubEnterpriseService
11-
import net.leanix.githubagent.services.GitHubScanningService
12-
import net.leanix.githubagent.services.SyncLogService
13-
import net.leanix.githubagent.services.WebSocketService
14-
import net.leanix.githubagent.shared.APP_NAME_TOPIC
6+
import net.leanix.githubagent.services.GitHubStartService
157
import org.junit.jupiter.api.BeforeEach
168
import org.junit.jupiter.api.Test
179

1810
class ApplicationReadyListenerTest {
1911

20-
private lateinit var githubAuthenticationService: GitHubAuthenticationService
21-
private lateinit var webSocketService: WebSocketService
22-
private lateinit var gitHubScanningService: GitHubScanningService
23-
private lateinit var gitHubEnterpriseService: GitHubEnterpriseService
24-
private lateinit var cachingService: CachingService
12+
private lateinit var gitHubStartService: GitHubStartService
2513
private lateinit var applicationListener: ApplicationReadyListener
26-
private lateinit var brokerStompSessionHandler: BrokerStompSessionHandler
27-
private lateinit var syncLogService: SyncLogService
2814

2915
@BeforeEach
3016
fun setUp() {
31-
githubAuthenticationService = mockk()
32-
webSocketService = mockk()
33-
gitHubScanningService = mockk()
34-
gitHubEnterpriseService = mockk()
35-
cachingService = mockk()
36-
brokerStompSessionHandler = mockk()
37-
syncLogService = mockk()
17+
gitHubStartService = mockk()
3818

3919
applicationListener = ApplicationReadyListener(
40-
githubAuthenticationService,
41-
webSocketService,
42-
gitHubScanningService,
43-
gitHubEnterpriseService,
44-
cachingService,
45-
brokerStompSessionHandler,
46-
syncLogService
20+
gitHubStartService
4721
)
4822

49-
every { webSocketService.initSession() } returns Unit
50-
every { webSocketService.sendMessage(any(), any()) } returns Unit
51-
every { githubAuthenticationService.generateAndCacheJwtToken() } returns Unit
52-
every { cachingService.get("jwtToken") } returns "jwt"
53-
every { cachingService.set("runId", any(), any()) } returns Unit
54-
every { cachingService.remove("runId") } returns Unit
55-
every { gitHubScanningService.scanGitHubResources() } returns Unit
56-
every { brokerStompSessionHandler.isConnected() } returns true
57-
every { syncLogService.sendSyncLog(any(), any(), any(), any()) } returns Unit
58-
every { syncLogService.sendFullScanStart(any()) } returns Unit
59-
every { syncLogService.sendFullScanSuccess() } returns Unit
23+
every { gitHubStartService.startAgent() } returns Unit
6024
}
6125

6226
@Test
63-
fun `should start syncLog and send GitHub App name`() {
64-
val gitHubAppName = "appName"
65-
every { gitHubEnterpriseService.getGitHubApp("jwt") } returns
66-
GitHubAppResponse(
67-
gitHubAppName, mapOf(), listOf()
68-
)
69-
27+
fun `should start the agent process`() {
7028
applicationListener.onApplicationEvent(mockk())
7129

72-
verify { webSocketService.sendMessage(APP_NAME_TOPIC, gitHubAppName) }
73-
verify { syncLogService.sendFullScanStart(any()) }
30+
verify { gitHubStartService.startAgent() }
7431
}
7532
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package net.leanix.githubagent.services
2+
3+
import io.mockk.every
4+
import io.mockk.mockk
5+
import io.mockk.verify
6+
import net.leanix.githubagent.dto.GitHubAppResponse
7+
import net.leanix.githubagent.handler.BrokerStompSessionHandler
8+
import net.leanix.githubagent.shared.APP_NAME_TOPIC
9+
import org.junit.jupiter.api.BeforeEach
10+
import org.junit.jupiter.api.Test
11+
12+
class GitHubStartServiceTest {
13+
14+
private lateinit var githubAuthenticationService: GitHubAuthenticationService
15+
private lateinit var webSocketService: WebSocketService
16+
private lateinit var gitHubScanningService: GitHubScanningService
17+
private lateinit var gitHubEnterpriseService: GitHubEnterpriseService
18+
private lateinit var cachingService: CachingService
19+
private lateinit var gitHubStartService: GitHubStartService
20+
private lateinit var brokerStompSessionHandler: BrokerStompSessionHandler
21+
private lateinit var syncLogService: SyncLogService
22+
23+
@BeforeEach
24+
fun setUp() {
25+
githubAuthenticationService = mockk()
26+
webSocketService = mockk()
27+
gitHubScanningService = mockk()
28+
gitHubEnterpriseService = mockk()
29+
cachingService = mockk()
30+
brokerStompSessionHandler = mockk()
31+
syncLogService = mockk()
32+
33+
gitHubStartService = GitHubStartService(
34+
githubAuthenticationService,
35+
webSocketService,
36+
gitHubScanningService,
37+
gitHubEnterpriseService,
38+
cachingService,
39+
brokerStompSessionHandler,
40+
syncLogService
41+
)
42+
43+
every { webSocketService.initSession() } returns Unit
44+
every { webSocketService.sendMessage(any(), any()) } returns Unit
45+
every { githubAuthenticationService.generateAndCacheJwtToken() } returns Unit
46+
every { cachingService.get("jwtToken") } returns "jwt"
47+
every { cachingService.set("runId", any(), any()) } returns Unit
48+
every { cachingService.remove("runId") } returns Unit
49+
every { gitHubScanningService.scanGitHubResources() } returns Unit
50+
every { brokerStompSessionHandler.isConnected() } returns true
51+
every { syncLogService.sendSyncLog(any(), any(), any(), any()) } returns Unit
52+
every { syncLogService.sendFullScanStart(any()) } returns Unit
53+
every { syncLogService.sendFullScanSuccess() } returns Unit
54+
}
55+
56+
@Test
57+
fun `should start syncLog and send GitHub App name`() {
58+
val gitHubAppName = "appName"
59+
every { gitHubEnterpriseService.getGitHubApp("jwt") } returns
60+
GitHubAppResponse(
61+
gitHubAppName, mapOf(), listOf()
62+
)
63+
64+
gitHubStartService.startAgent()
65+
66+
verify { webSocketService.sendMessage(APP_NAME_TOPIC, gitHubAppName) }
67+
verify { syncLogService.sendFullScanStart(any()) }
68+
}
69+
}

0 commit comments

Comments
 (0)