Skip to content

Commit

Permalink
Add policy evaluation statuses and timestamps + minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
mrinalirao committed Nov 10, 2022
1 parent f51eb43 commit 359a32e
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 24 deletions.
3 changes: 2 additions & 1 deletion helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -633,7 +633,8 @@ func createPolicyWithOptions(t *testing.T, client *Client, org *Organization, op
Enforce: []*EnforcementOptions{
{
Path: String(path),
Mode: opts.Enforce[0].Mode},
Mode: opts.Enforce[0].Mode,
},
},
}

Expand Down
37 changes: 30 additions & 7 deletions policy_evaluation.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,20 @@ import (
// Compile-time proof of interface implementation.
var _ PolicyEvaluations = (*policyEvaluation)(nil)

// PolicyEvaluationStatus is an enum that represents all possible statuses for a policy evaluation
type PolicyEvaluationStatus string

const (
PolicyEvaluationPassed PolicyEvaluationStatus = "passed"
PolicyEvaluationFailed PolicyEvaluationStatus = "failed"
PolicyEvaluationPending PolicyEvaluationStatus = "pending"
PolicyEvaluationRunning PolicyEvaluationStatus = "running"
PolicyEvaluationUnreachable PolicyEvaluationStatus = "unreachable"
PolicyEvaluationOverridden PolicyEvaluationStatus = "overridden"
PolicyEvaluationCanceled PolicyEvaluationStatus = "canceled"
PolicyEvaluationErrored PolicyEvaluationStatus = "errored"
)

// PolicyResultCount represents the count of the policy results
type PolicyResultCount struct {
AdvisoryFailed int `jsonapi:"attr,advisory-failed"`
Expand All @@ -24,15 +38,24 @@ type PolicyAttachable struct {
Type string `jsonapi:"attr,type"`
}

// PolicyEvaluationStatusTimestamps represents the set of timestamps recorded for a policy evaluation
type PolicyEvaluationStatusTimestamps struct {
ErroredAt time.Time `jsonapi:"attr,errored-at,rfc3339"`
RunningAt time.Time `jsonapi:"attr,running-at,rfc3339"`
CanceledAt time.Time `jsonapi:"attr,canceled-at,rfc3339"`
FailedAt time.Time `jsonapi:"attr,failed-at,rfc3339"`
PassedAt time.Time `jsonapi:"attr,passed-at,rfc3339"`
}

// PolicyEvaluation represents the policy evaluations that are part of the task stage.
type PolicyEvaluation struct {
ID string `jsonapi:"primary,policy-evaluations"`
Status TaskResultStatus `jsonapi:"attr,status"`
PolicyKind PolicyKind `jsonapi:"attr,policy-kind"`
StatusTimestamps TaskResultStatusTimestamps `jsonapi:"attr,status-timestamps"`
ResultCount *PolicyResultCount `jsonapi:"attr,result-count"`
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
UpdatedAt time.Time `jsonapi:"attr,updated-at,iso8601"`
ID string `jsonapi:"primary,policy-evaluations"`
Status PolicyEvaluationStatus `jsonapi:"attr,status"`
PolicyKind PolicyKind `jsonapi:"attr,policy-kind"`
StatusTimestamps PolicyEvaluationStatusTimestamps `jsonapi:"attr,status-timestamps"`
ResultCount *PolicyResultCount `jsonapi:"attr,result-count"`
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
UpdatedAt time.Time `jsonapi:"attr,updated-at,iso8601"`

// The task stage this evaluation belongs to
TaskStage *PolicyAttachable `jsonapi:"relation,policy-attachable"`
Expand Down
26 changes: 13 additions & 13 deletions policy_evaluation_beta_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func TestPolicyEvaluationList_Beta(t *testing.T) {

require.NotEmpty(t, taskStageList.Items)
assert.NotEmpty(t, taskStageList.Items[0].ID)
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluation))
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluations))

polEvaluation, err := client.PolicyEvaluations.List(ctx, taskStageList.Items[0].ID, nil)
require.NoError(t, err)
Expand Down Expand Up @@ -104,10 +104,10 @@ func TestPolicySetOutcomeList_Beta(t *testing.T) {

require.NotEmpty(t, taskStageList.Items)
assert.NotEmpty(t, taskStageList.Items[0].ID)
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluation))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluation[0].ID))
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluations))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluations[0].ID))

polEvaluationID := taskStageList.Items[0].PolicyEvaluation[0].ID
polEvaluationID := taskStageList.Items[0].PolicyEvaluations[0].ID

polSetOutcomesList, err := client.PolicySetOutcomes.List(ctx, polEvaluationID, nil)
require.NoError(t, err)
Expand All @@ -124,10 +124,10 @@ func TestPolicySetOutcomeList_Beta(t *testing.T) {

require.NotEmpty(t, taskStageList.Items)
assert.NotEmpty(t, taskStageList.Items[0].ID)
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluation))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluation[0].ID))
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluations))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluations[0].ID))

polEvaluationID := taskStageList.Items[0].PolicyEvaluation[0].ID
polEvaluationID := taskStageList.Items[0].PolicyEvaluations[0].ID

opts := &PolicySetOutcomeListOptions{
Filter: map[string]PolicySetOutcomeListFilter{
Expand All @@ -153,10 +153,10 @@ func TestPolicySetOutcomeList_Beta(t *testing.T) {

require.NotEmpty(t, taskStageList.Items)
assert.NotEmpty(t, taskStageList.Items[0].ID)
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluation))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluation[0].ID))
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluations))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluations[0].ID))

polEvaluationID := taskStageList.Items[0].PolicyEvaluation[0].ID
polEvaluationID := taskStageList.Items[0].PolicyEvaluations[0].ID

opts := &PolicySetOutcomeListOptions{
Filter: map[string]PolicySetOutcomeListFilter{
Expand Down Expand Up @@ -216,10 +216,10 @@ func TestPolicySetOutcomeRead_Beta(t *testing.T) {

require.NotEmpty(t, taskStageList.Items)
assert.NotEmpty(t, taskStageList.Items[0].ID)
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluation))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluation[0].ID))
assert.Equal(t, 1, len(taskStageList.Items[0].PolicyEvaluations))
assert.NotEmpty(t, 1, len(taskStageList.Items[0].PolicyEvaluations[0].ID))

polEvaluationID := taskStageList.Items[0].PolicyEvaluation[0].ID
polEvaluationID := taskStageList.Items[0].PolicyEvaluations[0].ID

polSetOutcomesList, err := client.PolicySetOutcomes.List(ctx, polEvaluationID, nil)
require.NoError(t, err)
Expand Down
6 changes: 3 additions & 3 deletions task_stages.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ type TaskStage struct {
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
UpdatedAt time.Time `jsonapi:"attr,updated-at,iso8601"`

Run *Run `jsonapi:"relation,run"`
TaskResults []*TaskResult `jsonapi:"relation,task-results"`
PolicyEvaluation []*PolicyEvaluation `jsonapi:"relation,policy-evaluations"`
Run *Run `jsonapi:"relation,run"`
TaskResults []*TaskResult `jsonapi:"relation,task-results"`
PolicyEvaluations []*PolicyEvaluation `jsonapi:"relation,policy-evaluations"`
}

// TaskStageList represents a list of task stages
Expand Down

0 comments on commit 359a32e

Please sign in to comment.