diff --git a/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockServices.scala b/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockApiAccount.scala similarity index 93% rename from api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockServices.scala rename to api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockApiAccount.scala index 927379cf9..f4716f34b 100644 --- a/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockServices.scala +++ b/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/MockApiAccount.scala @@ -12,7 +12,7 @@ import com.normation.rudder.api.WoApiAccountRepository import java.time.Instant import zio.syntax.* -class MockServices(newToken: String, accounts: Map[ApiAccountId, ApiAccount] = Map.empty) { self => +class MockApiAccount(newToken: String, accounts: Map[ApiAccountId, ApiAccount] = Map.empty) { self => object apiAccountRepository extends RoApiAccountRepository with WoApiAccountRepository { override def getById(id: ApiAccountId): IOResult[Option[ApiAccount]] = { diff --git a/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/api/UserApiTest.scala b/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/api/UserApiTest.scala index 97001c8ef..eac3aab4b 100644 --- a/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/api/UserApiTest.scala +++ b/api-authorizations/src/test/scala/com/normation/plugins/apiauthorizations/api/UserApiTest.scala @@ -46,7 +46,7 @@ class UserApiTest extends ZIOSpecDefault { ) ) - val mockServices = new MockServices(newToken = "generated-test-token", accounts = accounts) + val mockApiAccount = new MockApiAccount(newToken = "generated-test-token", accounts = accounts) val userService: UserService = new UserService { // 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 { val modules = List( new UserApiImpl( - mockServices.apiAccountRepository, - mockServices.apiAccountRepository, + mockApiAccount.apiAccountRepository, + mockApiAccount.apiAccountRepository, null, null, - mockServices.tokenGenerator, + mockApiAccount.tokenGenerator, restTestSetUp.uuidGen, java.time.Clock.fixed(fixedDate, ZoneOffset.UTC) )(using AlwaysEnabledPluginStatus) ) val apiVersions: List[ApiVersion] = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, Some(userService)) + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService) val transformations: Map[String, String => String] = Map() @@ -92,6 +92,7 @@ class UserApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + userService, Nil, transformations ) diff --git a/branding/src/test/scala/com/normation/plugins/branding/api/BrandingApiTest.scala b/branding/src/test/scala/com/normation/plugins/branding/api/BrandingApiTest.scala index d9d3d1e29..6517dcd37 100644 --- a/branding/src/test/scala/com/normation/plugins/branding/api/BrandingApiTest.scala +++ b/branding/src/test/scala/com/normation/plugins/branding/api/BrandingApiTest.scala @@ -5,6 +5,7 @@ import com.normation.plugins.AlwaysEnabledPluginStatus import com.normation.plugins.branding.api.BrandingApi import com.normation.plugins.branding.api.BrandingApiService import com.normation.rudder.api.ApiVersion +import com.normation.rudder.rest.TestUserService import com.normation.rudder.rest.TraitTestApiFromYamlFiles import com.normation.utils.StringUuidGeneratorImpl import java.nio.file.Files @@ -65,7 +66,8 @@ class BrandingApiTest extends ZIOSpecDefault { ) val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None) + val userService = new TestUserService + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService) val transformations: Map[String, String => String] = Map() @@ -83,6 +85,7 @@ class BrandingApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + userService, Nil, transformations ) diff --git a/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestChangesJson.scala b/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestChangesJson.scala index 478fa195b..bb5d7c6e0 100644 --- a/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestChangesJson.scala +++ b/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestChangesJson.scala @@ -70,6 +70,7 @@ import com.normation.rudder.rule.category.RuleCategoryId import com.normation.rudder.rule.category.RuleCategoryService import com.normation.rudder.services.eventlog.EventLogDetailsService import com.normation.rudder.services.modification.DiffService +import com.normation.rudder.tenants.QueryContext import com.normation.utils.DateFormaterService import com.normation.utils.DateFormaterService.json.* import io.scalaland.chimney.PartialTransformer @@ -137,7 +138,7 @@ object ChangeRequestChangesJson { ) } - def from(cr: ChangeRequest)(implicit + def from(cr: ChangeRequest)(using techniqueByDirective: Map[DirectiveId, Technique], diffService: DiffService, nodeGroups: MapView[NodeGroupId, String], @@ -145,7 +146,8 @@ object ChangeRequestChangesJson { nodes: MapView[NodeId, String], allTargets: MapView[RuleTarget, FullRuleTargetInfo], ruleCategoryService: RuleCategoryService, - rootCategory: RuleCategory + rootCategory: RuleCategory, + qc: QueryContext ): PureResult[ChangeRequestChangesJson] = { cr match { case cr: ConfigurationChangeRequest => @@ -187,7 +189,7 @@ final case class ConfigurationChangesJson( object ConfigurationChangesJson { - implicit def transformer(implicit + implicit def transformer(using techniqueByDirective: Map[DirectiveId, Technique], diffService: DiffService, nodeGroups: MapView[NodeGroupId, String], @@ -195,7 +197,8 @@ object ConfigurationChangesJson { nodes: MapView[NodeId, String], allTargets: MapView[RuleTarget, FullRuleTargetInfo], ruleCategoryService: RuleCategoryService, - rootCategory: RuleCategory + rootCategory: RuleCategory, + qc: QueryContext ): PartialTransformer[ConfigurationChangeRequest, ConfigurationChangesJson] = { PartialTransformer .define[ConfigurationChangeRequest, ConfigurationChangesJson] diff --git a/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestJson.scala b/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestJson.scala index dac8875e5..5e4c7abcb 100644 --- a/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestJson.scala +++ b/change-validation/src/main/scala/com/normation/plugins/changevalidation/ChangeRequestJson.scala @@ -64,6 +64,7 @@ import com.normation.rudder.domain.queries.Query import com.normation.rudder.domain.workflows.* import com.normation.rudder.rule.category.RuleCategoryId import com.normation.rudder.services.modification.DiffService +import com.normation.rudder.tenants.QueryContext import com.typesafe.config.ConfigValue import io.scalaland.chimney.PartialTransformer import io.scalaland.chimney.Transformer @@ -138,9 +139,10 @@ object ChangeRequestJson { } // Entrypoint to convert the whole tree of ChangeRequest + some context to a serializable object ChangeRequestJson - def from(cr: ChangeRequest, status: WorkflowNodeId, isAcceptable: Boolean)(implicit + def from(cr: ChangeRequest, status: WorkflowNodeId, isAcceptable: Boolean)(using techniqueByDirective: Map[DirectiveId, Technique], - diffService: DiffService + diffService: DiffService, + qc: QueryContext ): PureResult[ChangeRequestJson] = { val changesJson: PureResult[Option[ConfigurationChangeRequestJson]] = cr match { case cr: ConfigurationChangeRequest => { @@ -344,15 +346,17 @@ object DirectiveChangeJson { } } - implicit def createTransformer(implicit - technique: Technique + implicit def createTransformer(using + technique: Technique, + qc: QueryContext ): Transformer[AddDirectiveDiff, DirectiveCreateChangeJson] = { case AddDirectiveDiff(techniqueName, directive) => DirectiveCreateChangeJson(JRDirective.fromDirective(technique, directive, None)) } implicit def deleteTransformer(implicit - technique: Technique + technique: Technique, + qc: QueryContext ): Transformer[DeleteDirectiveDiff, DirectiveDeleteChangeJson] = { case DeleteDirectiveDiff(_, directive) => DirectiveDeleteChangeJson(JRDirective.fromDirective(technique, directive, None)) @@ -383,7 +387,8 @@ object DirectiveChangeJson { implicit def transformDirectiveDiff(implicit change: DirectiveChange, technique: Technique, - diffService: DiffService + diffService: DiffService, + qc: QueryContext ): PartialTransformer[ChangeRequestDirectiveDiff, DirectiveChangeJson] = { PartialTransformer .define[ChangeRequestDirectiveDiff, DirectiveChangeJson] @@ -413,7 +418,8 @@ object DirectiveChangeActionJson { implicit def transformer(implicit technique: Technique, - diffService: DiffService + diffService: DiffService, + qc: QueryContext ): PartialTransformer[DirectiveChange, DirectiveChangeActionJson] = { case (source, _) => implicit val change = source @@ -821,12 +827,17 @@ object GlobalParameterChangeJson { } } - implicit val jrGlobalParameterTransformer: Transformer[GlobalParameter, JRGlobalParameter] = + implicit def jrGlobalParameterTransformer(using qc: QueryContext): Transformer[GlobalParameter, JRGlobalParameter] = JRGlobalParameter.fromGlobalParameter(_, None) - implicit val createTransformer: Transformer[AddGlobalParameterDiff, GlobalParameterCreateChangeJson] = + + implicit def createTransformer(using qc: QueryContext): Transformer[AddGlobalParameterDiff, GlobalParameterCreateChangeJson] = Transformer.derive[AddGlobalParameterDiff, GlobalParameterCreateChangeJson] - implicit val deleteTransformer: Transformer[DeleteGlobalParameterDiff, GlobalParameterDeleteChangeJson] = + + implicit def deleteTransformer(using + qc: QueryContext + ): Transformer[DeleteGlobalParameterDiff, GlobalParameterDeleteChangeJson] = Transformer.derive[DeleteGlobalParameterDiff, GlobalParameterDeleteChangeJson] + implicit def modifyTransformer(implicit change: GlobalParameterChange, diffService: DiffService @@ -841,9 +852,10 @@ object GlobalParameterChangeJson { Result.fromEitherString(result) } - implicit def transformer(implicit + implicit def transformer(using change: GlobalParameterChange, - diffService: DiffService + diffService: DiffService, + qc: QueryContext ): PartialTransformer[ChangeRequestGlobalParameterDiff, GlobalParameterChangeJson] = { PartialTransformer .define[ChangeRequestGlobalParameterDiff, GlobalParameterChangeJson] @@ -868,10 +880,11 @@ final case class GlobalParameterChangeActionJson( ) object GlobalParameterChangeActionJson { - import GlobalParameterChangeJson.* + import com.normation.plugins.changevalidation.GlobalParameterChangeJson.* - implicit def transformer(implicit - diffService: DiffService + implicit def transformer(using + diffService: DiffService, + qc: QueryContext ): PartialTransformer[GlobalParameterChange, GlobalParameterChangeActionJson] = { case (source, _) => implicit val change = source @@ -901,9 +914,10 @@ final case class ConfigurationChangeRequestJson( ) object ConfigurationChangeRequestJson { - implicit def transformer(implicit + implicit def transformer(using techniqueByDirective: Map[DirectiveId, Technique], - diffService: DiffService + diffService: DiffService, + qc: QueryContext ): PartialTransformer[ConfigurationChangeRequest, ConfigurationChangeRequestJson] = { PartialTransformer .define[ConfigurationChangeRequest, ConfigurationChangeRequestJson] diff --git a/change-validation/src/main/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApi.scala b/change-validation/src/main/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApi.scala index 8418052d2..c95422401 100644 --- a/change-validation/src/main/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApi.scala +++ b/change-validation/src/main/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApi.scala @@ -305,7 +305,7 @@ class WorkflowInternalApiImpl( } } - private def getDirectives: IOResult[MapView[DirectiveId, Directive]] = { + private def getDirectives(using qc: QueryContext): IOResult[MapView[DirectiveId, Directive]] = { for { library <- directiveRepository.getFullDirectiveLibrary() } yield { @@ -313,7 +313,7 @@ class WorkflowInternalApiImpl( } } - private def getNodeNames(implicit qc: QueryContext): IOResult[MapView[NodeId, String]] = { + private def getNodeNames(using qc: QueryContext): IOResult[MapView[NodeId, String]] = { for { library <- nodeFactRepository.getAll() } yield { diff --git a/change-validation/src/test/scala/com/normation/plugins/changevalidation/MockServices.scala b/change-validation/src/test/scala/com/normation/plugins/changevalidation/MockServices.scala index eb72866b4..496ad537b 100644 --- a/change-validation/src/test/scala/com/normation/plugins/changevalidation/MockServices.scala +++ b/change-validation/src/test/scala/com/normation/plugins/changevalidation/MockServices.scala @@ -93,27 +93,30 @@ class MockSupervisedTargets(unsupervisedDir: File, unsupervisedFilename: String, fullNodeGroupCategory.succeed } - override def categoryExists(id: NodeGroupCategoryId): IOResult[Boolean] = ??? - override def getNodeGroupOpt(id: NodeGroupId)(implicit qc: QueryContext): IOResult[Option[(NodeGroup, NodeGroupCategoryId)]] = + override def categoryExists(id: NodeGroupCategoryId)(using qc: QueryContext): IOResult[Boolean] = ??? + override def getNodeGroupOpt(id: NodeGroupId)(using qc: QueryContext): IOResult[Option[(NodeGroup, NodeGroupCategoryId)]] = ??? - override def getNodeGroupCategory(id: NodeGroupId): IOResult[NodeGroupCategory] = ??? - override def getAll(): IOResult[Seq[NodeGroup]] = ??? - override def getAllByIds(ids: Seq[NodeGroupId]): IOResult[Seq[NodeGroup]] = ??? - override def getAllNodeIds(): IOResult[Map[NodeGroupId, Set[NodeId]]] = ??? - override def getAllNodeIdsChunk(): IOResult[Map[NodeGroupId, Chunk[NodeId]]] = ??? - override def getGroupsByCategory(includeSystem: Boolean)(implicit + override def getNodeGroupCategory(id: NodeGroupId)(using qc: QueryContext): IOResult[NodeGroupCategory] = ??? + override def getAll()(using qc: QueryContext): IOResult[Seq[NodeGroup]] = ??? + override def getAllByIds(ids: Seq[NodeGroupId])(using qc: QueryContext): IOResult[Seq[NodeGroup]] = ??? + override def getAllNodeIds()(using qc: QueryContext): IOResult[Map[NodeGroupId, Set[NodeId]]] = ??? + override def getAllNodeIdsChunk()(using qc: QueryContext): IOResult[Map[NodeGroupId, Chunk[NodeId]]] = ??? + override def getGroupsByCategory(includeSystem: Boolean)(using qc: QueryContext ): IOResult[SortedMap[List[NodeGroupCategoryId], CategoryAndNodeGroup]] = ??? - override def findGroupWithAnyMember(nodeIds: Seq[NodeId]): IOResult[Seq[NodeGroupId]] = ??? - override def findGroupWithAllMember(nodeIds: Seq[NodeId]): IOResult[Seq[NodeGroupId]] = ??? - override def getRootCategory(): NodeGroupCategory = ??? - override def getRootCategoryPure(): IOResult[NodeGroupCategory] = ??? - override def getCategoryHierarchy: IOResult[SortedMap[List[NodeGroupCategoryId], NodeGroupCategory]] = ??? - override def getAllGroupCategories(includeSystem: Boolean): IOResult[Seq[NodeGroupCategory]] = ??? - override def getGroupCategory(id: NodeGroupCategoryId): IOResult[NodeGroupCategory] = ??? - override def getParentGroupCategory(id: NodeGroupCategoryId): IOResult[NodeGroupCategory] = ??? - override def getParents_NodeGroupCategory(id: NodeGroupCategoryId): IOResult[List[NodeGroupCategory]] = ??? - override def getAllNonSystemCategories(): IOResult[Seq[NodeGroupCategory]] = ??? + override def findGroupWithAnyMember(nodeIds: Seq[NodeId])(using qc: QueryContext): IOResult[Seq[NodeGroupId]] = ??? + override def findGroupWithAllMember(nodeIds: Seq[NodeId])(using qc: QueryContext): IOResult[Seq[NodeGroupId]] = ??? + override def getRootCategory()(using qc: QueryContext): NodeGroupCategory = ??? + override def getRootCategoryPure()(using qc: QueryContext): IOResult[NodeGroupCategory] = ??? + override def getCategoryHierarchy(using qc: QueryContext): IOResult[SortedMap[List[NodeGroupCategoryId], NodeGroupCategory]] = + ??? + override def getAllGroupCategories(includeSystem: Boolean)(using qc: QueryContext): IOResult[Seq[NodeGroupCategory]] = ??? + override def getGroupCategory(id: NodeGroupCategoryId)(using qc: QueryContext): IOResult[NodeGroupCategory] = ??? + override def getParentGroupCategory(id: NodeGroupCategoryId)(using qc: QueryContext): IOResult[NodeGroupCategory] = ??? + override def getParents_NodeGroupCategory(id: NodeGroupCategoryId)(using + qc: QueryContext + ): IOResult[List[NodeGroupCategory]] = ??? + override def getAllNonSystemCategories()(using qc: QueryContext): IOResult[Seq[NodeGroupCategory]] = ??? } } diff --git a/change-validation/src/test/scala/com/normation/plugins/changevalidation/ValidationNeededTest.scala b/change-validation/src/test/scala/com/normation/plugins/changevalidation/ValidationNeededTest.scala index d79335593..dc8068fe5 100644 --- a/change-validation/src/test/scala/com/normation/plugins/changevalidation/ValidationNeededTest.scala +++ b/change-validation/src/test/scala/com/normation/plugins/changevalidation/ValidationNeededTest.scala @@ -47,6 +47,7 @@ import com.normation.rudder.MockNodeGroups import com.normation.rudder.MockNodes import com.normation.rudder.MockRules import com.normation.rudder.MockTechniques +import com.normation.rudder.MockTenants import com.normation.rudder.domain.policies.ActiveTechniqueId import com.normation.rudder.domain.policies.GroupTarget import com.normation.rudder.domain.policies.SimpleTarget @@ -66,10 +67,11 @@ import zio.syntax.ToZio @RunWith(classOf[JUnitRunner]) class ValidationNeededTest extends Specification { - val mockNodes: MockNodes = new MockNodes() - val mockNodeGroups: MockNodeGroups = new MockNodeGroups(mockNodes, new MockGlobalParam()) + val mockTenants = new MockTenants() + val mockNodes: MockNodes = new MockNodes(mockTenants) + val mockNodeGroups: MockNodeGroups = new MockNodeGroups(mockNodes, new MockGlobalParam(mockTenants), mockTenants) val actor: EventActor = EventActor("myActor") - val mockRules: MockRules = new MockRules() + val mockRules: MockRules = new MockRules(mockTenants) val nodeGrpValNdd = new NodeGroupValidationNeeded( () => Set[SimpleTarget](GroupTarget(mockNodeGroups.g0.id)).succeed, @@ -125,9 +127,10 @@ class ValidationNeededTest extends Specification { } } + val mockTenants = new MockTenants() val mockGitRepo = new MockGitConfigRepo("") val mockTechniques = MockTechniques(mockGitRepo) - val mockDirectives = new MockDirectives(mockTechniques) + val mockDirectives = new MockDirectives(mockTechniques, mockTenants) val sectionSpec = SectionSpec("ROOT") val technique = mockDirectives.directives.commonTechnique diff --git a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ChangeRequestApiTest.scala b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ChangeRequestApiTest.scala index 30ccaf90e..4b5da2e99 100644 --- a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ChangeRequestApiTest.scala +++ b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ChangeRequestApiTest.scala @@ -51,6 +51,7 @@ import com.normation.plugins.changevalidation.TwoValidationStepsWorkflowServiceI import com.normation.plugins.changevalidation.TwoValidationStepsWorkflowServiceImpl.* import com.normation.rudder.MockGlobalParam import com.normation.rudder.MockNodes +import com.normation.rudder.MockTenants import com.normation.rudder.api.ApiVersion import com.normation.rudder.batch.AsyncWorkflowInfo import com.normation.rudder.domain.nodes.AddNodeGroupDiff @@ -230,7 +231,8 @@ class ChangeRequestApiTest extends ZIOSpecDefault { val mockDirectives = restTestSetUp.mockDirectives val mockNodeGroups = restTestSetUp.mockNodeGroups val mockRules = restTestSetUp.mockRules - val mockGlobalParam = new MockGlobalParam() + val mockTenants = new MockTenants() + val mockGlobalParam = new MockGlobalParam(mockTenants) val mockServices = new MockServices( Map( @@ -641,7 +643,7 @@ class ChangeRequestApiTest extends ZIOSpecDefault { ) val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, Some(mockServices.userService)) + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, mockServices.userService) val transformations: Map[String, String => String] = Map() @@ -659,6 +661,7 @@ class ChangeRequestApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + mockServices.userService, List("api_changerequest.yml"), transformations ) diff --git a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/SupervisedTargetsApiTest.scala b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/SupervisedTargetsApiTest.scala index 8d7fc69d6..f651e2ec8 100644 --- a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/SupervisedTargetsApiTest.scala +++ b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/SupervisedTargetsApiTest.scala @@ -7,6 +7,7 @@ import com.normation.plugins.AlwaysEnabledPluginStatus import com.normation.plugins.changevalidation.MockSupervisedTargets import com.normation.rudder.api.ApiVersion import com.normation.rudder.rest.RestTestSetUp +import com.normation.rudder.rest.TestUserService import com.normation.rudder.rest.TraitTestApiFromYamlFiles import java.nio.file.Files import org.junit.runner.RunWith @@ -45,7 +46,8 @@ class SupervisedTargetsApiTest extends ZIOSpecDefault { ) val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None) + val userService = new TestUserService + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService) val transformations: Map[String, String => String] = Map() @@ -63,6 +65,7 @@ class SupervisedTargetsApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + userService, List("api_supervisedtargets.yml"), transformations ) diff --git a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ValidatedUserApiTest.scala b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ValidatedUserApiTest.scala index 9fcf26bab..e2b9c899f 100644 --- a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ValidatedUserApiTest.scala +++ b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/ValidatedUserApiTest.scala @@ -9,6 +9,7 @@ import com.normation.plugins.changevalidation.MockValidatedUsers import com.normation.plugins.changevalidation.WorkflowUsers import com.normation.rudder.api.ApiVersion import com.normation.rudder.rest.RestTestSetUp +import com.normation.rudder.rest.TestUserService import com.normation.rudder.rest.TraitTestApiFromYamlFiles import java.nio.file.Files import org.junit.runner.RunWith @@ -40,7 +41,8 @@ class ValidatedUserApiTest extends ZIOSpecDefault { ) val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None) + val userService = new TestUserService + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService) val transformations: Map[String, String => String] = Map() @@ -58,6 +60,7 @@ class ValidatedUserApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + userService, List("api_validateduser.yml"), transformations ) diff --git a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApiTest.scala b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApiTest.scala index 4b7364b4c..26ac3b049 100644 --- a/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApiTest.scala +++ b/change-validation/src/test/scala/com/normation/plugins/changevalidation/api/WorkflowInternalApiTest.scala @@ -112,7 +112,7 @@ class WorkflowInternalApiTest extends ZIOSpecDefault { val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None) + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, restTestSetUp.userService) val transformations: Map[String, String => String] = Map() override def spec: Spec[TestEnvironment & Scope, Any] = { @@ -123,6 +123,7 @@ class WorkflowInternalApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + restTestSetUp.userService, List("api_workflowinternal.yml"), transformations ) diff --git a/datasources/src/main/scala/com/normation/plugins/datasources/QueryService.scala b/datasources/src/main/scala/com/normation/plugins/datasources/QueryService.scala index b6881a9f9..f849a635b 100644 --- a/datasources/src/main/scala/com/normation/plugins/datasources/QueryService.scala +++ b/datasources/src/main/scala/com/normation/plugins/datasources/QueryService.scala @@ -342,6 +342,9 @@ class HttpQueryDataSourceService( globalPolicyMode: () => IOResult[GlobalPolicyMode], cause: UpdateCause ): IOResult[Set[NodeUpdateResult]] = { + // datasources need all tenant access + given qc: QueryContext = QueryContext.systemQC + for { nodes <- factRepository.getAll()(using QueryContext.systemQC) policyServers = nodes.filter(_._2.rudderSettings.isPolicyServer) @@ -377,6 +380,9 @@ class HttpQueryDataSourceService( nodeId: NodeId, cause: UpdateCause ): IOResult[NodeUpdateResult] = { + // datasources need all tenant access + given qc: QueryContext = QueryContext.systemQC + for { mode <- globalPolicyMode() allNodes <- factRepository.getAll()(using QueryContext.systemQC) diff --git a/datasources/src/test/scala/com/normation/plugins/datasources/ZioUpdateHttpDatasetTest.scala b/datasources/src/test/scala/com/normation/plugins/datasources/ZioUpdateHttpDatasetTest.scala index 6568c513c..025b73e32 100644 --- a/datasources/src/test/scala/com/normation/plugins/datasources/ZioUpdateHttpDatasetTest.scala +++ b/datasources/src/test/scala/com/normation/plugins/datasources/ZioUpdateHttpDatasetTest.scala @@ -346,8 +346,10 @@ class ZioUpdateHttpDatasetTest extends ZIOSpecDefault { val fetch: GetDataset = new GetDataset(interpolation) val parameterRepo = new RoParameterRepository() { - def getAllGlobalParameters(): IOResult[Seq[GlobalParameter]] = Seq().succeed - def getGlobalParameter(parameterName: String): IOResult[Option[GlobalParameter]] = None.succeed + override def getGlobalParameter(parameterName: String)(using qc: QueryContext): IOResult[Option[GlobalParameter]] = + None.succeed + + override def getAllGlobalParameters()(using qc: QueryContext): IOResult[Seq[GlobalParameter]] = Seq().succeed } def buildNodeRepo(initNodeInfo: Map[NodeId, CoreNodeFact]): UIO[(Ref[Map[NodeId, Int]], NodeFactRepository)] = { diff --git a/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceFilesTest.scala b/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceFilesTest.scala index a44ac9239..c202b5368 100644 --- a/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceFilesTest.scala +++ b/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceFilesTest.scala @@ -43,6 +43,7 @@ import com.normation.errors.effectUioUnit import com.normation.plugins.AlwaysEnabledPluginStatus import com.normation.plugins.datasources.* import com.normation.rudder.MockNodes +import com.normation.rudder.MockTenants import com.normation.rudder.rest.RestTest import com.normation.rudder.rest.RestTestSetUp import com.normation.rudder.rest.TraitTestApiFromYamlFiles @@ -60,7 +61,8 @@ class RestDataSourceFilesTest extends ZIOSpecDefault { val datasourceRepo = new MemoryDataSourceRepository with NoopDataSourceCallbacks - val mockNodes = new MockNodes() + val mockTenants = new MockTenants() + val mockNodes = new MockNodes(mockTenants) val dataSourceApi9 = new DataSourceApiImpl( datasourceRepo, mockNodes.nodeFactRepo, @@ -68,7 +70,7 @@ class RestDataSourceFilesTest extends ZIOSpecDefault { )(using AlwaysEnabledPluginStatus) val (rudderApi, liftRules) = - TraitTestApiFromYamlFiles.buildLiftRules(dataSourceApi9 :: Nil, restTestSetUp.apiVersions, Some(restTestSetUp.userService)) + TraitTestApiFromYamlFiles.buildLiftRules(dataSourceApi9 :: Nil, restTestSetUp.apiVersions, restTestSetUp.userService) val restTest = new RestTest(liftRules) restTestSetUp.rudderApi.addModules(dataSourceApi9.getLiftEndpoints()) @@ -113,6 +115,7 @@ class RestDataSourceFilesTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + restTestSetUp.userService, Nil, transformations ) diff --git a/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceTest.scala b/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceTest.scala index 060c94d29..fdde8d705 100644 --- a/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceTest.scala +++ b/datasources/src/test/scala/com/normation/plugins/datasources/api/RestDataSourceTest.scala @@ -42,6 +42,7 @@ import com.normation.plugins.AlwaysEnabledPluginStatus import com.normation.plugins.datasources.* import com.normation.plugins.datasources.DataSourceJsonCodec.* import com.normation.rudder.MockNodes +import com.normation.rudder.MockTenants import com.normation.rudder.domain.properties.GenericProperty.fromZioJson import com.normation.rudder.rest.RestTest import com.normation.rudder.rest.RestTestSetUp @@ -64,7 +65,8 @@ class RestDataSourceTest extends Specification { val datasourceRepo = new MemoryDataSourceRepository with NoopDataSourceCallbacks - val mockNodes = new MockNodes() + val mockTenants = new MockTenants() + val mockNodes = new MockNodes(mockTenants) val dataSourceApi9 = new DataSourceApiImpl( datasourceRepo, mockNodes.nodeFactRepo, @@ -72,7 +74,7 @@ class RestDataSourceTest extends Specification { )(using AlwaysEnabledPluginStatus) val (rudderApi, liftRules) = - TraitTestApiFromYamlFiles.buildLiftRules(dataSourceApi9 :: Nil, restTestSetUp.apiVersions, Some(restTestSetUp.userService)) + TraitTestApiFromYamlFiles.buildLiftRules(dataSourceApi9 :: Nil, restTestSetUp.apiVersions, restTestSetUp.userService) val restTest = new RestTest(liftRules) restTestSetUp.rudderApi.addModules(dataSourceApi9.getLiftEndpoints()) diff --git a/openscap/src/main/scala/com/normation/plugins/openscappolicies/services/OpenScapReportReader.scala b/openscap/src/main/scala/com/normation/plugins/openscappolicies/services/OpenScapReportReader.scala index 8ce4d40fc..882d71560 100644 --- a/openscap/src/main/scala/com/normation/plugins/openscappolicies/services/OpenScapReportReader.scala +++ b/openscap/src/main/scala/com/normation/plugins/openscappolicies/services/OpenScapReportReader.scala @@ -65,17 +65,17 @@ class OpenScapReportReader( findExpectedReportRepository: FindExpectedReportRepository, openScapReportDirPath: String ) { - import OpenScapReportReader.* + import com.normation.plugins.openscappolicies.services.OpenScapReportReader.* val openScapReportPath = File(openScapReportDirPath) - val logger = OpenscapPoliciesLogger - private def computePathFromNodeId(nodeId: NodeId): String = { (openScapReportPath / nodeId.value / OPENSCAP_REPORT_FILENAME).pathAsString } def checkifOpenScapApplied(nodeId: NodeId): Box[Boolean] = { + // this is tenant indep + given qc: QueryContext = QueryContext.systemQC val openScapDirectives = (for { // get active technique activeTechniqueIds <- pluginDirectiveRepository.getActiveTechniqueIdByTechniqueName(TechniqueName(OPENSCAP_TECHNIQUE_ID)) @@ -88,14 +88,14 @@ class OpenScapReportReader( openScapDirectives match { case f: Failure => val errMessage = s"Could not identify the list of OpenSCAP related directives, cause is: ${f.messageChain}" - logger.error(errMessage) + OpenscapPoliciesLogger.error(errMessage) Failure(errMessage) case Empty => val errMessage = s"Could not identify the list of OpenSCAP related directives, no cause reported" - logger.error(errMessage) + OpenscapPoliciesLogger.error(errMessage) Failure(errMessage) - case Full(directives) if directives.size == 0 => - logger.info("There are no OpensCAP-based directive yet") + case Full(directives) if directives.isEmpty => + OpenscapPoliciesLogger.info("There are no OpensCAP-based directive yet") Full(false) case Full(directives) => val expectedOption = (for { diff --git a/openscap/src/test/scala/com/normation/plugins/openscappolicies/api/OpenScapApiTest.scala b/openscap/src/test/scala/com/normation/plugins/openscappolicies/api/OpenScapApiTest.scala index e274e8bd4..46d23d0a4 100644 --- a/openscap/src/test/scala/com/normation/plugins/openscappolicies/api/OpenScapApiTest.scala +++ b/openscap/src/test/scala/com/normation/plugins/openscappolicies/api/OpenScapApiTest.scala @@ -6,8 +6,10 @@ import com.normation.errors.effectUioUnit import com.normation.plugins.AlwaysEnabledPluginStatus import com.normation.plugins.openscappolicies.services.OpenScapReportReader import com.normation.rudder.MockNodes +import com.normation.rudder.MockTenants import com.normation.rudder.api.ApiVersion import com.normation.rudder.rest.RestTestSetUp +import com.normation.rudder.rest.TestUserService import com.normation.rudder.rest.TraitTestApiFromYamlFiles import java.nio.file.Files import org.junit.runner.RunWith @@ -50,7 +52,8 @@ class OpenScapApiTest extends ZIOSpecDefault { // create a directory instead of a file, attempting to read the content should throw an exception .createChild(OpenScapReportReader.OPENSCAP_REPORT_FILENAME, asDirectory = true) - val mockNodes = new MockNodes() + val mockTenants = new MockTenants() + val mockNodes = new MockNodes(mockTenants) val openScapReportReader = new OpenScapReportReader( mockNodes.nodeFactRepo, restTestSetUp.mockDirectives.directiveRepo, @@ -64,7 +67,8 @@ class OpenScapApiTest extends ZIOSpecDefault { ) val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None) + val userService = new TestUserService + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, userService) val transformations: Map[String, String => String] = Map() @@ -82,6 +86,7 @@ class OpenScapApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + userService, Nil, transformations ) diff --git a/scale-out-relay/src/main/scala/com/normation/plugins/scaleoutrelay/ScaleOutRelayService.scala b/scale-out-relay/src/main/scala/com/normation/plugins/scaleoutrelay/ScaleOutRelayService.scala index 58c3ddeb0..7a3769a0d 100644 --- a/scale-out-relay/src/main/scala/com/normation/plugins/scaleoutrelay/ScaleOutRelayService.scala +++ b/scale-out-relay/src/main/scala/com/normation/plugins/scaleoutrelay/ScaleOutRelayService.scala @@ -94,12 +94,11 @@ class ScaleOutRelayService( _ <- ScaleOutRelayLoggerPure.trace(s"[promote ${nodeInfo.id.value}] create new system groups") _ <- ZIO.foreach(objects.groups)(g => woLDAPNodeGroupRepository.create(g, NodeGroupCategoryId(SYSTEM_GROUPS))) _ <- ScaleOutRelayLoggerPure.trace(s"[promote ${nodeInfo.id.value}] create new system directives") - _ <- ZIO.foreach(objects.directives.toList) { - case (t, d) => - woDirectiveRepository.saveSystemDirective(ActiveTechniqueId(t.value), d, cc.modId, cc.actor, cc.message) + _ <- ZIO.foreach(objects.directives.toList) { (t, d) => + woDirectiveRepository.saveSystemDirective(ActiveTechniqueId(t.value), d) } _ <- ScaleOutRelayLoggerPure.trace(s"[promote ${nodeInfo.id.value}] create new system rules") - _ <- ZIO.foreach(objects.rules)(r => woRuleRepository.create(r, cc.modId, cc.actor, cc.message)) + _ <- ZIO.foreach(objects.rules)(r => woRuleRepository.create(r)) // save the relay in the rudder_policy_servers entry in LDAP existingPolicyServers <- policyServerManagementService.getPolicyServers() @@ -201,13 +200,13 @@ class ScaleOutRelayService( }) val directives = objects.directives.toList.map(d => { woDirectiveRepository - .deleteSystemDirective(d._2.id.uid, cc.modId, cc.actor, cc.message) + .deleteSystemDirective(d._2.id.uid) .chainError(s"Demote relay failed: removing directive '${d._2.id.debugString}' failed") .unit }) val rules = objects.rules.map(r => { woRuleRepository - .deleteSystemRule(r.id, cc.modId, cc.actor, cc.message) + .deleteSystemRule(r.id) .tapError { err => ScaleOutRelayLoggerPure.info(s"Trying to remove residual object rule ${r.id.serialize}: ${err.fullMsg}") } diff --git a/scale-out-relay/src/test/scala/com/normation/plugins/scaleoutrelay/api/ScaleOutRelayApiTest.scala b/scale-out-relay/src/test/scala/com/normation/plugins/scaleoutrelay/api/ScaleOutRelayApiTest.scala index 98529296a..e8366f0fc 100644 --- a/scale-out-relay/src/test/scala/com/normation/plugins/scaleoutrelay/api/ScaleOutRelayApiTest.scala +++ b/scale-out-relay/src/test/scala/com/normation/plugins/scaleoutrelay/api/ScaleOutRelayApiTest.scala @@ -48,7 +48,7 @@ class ScaleOutRelayApiTest extends ZIOSpecDefault { ) val apiVersions = ApiVersion(13, true) :: ApiVersion(14, false) :: Nil - val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, None) + val (rudderApi, liftRules) = TraitTestApiFromYamlFiles.buildLiftRules(modules, apiVersions, restTestSetUp.userService) val transformations: Map[String, String => String] = Map() @@ -78,6 +78,7 @@ class ScaleOutRelayApiTest extends ZIOSpecDefault { yamlSourceDirectory, yamlDestTmpDirectory, liftRules, + restTestSetUp.userService, Nil, transformations )