Skip to content

Commit

Permalink
Issue #8924: comments, tests, renamaing and moving things around (#12)
Browse files Browse the repository at this point in the history
  • Loading branch information
fanf authored and VinceMacBuche committed Sep 12, 2016
1 parent 0ae6f60 commit f2e3bf1
Show file tree
Hide file tree
Showing 17 changed files with 208 additions and 93 deletions.
Expand Up @@ -37,17 +37,17 @@

package com.normation.rudder.domain.nodes

import com.normation.inventory.domain.FullInventory

import com.normation.inventory.domain.NodeId
import com.normation.utils.HashcodeCaching
import com.normation.rudder.reports.ReportingConfiguration
import net.liftweb.json.JsonAST.JObject
import org.joda.time.DateTime
import com.normation.rudder.domain.policies.SimpleDiff
import com.normation.rudder.domain.policies.PolicyMode
import com.normation.rudder.reports.AgentRunInterval
import com.normation.rudder.reports.HeartbeatConfiguration
import com.normation.rudder.domain.policies.SimpleDiff
import com.normation.inventory.domain.FullInventory
import com.normation.rudder.policyMode.PolicyMode
import com.normation.rudder.policyMode.Enforce
import com.normation.rudder.reports.ReportingConfiguration
import com.normation.utils.HashcodeCaching

import org.joda.time.DateTime

/**
* The entry point for a REGISTERED node in Rudder.
Expand Down Expand Up @@ -129,8 +129,8 @@ final case class ModifyNodePropertiesDiff(
*/
object JsonSerialisation {

import net.liftweb.json.JsonDSL._
import net.liftweb.json._
import net.liftweb.json.JsonDSL._

implicit class JsonNodeProperty(x: NodeProperty) {
def toLdapJson(): JObject = (
Expand All @@ -140,7 +140,6 @@ object JsonSerialisation {
}

implicit class JsonNodeProperties(props: Seq[NodeProperty]) {
import net.liftweb.json.Serialization.write
implicit val formats = DefaultFormats

private[this] def json(x: NodeProperty): JObject = (
Expand Down
Expand Up @@ -44,7 +44,7 @@ import com.normation.cfclerk.domain.TechniqueVersion
import com.normation.utils.HashcodeCaching
import com.normation.cfclerk.domain.SectionSpec
import com.normation.cfclerk.domain.Technique
import com.normation.rudder.policyMode.PolicyMode
import com.normation.rudder.domain.policies.PolicyMode

case class DirectiveId(value : String) extends HashcodeCaching

Expand Down
Expand Up @@ -34,56 +34,69 @@
*
*************************************************************************************
*/
package com.normation.rudder.policyMode
package com.normation.rudder.domain.policies

import net.liftweb.common.{Box,Full,Failure}
import ca.mrvisser.sealerate.values

sealed trait PolicyMode {
def name : String
}
sealed trait PolicyMode { def name : String }

case object Verify extends PolicyMode {
val name = "verify"
}
final object PolicyMode {

case object Enforce extends PolicyMode {
val name = "enforce"
}
final case object Verify extends PolicyMode { val name = "verify" }
final case object Enforce extends PolicyMode { val name = "enforce" }

object PolicyMode {
val allModes : List[PolicyMode] = Verify :: Enforce :: Nil
def allModes: Set[PolicyMode] = values[PolicyMode]

//get from string, case insensitive
def parse (value : String) : Box[PolicyMode] = {
allModes.find { _.name == value.toLowerCase() } match {
case None =>
Failure(s"Unable to parse policy mode name '${value}'. was expecting ${allModes.map(_.name).mkString("'", "' or '", "'")}.")
Failure(s"Unable to parse policy mode name '${value}'. was expecting ${allModes.map(_.name).mkString("'", "' or '", "'")}.")
case Some(mode) =>
Full(mode)
}
}
}

case class GlobalPolicyMode (
mode : PolicyMode
, overridable : Boolean
)

object PolicyModeService {

/*
* Combine different modes and get the resulting one. Typically used when we
* want to know what is the policy mode on a given node, for a given directive,
* and we know from the context the default global value and the value of
* other directives for the same technique also on that node.
*/
def computeMode(globalValue : GlobalPolicyMode, nodeMode : Option[PolicyMode], directiveMode : Seq[Option[PolicyMode]]) = {
if (globalValue.overridable) {
nodeMode match {
case Some(Verify) => Verify
case _ =>
(((None : Option[PolicyMode]) /: directiveMode) {
case (None,current) => current
case (Some(Verify),_) | (_,Some(Verify)) => Some(Verify)
case _ => Some(Enforce)
}).getOrElse(globalValue.mode)
globalValue.overridable match {
case PolicyModeOverrides.Always =>
nodeMode match {
case Some(Verify) => Verify
case _ =>
(((None : Option[PolicyMode]) /: directiveMode) {
case (None,current) => current
case (Some(Verify),_) | (_,Some(Verify)) => Some(Verify)
case _ => Some(Enforce)
}).getOrElse(globalValue.mode)

}
} else {
globalValue.mode
}

case PolicyModeOverrides.Unoverridable =>
globalValue.mode
}
}
}

/*
* What is allowed to override the global value for policy mode
*/
sealed trait PolicyModeOverrides
final object PolicyModeOverrides {
//nothing can override. Global is the sole value
final case object Unoverridable extends PolicyModeOverrides
//anything can override. Combination rules applies.
final case object Always extends PolicyModeOverrides
//directives, groups, ...
}

final case class GlobalPolicyMode (
mode : PolicyMode
, overridable: PolicyModeOverrides
)
Expand Up @@ -80,8 +80,7 @@ import net.liftweb.json._
import JsonDSL._
import com.normation.rudder.reports._
import com.normation.inventory.ldap.core.InventoryMapper
import com.normation.rudder.policyMode.PolicyMode
import com.normation.rudder.policyMode.Enforce
import com.normation.rudder.domain.policies.PolicyMode

/**
* Map objects from/to LDAPEntries
Expand Down
Expand Up @@ -94,7 +94,7 @@ import scala.xml.XML
import scala.xml.PrettyPrinter
import com.normation.rudder.rule.category.RuleCategory
import com.normation.rudder.rule.category.RuleCategoryId
import com.normation.rudder.policyMode.PolicyMode
import com.normation.rudder.domain.policies.PolicyMode

case class XmlUnserializerImpl (
rule : RuleUnserialisation
Expand Down
Expand Up @@ -37,42 +37,58 @@

package com.normation.rudder.services.servers

import com.normation.rudder.batch.UpdateDynamicGroups
import com.normation.rudder.domain._
import com.normation.rudder.domain.nodes._
import com.normation.rudder.domain.Constants._
import com.normation.rudder.domain.servers.Srv
import com.normation.rudder.repository._
import com.normation.rudder.repository.ldap.LDAPEntityMapper
import com.normation.inventory.ldap.core.InventoryDitService
import com.normation.inventory.domain._
import com.normation.inventory.ldap.core._
import LDAPConstants._
import com.normation.inventory.ldap.core.LDAPFullInventoryRepository
import com.unboundid.ldap.sdk._
import com.unboundid.ldif.LDIFChangeRecord
import com.normation.ldap.sdk._
import BuildFilter.{ALL,EQ}
import com.normation.utils.Control._
import scala.collection.mutable.Buffer
import net.liftweb.common._
import Box._
import net.liftweb.util.Helpers._
import com.normation.cfclerk.domain.TechniqueId
import java.lang.IllegalArgumentException


import org.joda.time.DateTime
import org.slf4j.LoggerFactory
import net.liftweb.common.Loggable
import net.liftweb.common.EmptyBox
import net.liftweb.common.Full
import net.liftweb.common.Box
import net.liftweb.common.Failure
import net.liftweb.common.Empty

import com.normation.eventlog.EventActor
import com.normation.inventory.services.core.ReadOnlyFullInventoryRepository
import com.normation.rudder.services.queries.QueryProcessor
import com.normation.rudder.domain.queries._
import java.lang.IllegalArgumentException
import com.normation.eventlog.ModificationId
import java.net.InetAddress
import org.apache.commons.net.util.SubnetUtils
import com.normation.rudder.domain.eventlog._
import com.normation.rudder.reports._
import com.normation.ldap.sdk.LDAPConnectionProvider
import com.normation.ldap.sdk.RoLDAPConnection
import com.normation.ldap.sdk.RwLDAPConnection
import com.normation.ldap.sdk.BuildFilter.{ ALL, EQ }
import com.normation.inventory.domain.InventoryStatus
import com.normation.inventory.domain.NodeId
import com.normation.inventory.domain.PendingInventory
import com.normation.inventory.domain.FullInventory
import com.normation.inventory.domain.AcceptedInventory
import com.normation.inventory.ldap.core.InventoryDit
import com.normation.inventory.ldap.core.InventoryHistoryLogRepository
import com.normation.inventory.ldap.core.InventoryDitService
import com.normation.inventory.ldap.core.LDAPConstants._
import com.normation.inventory.ldap.core.LDAPFullInventoryRepository
import com.normation.inventory.services.core.ReadOnlyFullInventoryRepository
import com.normation.rudder.batch.UpdateDynamicGroups
import com.normation.rudder.domain.Constants
import com.normation.rudder.domain.nodes.Node
import com.normation.rudder.domain.NodeDit
import com.normation.rudder.domain.servers.Srv
import com.normation.rudder.domain.queries.NodeReturnType
import com.normation.rudder.domain.queries.CriterionLine
import com.normation.rudder.domain.queries.DitQueryData
import com.normation.rudder.domain.queries.Query
import com.normation.rudder.domain.queries.Or
import com.normation.rudder.domain.queries.Equals
import com.normation.rudder.domain.eventlog.InventoryLogDetails
import com.normation.rudder.domain.eventlog.RefuseNodeEventLog
import com.normation.rudder.domain.eventlog.AcceptNodeEventLog
import com.normation.rudder.repository.RoNodeGroupRepository
import com.normation.rudder.repository.CachedRepository
import com.normation.rudder.repository.WoNodeGroupRepository
import com.normation.rudder.repository.EventLogRepository
import com.normation.rudder.policyMode.Enforce
import com.normation.rudder.repository.ldap.LDAPEntityMapper
import com.normation.rudder.reports.ReportingConfiguration
import com.normation.rudder.services.queries.QueryProcessor
import com.unboundid.ldif.LDIFChangeRecord
import com.normation.utils.Control.sequence
import com.normation.utils.Control.bestEffort

/**
* A trait to manage the acceptation of new node in Rudder
Expand Down
@@ -0,0 +1,89 @@
/*
*************************************************************************************
* Copyright 2011 Normation SAS
*************************************************************************************
*
* This file is part of Rudder.
*
* Rudder is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* In accordance with the terms of section 7 (7. Additional Terms.) of
* the GNU General Public License version 3, the copyright holders add
* the following Additional permissions:
* Notwithstanding to the terms of section 5 (5. Conveying Modified Source
* Versions) and 6 (6. Conveying Non-Source Forms.) of the GNU General
* Public License version 3, when you create a Related Module, this
* Related Module is not considered as a part of the work and may be
* distributed under the license agreement of your choice.
* A "Related Module" means a set of sources files including their
* documentation that, without modification of the Source Code, enables
* supplementary functions or services in addition to those offered by
* the Software.
*
* Rudder is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Rudder. If not, see <http://www.gnu.org/licenses/>.
*
*************************************************************************************
*/

package com.normation.rudder.domain.policies

import org.junit.runner.RunWith
import org.specs2.mutable._
import org.specs2.runner._
import net.liftweb.common._
import com.normation.rudder.domain.policies.PolicyMode.Enforce
import com.normation.rudder.domain.policies.PolicyMode.Verify

@RunWith(classOf[JUnitRunner])
class PolicyModeTest extends Specification with Loggable {


"Chekin rules on policy mode" should {
"show that global policy mode wins when not overridable" in {
PolicyMode.computeMode(
GlobalPolicyMode(Enforce, PolicyModeOverrides.Unoverridable)
, Some(Verify), Some(Verify) :: Nil
) must equalTo(Enforce)
}
"show that global policy mode wins when not overridable" in {
PolicyMode.computeMode(
GlobalPolicyMode(Enforce, PolicyModeOverrides.Unoverridable)
, Some(Enforce), Some(Verify) :: Nil
) must equalTo(Enforce)
}
"and loose when overridable" in {
PolicyMode.computeMode(
GlobalPolicyMode(Enforce, PolicyModeOverrides.Always)
, Some(Enforce), Some(Verify) :: Nil
) must equalTo(Verify)
}
"and loose when overridable" in {
PolicyMode.computeMode(
GlobalPolicyMode(Enforce, PolicyModeOverrides.Always)
, Some(Verify), Some(Enforce) :: Nil
) must equalTo(Verify)
}
"EVEN if global is on verify" in {
PolicyMode.computeMode(
GlobalPolicyMode(Verify, PolicyModeOverrides.Always)
, Some(Enforce), Some(Enforce) :: Nil
) must equalTo(Enforce)
}
"But is chosen if nothign else defined" in {
PolicyMode.computeMode(
GlobalPolicyMode(Enforce, PolicyModeOverrides.Always)
, None, None :: Nil
) must equalTo(Enforce)
}
}
}
Expand Up @@ -19,7 +19,6 @@ import com.normation.inventory.domain.Debian
import com.normation.inventory.domain.Linux
import com.normation.inventory.domain.Version
import com.normation.inventory.domain.UndefinedKey
import com.normation.rudder.policyMode.Enforce

@RunWith(classOf[JUnitRunner])
class RuleTargetTest extends Specification with Loggable {
Expand Down
Expand Up @@ -58,7 +58,7 @@ import com.normation.inventory.domain.VirtualMachineType
import com.normation.rudder.domain.nodes.MachineInfo
import com.normation.inventory.domain.MemorySize
import com.normation.inventory.domain.MachineUuid
import com.normation.rudder.policyMode.Enforce
import com.normation.rudder.domain.policies.PolicyMode.Enforce

/*
* This file is a container for testing data that are a little boring to
Expand Down
Expand Up @@ -55,7 +55,6 @@ import com.normation.rudder.domain.policies.Rule
import com.normation.rudder.domain.policies.GroupTarget
import com.normation.rudder.domain.nodes.NodeGroupId
import com.normation.rudder.rule.category.RuleCategoryId
import com.normation.rudder.policyMode.Enforce

/**
* Test how RuleVal and DirectiveVal are constructed, and if they
Expand Down

0 comments on commit f2e3bf1

Please sign in to comment.