Skip to content

Commit df59513

Browse files
Activate selected profiles in Spring #2160 (#2174)
Co-authored-by: Egor Kulikov <egor.k.kulikov@gmail.com>
1 parent 6ceebb8 commit df59513

File tree

11 files changed

+73
-44
lines changed

11 files changed

+73
-44
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineProcessMain.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ private fun EngineProcessModel.setup(kryoHelper: KryoHelper, watchdog: IdleWatch
8181
val springAnalyzerProcess = SpringAnalyzerProcess.createBlocking(params.classpath.toList())
8282
val beans = springAnalyzerProcess.terminateOnException { _ ->
8383
springAnalyzerProcess.getBeanQualifiedNames(
84-
params.classpath.toList(),
8584
params.config,
8685
params.fileStorage,
86+
params.profileExpression,
8787
).toTypedArray()
8888
}
8989
springAnalyzerProcess.terminate()

utbot-framework/src/main/kotlin/org/utbot/framework/process/generated/EngineProcessModel.Generated.kt

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class EngineProcessModel private constructor(
7373

7474
private val __StringArraySerializer = FrameworkMarshallers.String.array()
7575

76-
const val serializationHash = -8371458556124482010L
76+
const val serializationHash = 6076922965808046990L
7777

7878
}
7979
override val serializersOwner: ISerializersOwner get() = EngineProcessModel
@@ -180,7 +180,7 @@ val IProtocol.engineProcessModel get() = getOrCreateExtension(EngineProcessModel
180180

181181

182182
/**
183-
* #### Generated from [EngineProcessModel.kt:104]
183+
* #### Generated from [EngineProcessModel.kt:105]
184184
*/
185185
data class FindMethodParamNamesArguments (
186186
val classId: ByteArray,
@@ -243,7 +243,7 @@ data class FindMethodParamNamesArguments (
243243

244244

245245
/**
246-
* #### Generated from [EngineProcessModel.kt:108]
246+
* #### Generated from [EngineProcessModel.kt:109]
247247
*/
248248
data class FindMethodParamNamesResult (
249249
val paramNames: ByteArray
@@ -300,7 +300,7 @@ data class FindMethodParamNamesResult (
300300

301301

302302
/**
303-
* #### Generated from [EngineProcessModel.kt:97]
303+
* #### Generated from [EngineProcessModel.kt:98]
304304
*/
305305
data class FindMethodsInClassMatchingSelectedArguments (
306306
val classId: ByteArray,
@@ -363,7 +363,7 @@ data class FindMethodsInClassMatchingSelectedArguments (
363363

364364

365365
/**
366-
* #### Generated from [EngineProcessModel.kt:101]
366+
* #### Generated from [EngineProcessModel.kt:102]
367367
*/
368368
data class FindMethodsInClassMatchingSelectedResult (
369369
val executableIds: ByteArray
@@ -588,7 +588,7 @@ data class GenerateResult (
588588

589589

590590
/**
591-
* #### Generated from [EngineProcessModel.kt:116]
591+
* #### Generated from [EngineProcessModel.kt:117]
592592
*/
593593
data class GenerateTestReportArgs (
594594
val eventLogMessage: String?,
@@ -681,7 +681,7 @@ data class GenerateTestReportArgs (
681681

682682

683683
/**
684-
* #### Generated from [EngineProcessModel.kt:125]
684+
* #### Generated from [EngineProcessModel.kt:126]
685685
*/
686686
data class GenerateTestReportResult (
687687
val notifyMessage: String,
@@ -755,7 +755,8 @@ data class GenerateTestReportResult (
755755
data class GetSpringBeanQualifiedNamesParams (
756756
val classpath: Array<String>,
757757
val config: String,
758-
val fileStorage: String?
758+
val fileStorage: Array<String>,
759+
val profileExpression: String?
759760
) : IPrintable {
760761
//companion
761762

@@ -766,14 +767,16 @@ data class GetSpringBeanQualifiedNamesParams (
766767
override fun read(ctx: SerializationCtx, buffer: AbstractBuffer): GetSpringBeanQualifiedNamesParams {
767768
val classpath = buffer.readArray {buffer.readString()}
768769
val config = buffer.readString()
769-
val fileStorage = buffer.readNullable { buffer.readString() }
770-
return GetSpringBeanQualifiedNamesParams(classpath, config, fileStorage)
770+
val fileStorage = buffer.readArray {buffer.readString()}
771+
val profileExpression = buffer.readNullable { buffer.readString() }
772+
return GetSpringBeanQualifiedNamesParams(classpath, config, fileStorage, profileExpression)
771773
}
772774

773775
override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: GetSpringBeanQualifiedNamesParams) {
774776
buffer.writeArray(value.classpath) { buffer.writeString(it) }
775777
buffer.writeString(value.config)
776-
buffer.writeNullable(value.fileStorage) { buffer.writeString(it) }
778+
buffer.writeArray(value.fileStorage) { buffer.writeString(it) }
779+
buffer.writeNullable(value.profileExpression) { buffer.writeString(it) }
777780
}
778781

779782

@@ -791,7 +794,8 @@ data class GetSpringBeanQualifiedNamesParams (
791794

792795
if (!(classpath contentDeepEquals other.classpath)) return false
793796
if (config != other.config) return false
794-
if (fileStorage != other.fileStorage) return false
797+
if (!(fileStorage contentDeepEquals other.fileStorage)) return false
798+
if (profileExpression != other.profileExpression) return false
795799

796800
return true
797801
}
@@ -800,7 +804,8 @@ data class GetSpringBeanQualifiedNamesParams (
800804
var __r = 0
801805
__r = __r*31 + classpath.contentDeepHashCode()
802806
__r = __r*31 + config.hashCode()
803-
__r = __r*31 + if (fileStorage != null) fileStorage.hashCode() else 0
807+
__r = __r*31 + fileStorage.contentDeepHashCode()
808+
__r = __r*31 + if (profileExpression != null) profileExpression.hashCode() else 0
804809
return __r
805810
}
806811
//pretty print
@@ -810,6 +815,7 @@ data class GetSpringBeanQualifiedNamesParams (
810815
print("classpath = "); classpath.print(printer); println()
811816
print("config = "); config.print(printer); println()
812817
print("fileStorage = "); fileStorage.print(printer); println()
818+
print("profileExpression = "); profileExpression.print(printer); println()
813819
}
814820
printer.print(")")
815821
}
@@ -882,7 +888,7 @@ data class JdkInfo (
882888

883889

884890
/**
885-
* #### Generated from [EngineProcessModel.kt:92]
891+
* #### Generated from [EngineProcessModel.kt:93]
886892
*/
887893
data class MethodDescription (
888894
val name: String,
@@ -1299,7 +1305,7 @@ data class TestGeneratorParams (
12991305

13001306

13011307
/**
1302-
* #### Generated from [EngineProcessModel.kt:111]
1308+
* #### Generated from [EngineProcessModel.kt:112]
13031309
*/
13041310
data class WriteSarifReportArguments (
13051311
val testSetsId: Long,

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,13 @@ object UtTestsDialogProcessor {
246246
ModuleRootManager.getInstance(module).contentRoots.toList()
247247
}
248248
}
249+
250+
val fileStorage = contentRoots.map { root -> root.url }.toTypedArray()
249251
process.getSpringBeanQualifiedNames(
250252
classpathForClassLoader,
251253
approach.config,
252-
// TODO: consider passing it as an array
253-
contentRoots.joinToString(File.pathSeparator),
254+
fileStorage,
255+
profileExpression = null,
254256
)
255257
}
256258
}

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,14 @@ class EngineProcess private constructor(val project: Project, private val classN
143143
engineModel.setupUtContext.startBlocking(SetupContextParams(classpathForUrlsClassloader))
144144
}
145145

146-
fun getSpringBeanQualifiedNames(classpathList: List<String>, config: String, fileStorage: String?): List<String> {
146+
fun getSpringBeanQualifiedNames(
147+
classpathList: List<String>,
148+
config: String,
149+
fileStorage: Array<String>,
150+
profileExpression: String?): List<String> {
147151
assertReadAccessNotAllowed()
148152
return engineModel.getSpringBeanQualifiedNames.startBlocking(
149-
GetSpringBeanQualifiedNamesParams(classpathList.toTypedArray(), config, fileStorage)
153+
GetSpringBeanQualifiedNamesParams(classpathList.toTypedArray(), config, fileStorage, profileExpression)
150154
).toList()
151155
}
152156

utbot-rd/src/main/rdgen/org/utbot/rd/models/EngineProcessModel.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ object EngineProcessModel : Ext(EngineProcessRoot) {
8787
val getSpringBeanQualifiedNamesParams = structdef {
8888
field("classpath", array(PredefinedType.string))
8989
field("config", PredefinedType.string)
90-
field("fileStorage", PredefinedType.string.nullable)
90+
field("fileStorage", array(PredefinedType.string))
91+
field("profileExpression", PredefinedType.string.nullable)
9192
}
9293
val methodDescription = structdef {
9394
field("name", PredefinedType.string)

utbot-rd/src/main/rdgen/org/utbot/rd/models/SpringAnalyzerModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ object SpringAnalyzerRoot : Root()
77

88
object SpringAnalyzerProcessModel : Ext(SpringAnalyzerRoot) {
99
val springAnalyzerParams = structdef {
10-
field("classpath", array(PredefinedType.string))
1110
field("configuration", PredefinedType.string)
12-
field("fileStorage", PredefinedType.string.nullable)
11+
field("fileStorage", array(PredefinedType.string))
12+
field("profileExpression", PredefinedType.string.nullable)
1313
}
1414

1515
val springAnalyzerResult = structdef {

utbot-spring-analyzer/src/main/kotlin/org/utbot/spring/api/ApplicationData.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package org.utbot.spring.api
33
import java.net.URL
44

55
class ApplicationData(
6-
val classpath: Array<URL>,
76
val configurationFile: String,
8-
val fileStorage: String?,
7+
val fileStorage: List<URL>,
8+
val profileExpression: String?,
99
)

utbot-spring-analyzer/src/main/kotlin/org/utbot/spring/configurators/ApplicationConfigurator.kt

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ package org.utbot.spring.configurators
33
import com.jetbrains.rd.util.getLogger
44
import com.jetbrains.rd.util.info
55
import org.springframework.boot.builder.SpringApplicationBuilder
6-
import org.utbot.spring.config.TestApplicationConfiguration
6+
import org.springframework.core.env.StandardEnvironment
77
import org.utbot.spring.api.ApplicationData
8+
import org.utbot.spring.config.TestApplicationConfiguration
89
import org.utbot.spring.utils.ConfigurationManager
910
import java.io.File
1011
import kotlin.io.path.Path
1112

13+
const val DEFAULT_PROFILE_NAME = "default"
1214
private val logger = getLogger<ApplicationConfigurator>()
1315

1416
open class ApplicationConfigurator(
@@ -38,8 +40,22 @@ open class ApplicationConfigurator(
3840
)
3941
}
4042
}
43+
44+
setActiveProfile(applicationData.profileExpression ?: DEFAULT_PROFILE_NAME)
45+
}
46+
47+
private fun setActiveProfile(profileExpression: String) {
48+
val profilesToActivate = parseProfileExpression(profileExpression)
49+
50+
val environment = StandardEnvironment()
51+
environment.setActiveProfiles(*profilesToActivate)
52+
53+
applicationBuilder.environment(environment)
4154
}
4255

56+
//TODO: implement this, e.g. 'prod|web' -> listOf(prod, web)
57+
private fun parseProfileExpression(profileExpression: String) : Array<String> = arrayOf(profileExpression)
58+
4359
private fun findConfigurationType(applicationData: ApplicationData): ApplicationConfigurationType {
4460
//TODO: support Spring Boot Applications here.
4561
val fileExtension = File(applicationData.configurationFile).extension

utbot-spring-analyzer/src/main/kotlin/org/utbot/spring/generated/SpringAnalyzerProcessModel.Generated.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class SpringAnalyzerProcessModel private constructor(
4848
}
4949

5050

51-
const val serializationHash = 476832059519556525L
51+
const val serializationHash = 1208896755601889441L
5252

5353
}
5454
override val serializersOwner: ISerializersOwner get() = SpringAnalyzerProcessModel
@@ -98,9 +98,9 @@ val IProtocol.springAnalyzerProcessModel get() = getOrCreateExtension(SpringAnal
9898
* #### Generated from [SpringAnalyzerModel.kt:9]
9999
*/
100100
data class SpringAnalyzerParams (
101-
val classpath: Array<String>,
102101
val configuration: String,
103-
val fileStorage: String?
102+
val fileStorage: Array<String>,
103+
val profileExpression: String?
104104
) : IPrintable {
105105
//companion
106106

@@ -109,16 +109,16 @@ data class SpringAnalyzerParams (
109109

110110
@Suppress("UNCHECKED_CAST")
111111
override fun read(ctx: SerializationCtx, buffer: AbstractBuffer): SpringAnalyzerParams {
112-
val classpath = buffer.readArray {buffer.readString()}
113112
val configuration = buffer.readString()
114-
val fileStorage = buffer.readNullable { buffer.readString() }
115-
return SpringAnalyzerParams(classpath, configuration, fileStorage)
113+
val fileStorage = buffer.readArray {buffer.readString()}
114+
val profileExpression = buffer.readNullable { buffer.readString() }
115+
return SpringAnalyzerParams(configuration, fileStorage, profileExpression)
116116
}
117117

118118
override fun write(ctx: SerializationCtx, buffer: AbstractBuffer, value: SpringAnalyzerParams) {
119-
buffer.writeArray(value.classpath) { buffer.writeString(it) }
120119
buffer.writeString(value.configuration)
121-
buffer.writeNullable(value.fileStorage) { buffer.writeString(it) }
120+
buffer.writeArray(value.fileStorage) { buffer.writeString(it) }
121+
buffer.writeNullable(value.profileExpression) { buffer.writeString(it) }
122122
}
123123

124124

@@ -134,27 +134,27 @@ data class SpringAnalyzerParams (
134134

135135
other as SpringAnalyzerParams
136136

137-
if (!(classpath contentDeepEquals other.classpath)) return false
138137
if (configuration != other.configuration) return false
139-
if (fileStorage != other.fileStorage) return false
138+
if (!(fileStorage contentDeepEquals other.fileStorage)) return false
139+
if (profileExpression != other.profileExpression) return false
140140

141141
return true
142142
}
143143
//hash code trait
144144
override fun hashCode(): Int {
145145
var __r = 0
146-
__r = __r*31 + classpath.contentDeepHashCode()
147146
__r = __r*31 + configuration.hashCode()
148-
__r = __r*31 + if (fileStorage != null) fileStorage.hashCode() else 0
147+
__r = __r*31 + fileStorage.contentDeepHashCode()
148+
__r = __r*31 + if (profileExpression != null) profileExpression.hashCode() else 0
149149
return __r
150150
}
151151
//pretty print
152152
override fun print(printer: PrettyPrinter) {
153153
printer.println("SpringAnalyzerParams (")
154154
printer.indent {
155-
print("classpath = "); classpath.print(printer); println()
156155
print("configuration = "); configuration.print(printer); println()
157156
print("fileStorage = "); fileStorage.print(printer); println()
157+
print("profileExpression = "); profileExpression.print(printer); println()
158158
}
159159
printer.print(")")
160160
}

utbot-spring-analyzer/src/main/kotlin/org/utbot/spring/process/SpringAnalyzerProcess.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,11 @@ class SpringAnalyzerProcess private constructor(
147147
private val loggerModel: LoggerModel = onSchedulerBlocking { protocol.loggerModel }
148148

149149
fun getBeanQualifiedNames(
150-
classpath: List<String>,
151150
configuration: String,
152-
fileStorage: String?,
151+
fileStorage: Array<String>,
152+
profileExpression: String?,
153153
): List<String> {
154-
val params = SpringAnalyzerParams(classpath.toTypedArray(), configuration, fileStorage)
154+
val params = SpringAnalyzerParams(configuration, fileStorage, profileExpression)
155155
val result = springAnalyzerModel.analyze.startBlocking(params)
156156
return result.beanTypes.toList()
157157
}

utbot-spring-analyzer/src/main/kotlin/org/utbot/spring/process/SpringAnalyzerProcessMain.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ suspend fun main(args: Array<String>) =
4242
private fun SpringAnalyzerProcessModel.setup(watchdog: IdleWatchdog, realProtocol: IProtocol) {
4343
watchdog.measureTimeForActiveCall(analyze, "Analyzing Spring Application") { params ->
4444
val applicationData = ApplicationData(
45-
params.classpath.toList().map { File(it).toURI().toURL() }.toTypedArray(),
4645
params.configuration,
47-
params.fileStorage,
46+
params.fileStorage.map { File(it).toURI().toURL() },
47+
params.profileExpression,
4848
)
4949
SpringAnalyzerResult(
5050
SpringApplicationAnalyzer(applicationData).analyze().toTypedArray()

0 commit comments

Comments
 (0)