Skip to content

Commit 445e84b

Browse files
committed
Fixes #28953: Impact of tenants on configuration object in public plugins
1 parent 3d8c5fc commit 445e84b

20 files changed

Lines changed: 134 additions & 79 deletions

File tree

api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockServices.scala renamed to api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockApiAccount.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import com.normation.rudder.api.WoApiAccountRepository
1212
import java.time.Instant
1313
import zio.syntax.*
1414

15-
class MockServices(newToken: String, accounts: Map[ApiAccountId, ApiAccount] = Map.empty) { self =>
15+
class MockApiAccount(newToken: String, accounts: Map[ApiAccountId, ApiAccount] = Map.empty) { self =>
1616

1717
object apiAccountRepository extends RoApiAccountRepository with WoApiAccountRepository {
1818
override def getById(id: ApiAccountId): IOResult[Option[ApiAccount]] = {

api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/api/UserApiTest.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class UserApiTest extends ZIOSpecDefault {
4646
)
4747
)
4848

49-
val mockServices = new MockServices(newToken = "generated-test-token", accounts = accounts)
49+
val mockApiAccount = new MockApiAccount(newToken = "generated-test-token", accounts = accounts)
5050

5151
val userService: UserService = new UserService {
5252
// use an user that has access to the api, we do not test authorization checks in this file
@@ -63,18 +63,18 @@ class UserApiTest extends ZIOSpecDefault {
6363

6464
val modules = List(
6565
new UserApiImpl(
66-
mockServices.apiAccountRepository,
67-
mockServices.apiAccountRepository,
66+
mockApiAccount.apiAccountRepository,
67+
mockApiAccount.apiAccountRepository,
6868
null,
6969
null,
70-
mockServices.tokenGenerator,
70+
mockApiAccount.tokenGenerator,
7171
restTestSetUp.uuidGen,
7272
java.time.Clock.fixed(fixedDate, ZoneOffset.UTC)
7373
)(using AlwaysEnabledPluginStatus)
7474
)
7575

7676
val apiVersions: List[ApiVersion] = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil
77-
val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, Some(userService))
77+
val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService)
7878

7979
val transformations: Map[String, String => String] = Map()
8080

@@ -92,6 +92,7 @@ class UserApiTest extends ZIOSpecDefault {
9292
yamlSourceDirectory,
9393
yamlDestTmpDirectory,
9494
liftRules,
95+
userService,
9596
Nil,
9697
transformations
9798
)

branding/src/test/scala/com/normation/plugins/branding/api/BrandingApiTest.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.normation.plugins.AlwaysEnabledPluginStatus
55
import com.normation.plugins.branding.api.BrandingApi
66
import com.normation.plugins.branding.api.BrandingApiService
77
import com.normation.rudder.api.ApiVersion
8+
import com.normation.rudder.rest.TestUserService
89
import com.normation.rudder.rest.TraitTestApiFromYamlFiles
910
import com.normation.utils.StringUuidGeneratorImpl
1011
import java.nio.file.Files
@@ -65,7 +66,8 @@ class BrandingApiTest extends ZIOSpecDefault {
6566
)
6667

6768
val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil
68-
val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None)
69+
val userService = new TestUserService
70+
val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService)
6971

7072
val transformations: Map[String, String => String] = Map()
7173

@@ -83,6 +85,7 @@ class BrandingApiTest extends ZIOSpecDefault {
8385
yamlSourceDirectory,
8486
yamlDestTmpDirectory,
8587
liftRules,
88+
userService,
8689
Nil,
8790
transformations
8891
)

change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestChangesJson.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ import com.normation.rudder.rule.category.RuleCategoryId
7070
import com.normation.rudder.rule.category.RuleCategoryService
7171
import com.normation.rudder.services.eventlog.EventLogDetailsService
7272
import com.normation.rudder.services.modification.DiffService
73+
import com.normation.rudder.tenants.QueryContext
7374
import com.normation.utils.DateFormaterService
7475
import com.normation.utils.DateFormaterService.json.*
7576
import io.scalaland.chimney.PartialTransformer
@@ -137,15 +138,16 @@ object ChangeRequestChangesJson {
137138
)
138139
}
139140

140-
def from(cr: ChangeRequest)(implicit
141+
def from(cr: ChangeRequest)(using
141142
techniqueByDirective: Map[DirectiveId, Technique],
142143
diffService: DiffService,
143144
nodeGroups: MapView[NodeGroupId, String],
144145
directives: MapView[DirectiveId, Directive],
145146
nodes: MapView[NodeId, String],
146147
allTargets: MapView[RuleTarget, FullRuleTargetInfo],
147148
ruleCategoryService: RuleCategoryService,
148-
rootCategory: RuleCategory
149+
rootCategory: RuleCategory,
150+
qc: QueryContext
149151
): PureResult[ChangeRequestChangesJson] = {
150152
cr match {
151153
case cr: ConfigurationChangeRequest =>
@@ -187,15 +189,16 @@ final case class ConfigurationChangesJson(
187189

188190
object ConfigurationChangesJson {
189191

190-
implicit def transformer(implicit
192+
implicit def transformer(using
191193
techniqueByDirective: Map[DirectiveId, Technique],
192194
diffService: DiffService,
193195
nodeGroups: MapView[NodeGroupId, String],
194196
directives: MapView[DirectiveId, Directive],
195197
nodes: MapView[NodeId, String],
196198
allTargets: MapView[RuleTarget, FullRuleTargetInfo],
197199
ruleCategoryService: RuleCategoryService,
198-
rootCategory: RuleCategory
200+
rootCategory: RuleCategory,
201+
qc: QueryContext
199202
): PartialTransformer[ConfigurationChangeRequest, ConfigurationChangesJson] = {
200203
PartialTransformer
201204
.define[ConfigurationChangeRequest, ConfigurationChangesJson]

change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestJson.scala

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import com.normation.rudder.domain.queries.Query
6464
import com.normation.rudder.domain.workflows.*
6565
import com.normation.rudder.rule.category.RuleCategoryId
6666
import com.normation.rudder.services.modification.DiffService
67+
import com.normation.rudder.tenants.QueryContext
6768
import com.typesafe.config.ConfigValue
6869
import io.scalaland.chimney.PartialTransformer
6970
import io.scalaland.chimney.Transformer
@@ -138,9 +139,10 @@ object ChangeRequestJson {
138139
}
139140

140141
// Entrypoint to convert the whole tree of ChangeRequest + some context to a serializable object ChangeRequestJson
141-
def from(cr: ChangeRequest, status: WorkflowNodeId, isAcceptable: Boolean)(implicit
142+
def from(cr: ChangeRequest, status: WorkflowNodeId, isAcceptable: Boolean)(using
142143
techniqueByDirective: Map[DirectiveId, Technique],
143-
diffService: DiffService
144+
diffService: DiffService,
145+
qc: QueryContext
144146
): PureResult[ChangeRequestJson] = {
145147
val changesJson: PureResult[Option[ConfigurationChangeRequestJson]] = cr match {
146148
case cr: ConfigurationChangeRequest => {
@@ -344,15 +346,17 @@ object DirectiveChangeJson {
344346
}
345347
}
346348

347-
implicit def createTransformer(implicit
348-
technique: Technique
349+
implicit def createTransformer(using
350+
technique: Technique,
351+
qc: QueryContext
349352
): Transformer[AddDirectiveDiff, DirectiveCreateChangeJson] = {
350353
case AddDirectiveDiff(techniqueName, directive) =>
351354
DirectiveCreateChangeJson(JRDirective.fromDirective(technique, directive, None))
352355
}
353356

354357
implicit def deleteTransformer(implicit
355-
technique: Technique
358+
technique: Technique,
359+
qc: QueryContext
356360
): Transformer[DeleteDirectiveDiff, DirectiveDeleteChangeJson] = {
357361
case DeleteDirectiveDiff(_, directive) =>
358362
DirectiveDeleteChangeJson(JRDirective.fromDirective(technique, directive, None))
@@ -383,7 +387,8 @@ object DirectiveChangeJson {
383387
implicit def transformDirectiveDiff(implicit
384388
change: DirectiveChange,
385389
technique: Technique,
386-
diffService: DiffService
390+
diffService: DiffService,
391+
qc: QueryContext
387392
): PartialTransformer[ChangeRequestDirectiveDiff, DirectiveChangeJson] = {
388393
PartialTransformer
389394
.define[ChangeRequestDirectiveDiff, DirectiveChangeJson]
@@ -413,7 +418,8 @@ object DirectiveChangeActionJson {
413418

414419
implicit def transformer(implicit
415420
technique: Technique,
416-
diffService: DiffService
421+
diffService: DiffService,
422+
qc: QueryContext
417423
): PartialTransformer[DirectiveChange, DirectiveChangeActionJson] = {
418424
case (source, _) =>
419425
implicit val change = source
@@ -821,12 +827,17 @@ object GlobalParameterChangeJson {
821827
}
822828
}
823829

824-
implicit val jrGlobalParameterTransformer: Transformer[GlobalParameter, JRGlobalParameter] =
830+
implicit def jrGlobalParameterTransformer(using qc: QueryContext): Transformer[GlobalParameter, JRGlobalParameter] =
825831
JRGlobalParameter.fromGlobalParameter(_, None)
826-
implicit val createTransformer: Transformer[AddGlobalParameterDiff, GlobalParameterCreateChangeJson] =
832+
833+
implicit def createTransformer(using qc: QueryContext): Transformer[AddGlobalParameterDiff, GlobalParameterCreateChangeJson] =
827834
Transformer.derive[AddGlobalParameterDiff, GlobalParameterCreateChangeJson]
828-
implicit val deleteTransformer: Transformer[DeleteGlobalParameterDiff, GlobalParameterDeleteChangeJson] =
835+
836+
implicit def deleteTransformer(using
837+
qc: QueryContext
838+
): Transformer[DeleteGlobalParameterDiff, GlobalParameterDeleteChangeJson] =
829839
Transformer.derive[DeleteGlobalParameterDiff, GlobalParameterDeleteChangeJson]
840+
830841
implicit def modifyTransformer(implicit
831842
change: GlobalParameterChange,
832843
diffService: DiffService
@@ -841,9 +852,10 @@ object GlobalParameterChangeJson {
841852
Result.fromEitherString(result)
842853
}
843854

844-
implicit def transformer(implicit
855+
implicit def transformer(using
845856
change: GlobalParameterChange,
846-
diffService: DiffService
857+
diffService: DiffService,
858+
qc: QueryContext
847859
): PartialTransformer[ChangeRequestGlobalParameterDiff, GlobalParameterChangeJson] = {
848860
PartialTransformer
849861
.define[ChangeRequestGlobalParameterDiff, GlobalParameterChangeJson]
@@ -868,10 +880,11 @@ final case class GlobalParameterChangeActionJson(
868880
)
869881

870882
object GlobalParameterChangeActionJson {
871-
import GlobalParameterChangeJson.*
883+
import com.normation.plugins.changevalidation.GlobalParameterChangeJson.*
872884

873-
implicit def transformer(implicit
874-
diffService: DiffService
885+
implicit def transformer(using
886+
diffService: DiffService,
887+
qc: QueryContext
875888
): PartialTransformer[GlobalParameterChange, GlobalParameterChangeActionJson] = {
876889
case (source, _) =>
877890
implicit val change = source
@@ -901,9 +914,10 @@ final case class ConfigurationChangeRequestJson(
901914
)
902915

903916
object ConfigurationChangeRequestJson {
904-
implicit def transformer(implicit
917+
implicit def transformer(using
905918
techniqueByDirective: Map[DirectiveId, Technique],
906-
diffService: DiffService
919+
diffService: DiffService,
920+
qc: QueryContext
907921
): PartialTransformer[ConfigurationChangeRequest, ConfigurationChangeRequestJson] = {
908922
PartialTransformer
909923
.define[ConfigurationChangeRequest, ConfigurationChangeRequestJson]

change-validation/src/main/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApi.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,15 +305,15 @@ class WorkflowInternalApiImpl(
305305
}
306306
}
307307

308-
private def getDirectives: IOResult[MapView[DirectiveId, Directive]] = {
308+
private def getDirectives(using qc: QueryContext): IOResult[MapView[DirectiveId, Directive]] = {
309309
for {
310310
library <- directiveRepository.getFullDirectiveLibrary()
311311
} yield {
312312
library.allDirectives.view.mapValues(_._2)
313313
}
314314
}
315315

316-
private def getNodeNames(implicit qc: QueryContext): IOResult[MapView[NodeId, String]] = {
316+
private def getNodeNames(using qc: QueryContext): IOResult[MapView[NodeId, String]] = {
317317
for {
318318
library <- nodeFactRepository.getAll()
319319
} yield {

change-validation/src/test/scala/com/normation/plugins/changevalidation/MockServices.scala

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -93,27 +93,30 @@ class MockSupervisedTargets(unsupervisedDir: File, unsupervisedFilename: String,
9393
fullNodeGroupCategory.succeed
9494
}
9595

96-
override def categoryExists(id: NodeGroupCategoryId): IOResult[Boolean] = ???
97-
override def getNodeGroupOpt(id: NodeGroupId)(implicit qc: QueryContext): IOResult[Option[(NodeGroup, NodeGroupCategoryId)]] =
96+
override def categoryExists(id: NodeGroupCategoryId)(using qc: QueryContext): IOResult[Boolean] = ???
97+
override def getNodeGroupOpt(id: NodeGroupId)(using qc: QueryContext): IOResult[Option[(NodeGroup, NodeGroupCategoryId)]] =
9898
???
99-
override def getNodeGroupCategory(id: NodeGroupId): IOResult[NodeGroupCategory] = ???
100-
override def getAll(): IOResult[Seq[NodeGroup]] = ???
101-
override def getAllByIds(ids: Seq[NodeGroupId]): IOResult[Seq[NodeGroup]] = ???
102-
override def getAllNodeIds(): IOResult[Map[NodeGroupId, Set[NodeId]]] = ???
103-
override def getAllNodeIdsChunk(): IOResult[Map[NodeGroupId, Chunk[NodeId]]] = ???
104-
override def getGroupsByCategory(includeSystem: Boolean)(implicit
99+
override def getNodeGroupCategory(id: NodeGroupId)(using qc: QueryContext): IOResult[NodeGroupCategory] = ???
100+
override def getAll()(using qc: QueryContext): IOResult[Seq[NodeGroup]] = ???
101+
override def getAllByIds(ids: Seq[NodeGroupId])(using qc: QueryContext): IOResult[Seq[NodeGroup]] = ???
102+
override def getAllNodeIds()(using qc: QueryContext): IOResult[Map[NodeGroupId, Set[NodeId]]] = ???
103+
override def getAllNodeIdsChunk()(using qc: QueryContext): IOResult[Map[NodeGroupId, Chunk[NodeId]]] = ???
104+
override def getGroupsByCategory(includeSystem: Boolean)(using
105105
qc: QueryContext
106106
): IOResult[SortedMap[List[NodeGroupCategoryId], CategoryAndNodeGroup]] = ???
107-
override def findGroupWithAnyMember(nodeIds: Seq[NodeId]): IOResult[Seq[NodeGroupId]] = ???
108-
override def findGroupWithAllMember(nodeIds: Seq[NodeId]): IOResult[Seq[NodeGroupId]] = ???
109-
override def getRootCategory(): NodeGroupCategory = ???
110-
override def getRootCategoryPure(): IOResult[NodeGroupCategory] = ???
111-
override def getCategoryHierarchy: IOResult[SortedMap[List[NodeGroupCategoryId], NodeGroupCategory]] = ???
112-
override def getAllGroupCategories(includeSystem: Boolean): IOResult[Seq[NodeGroupCategory]] = ???
113-
override def getGroupCategory(id: NodeGroupCategoryId): IOResult[NodeGroupCategory] = ???
114-
override def getParentGroupCategory(id: NodeGroupCategoryId): IOResult[NodeGroupCategory] = ???
115-
override def getParents_NodeGroupCategory(id: NodeGroupCategoryId): IOResult[List[NodeGroupCategory]] = ???
116-
override def getAllNonSystemCategories(): IOResult[Seq[NodeGroupCategory]] = ???
107+
override def findGroupWithAnyMember(nodeIds: Seq[NodeId])(using qc: QueryContext): IOResult[Seq[NodeGroupId]] = ???
108+
override def findGroupWithAllMember(nodeIds: Seq[NodeId])(using qc: QueryContext): IOResult[Seq[NodeGroupId]] = ???
109+
override def getRootCategory()(using qc: QueryContext): NodeGroupCategory = ???
110+
override def getRootCategoryPure()(using qc: QueryContext): IOResult[NodeGroupCategory] = ???
111+
override def getCategoryHierarchy(using qc: QueryContext): IOResult[SortedMap[List[NodeGroupCategoryId], NodeGroupCategory]] =
112+
???
113+
override def getAllGroupCategories(includeSystem: Boolean)(using qc: QueryContext): IOResult[Seq[NodeGroupCategory]] = ???
114+
override def getGroupCategory(id: NodeGroupCategoryId)(using qc: QueryContext): IOResult[NodeGroupCategory] = ???
115+
override def getParentGroupCategory(id: NodeGroupCategoryId)(using qc: QueryContext): IOResult[NodeGroupCategory] = ???
116+
override def getParents_NodeGroupCategory(id: NodeGroupCategoryId)(using
117+
qc: QueryContext
118+
): IOResult[List[NodeGroupCategory]] = ???
119+
override def getAllNonSystemCategories()(using qc: QueryContext): IOResult[Seq[NodeGroupCategory]] = ???
117120
}
118121

119122
}

change-validation/src/test/scala/com/normation/plugins/changevalidation/ValidationNeededTest.scala

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import com.normation.rudder.MockNodeGroups
4747
import com.normation.rudder.MockNodes
4848
import com.normation.rudder.MockRules
4949
import com.normation.rudder.MockTechniques
50+
import com.normation.rudder.MockTenants
5051
import com.normation.rudder.domain.policies.ActiveTechniqueId
5152
import com.normation.rudder.domain.policies.GroupTarget
5253
import com.normation.rudder.domain.policies.SimpleTarget
@@ -66,10 +67,11 @@ import zio.syntax.ToZio
6667
@RunWith(classOf[JUnitRunner])
6768
class ValidationNeededTest extends Specification {
6869

69-
val mockNodes: MockNodes = new MockNodes()
70-
val mockNodeGroups: MockNodeGroups = new MockNodeGroups(mockNodes, new MockGlobalParam())
70+
val mockTenants = new MockTenants()
71+
val mockNodes: MockNodes = new MockNodes(mockTenants)
72+
val mockNodeGroups: MockNodeGroups = new MockNodeGroups(mockNodes, new MockGlobalParam(mockTenants), mockTenants)
7173
val actor: EventActor = EventActor("myActor")
72-
val mockRules: MockRules = new MockRules()
74+
val mockRules: MockRules = new MockRules(mockTenants)
7375

7476
val nodeGrpValNdd = new NodeGroupValidationNeeded(
7577
() => Set[SimpleTarget](GroupTarget(mockNodeGroups.g0.id)).succeed,
@@ -125,9 +127,10 @@ class ValidationNeededTest extends Specification {
125127
}
126128
}
127129

130+
val mockTenants = new MockTenants()
128131
val mockGitRepo = new MockGitConfigRepo("")
129132
val mockTechniques = MockTechniques(mockGitRepo)
130-
val mockDirectives = new MockDirectives(mockTechniques)
133+
val mockDirectives = new MockDirectives(mockTechniques, mockTenants)
131134
val sectionSpec = SectionSpec("ROOT")
132135
val technique = mockDirectives.directives.commonTechnique
133136

change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ChangeRequestApiTest.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import com.normation.plugins.changevalidation.TwoValidationStepsWorkflowServiceI
5151
import com.normation.plugins.changevalidation.TwoValidationStepsWorkflowServiceImpl.*
5252
import com.normation.rudder.MockGlobalParam
5353
import com.normation.rudder.MockNodes
54+
import com.normation.rudder.MockTenants
5455
import com.normation.rudder.api.ApiVersion
5556
import com.normation.rudder.batch.AsyncWorkflowInfo
5657
import com.normation.rudder.domain.nodes.AddNodeGroupDiff
@@ -230,7 +231,8 @@ class ChangeRequestApiTest extends ZIOSpecDefault {
230231
val mockDirectives = restTestSetUp.mockDirectives
231232
val mockNodeGroups = restTestSetUp.mockNodeGroups
232233
val mockRules = restTestSetUp.mockRules
233-
val mockGlobalParam = new MockGlobalParam()
234+
val mockTenants = new MockTenants()
235+
val mockGlobalParam = new MockGlobalParam(mockTenants)
234236

235237
val mockServices = new MockServices(
236238
Map(
@@ -641,7 +643,7 @@ class ChangeRequestApiTest extends ZIOSpecDefault {
641643
)
642644

643645
val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil
644-
val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, Some(mockServices.userService))
646+
val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, mockServices.userService)
645647

646648
val transformations: Map[String, String => String] = Map()
647649

@@ -659,6 +661,7 @@ class ChangeRequestApiTest extends ZIOSpecDefault {
659661
yamlSourceDirectory,
660662
yamlDestTmpDirectory,
661663
liftRules,
664+
mockServices.userService,
662665
List("api_changerequest.yml"),
663666
transformations
664667
)

0 commit comments

Comments
 (0)