66 "time"
77)
88
9- // Assessment is a struct that contains the results of a single method within a ControlEvaluation.
9+ // Assessment is a struct that contains the results of a single Procedure within a ControlEvaluation.
1010type Assessment struct {
1111 // RequirementID is the unique identifier for the requirement being tested
1212 RequirementId string `yaml:"requirement-id"`
@@ -18,10 +18,8 @@ type Assessment struct {
1818 Result Result `yaml:"result"`
1919 // Message is the human-readable result of the test
2020 Message string `yaml:"message"`
21- // Methods is a slice of assessment methods that were executed during the test
22- Methods []* AssessmentMethod `yaml:"methods"`
23- // MethodsExecuted is the number of assessment methods that were executed during the test
24- MethodsExecuted int `yaml:"methods-executed,omitempty"`
21+ // Procedures is a slice of assessment procedures that were executed during the test
22+ Procedures []* AssessmentProcedure `yaml:"procedures"`
2523 // RunDuration is the time it took to run the test
2624 RunDuration string `yaml:"run-duration,omitempty"`
2725 // Value is the object that was returned during the test
@@ -31,32 +29,24 @@ type Assessment struct {
3129}
3230
3331// NewAssessment creates a new Assessment object and returns a pointer to it.
34- func NewAssessment (requirementId string , description string , applicability []string , methods []* AssessmentMethod ) (* Assessment , error ) {
32+ func NewAssessment (requirementId string , description string , applicability []string , procedures []* AssessmentProcedure ) (* Assessment , error ) {
3533 a := & Assessment {
3634 RequirementId : requirementId ,
3735 Description : description ,
3836 Applicability : applicability ,
3937 Result : NotRun ,
40- Methods : methods ,
38+ Procedures : procedures ,
4139 }
4240 err := a .precheck ()
4341 return a , err
4442}
4543
46- // AddMethod queues a new method in the Assessment
47- func (a * Assessment ) AddMethod ( method AssessmentMethod ) {
48- a .Methods = append (a .Methods , & method )
44+ // AddProcedure queues a new Procedure in the Assessment
45+ func (a * Assessment ) AddProcedure ( Procedure AssessmentProcedure ) {
46+ a .Procedures = append (a .Procedures , & Procedure )
4947}
5048
51- func (a * Assessment ) runMethod (targetData interface {}, method * AssessmentMethod ) Result {
52- a .MethodsExecuted ++
53- result , message := method .RunMethod (targetData , a .Changes )
54- a .Result = UpdateAggregateResult (a .Result , result )
55- a .Message = message
56- return result
57- }
58-
59- // Run will execute all steps, halting if any method does not return layer4.Passed.
49+ // Run executes all automated assessment procedures.
6050func (a * Assessment ) Run (targetData interface {}, changesAllowed bool ) Result {
6151 if a .Result != NotRun {
6252 return a .Result
@@ -73,11 +63,15 @@ func (a *Assessment) Run(targetData interface{}, changesAllowed bool) Result {
7363 change .Allow ()
7464 }
7565 }
76- for _ , method := range a .Methods {
77- if a .runMethod (targetData , method ) == Failed {
78- return Failed
66+
67+ for _ , procedure := range a .Procedures {
68+ if procedure .Method == TestMethod {
69+ result := procedure .RunProcedure (targetData , a .Changes )
70+ a .Result = UpdateAggregateResult (a .Result , result )
71+ a .Message = procedure .Message
7972 }
8073 }
74+
8175 a .RunDuration = time .Since (startTime ).String ()
8276 return a .Result
8377}
@@ -118,10 +112,10 @@ func (a *Assessment) RevertChanges() (corrupted bool) {
118112// precheck verifies that the assessment has all the required fields.
119113// It returns an error if the assessment is not valid.
120114func (a * Assessment ) precheck () error {
121- if a .RequirementId == "" || a .Description == "" || a .Applicability == nil || a .Methods == nil || len (a .Applicability ) == 0 || len (a .Methods ) == 0 {
115+ if a .RequirementId == "" || a .Description == "" || a .Applicability == nil || a .Procedures == nil || len (a .Applicability ) == 0 || len (a .Procedures ) == 0 {
122116 message := fmt .Sprintf (
123- "expected all Assessment fields to have a value, but got: requirementId=len(%v), description=len=(%v), applicability=len(%v), methods =len(%v)" ,
124- len (a .RequirementId ), len (a .Description ), len (a .Applicability ), len (a .Methods ),
117+ "expected all Assessment fields to have a value, but got: requirementId=len(%v), description=len=(%v), applicability=len(%v), procedures =len(%v)" ,
118+ len (a .RequirementId ), len (a .Description ), len (a .Applicability ), len (a .Procedures ),
125119 )
126120 a .Result = Unknown
127121 a .Message = message
0 commit comments