Commit 21d9faa1 authored by Roy Hadad's avatar Roy Hadad
Browse files

feat: add --no-record flag

parent 485df674
Showing with 37 additions and 5 deletions
+37 -5
......@@ -51,6 +51,7 @@ type TestCommandFlags struct {
PolicyName string
SchemaLocations []string
PolicyConfig string
NoRecord bool
}
// TestCommandFlags constructor
......@@ -116,6 +117,7 @@ type TestCommandData struct {
IgnoreMissingSchemas bool
OnlyK8sFiles bool
Verbose bool
NoRecord bool
Policy policy_factory.Policy
SchemaLocations []string
Token string
......@@ -227,6 +229,7 @@ func (flags *TestCommandFlags) AddFlags(cmd *cobra.Command) {
cmd.Flags().StringVar(&flags.PolicyConfig, "policy-config", "", "Path for local policies configuration file")
cmd.Flags().BoolVar(&flags.OnlyK8sFiles, "only-k8s-files", false, "Evaluate only valid yaml files with the properties 'apiVersion' and 'kind'. Ignore everything else")
cmd.Flags().BoolVar(&flags.Verbose, "verbose", false, "Display 'How to Fix' link")
cmd.Flags().BoolVar(&flags.NoRecord, "no-record", false, "Don't send records to the dashboard")
// kubeconform flag
cmd.Flags().StringArrayVarP(&flags.SchemaLocations, "schema-location", "", []string{}, "Override schemas location search path (can be specified multiple times)")
......@@ -272,6 +275,7 @@ func GenerateTestCommandData(testCommandFlags *TestCommandFlags, localConfigCont
IgnoreMissingSchemas: testCommandFlags.IgnoreMissingSchemas,
OnlyK8sFiles: testCommandFlags.OnlyK8sFiles,
Verbose: testCommandFlags.Verbose,
NoRecord: testCommandFlags.NoRecord,
Policy: policy,
SchemaLocations: testCommandFlags.SchemaLocations,
Token: localConfigContent.Token,
......@@ -449,6 +453,15 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm
return emptyEvaluationResultData, err
}
if prerunData.NoRecord {
return EvaluationResultData{
ValidationManager: validationManager,
RulesCount: policyCheckResultData.RulesCount,
FormattedResults: policyCheckResultData.FormattedResults,
PromptMessage: "",
}, nil
}
var failedYamlFiles []string
if validationManager.InvalidYamlFilesCount() > 0 {
for _, invalidYamlFile := range validationManager.InvalidYamlFiles() {
......@@ -478,7 +491,6 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm
FailedK8sFiles: failedK8sFiles,
PolicyCheckResults: policyCheckResultData.RawResults,
}
sendEvaluationResultsResponse, err := ctx.Evaluator.SendEvaluationResult(evaluationRequestData)
if err != nil {
......@@ -492,7 +504,7 @@ func evaluate(ctx *TestCommandContext, filesPaths []string, prerunData *TestComm
PromptMessage: sendEvaluationResultsResponse.PromptMessage,
}
return evaluationResultData, err
return evaluationResultData, nil
}
func wereViolationsFound(validationManager *ValidationManager, results *evaluation.FormattedResults) bool {
......
......@@ -164,6 +164,15 @@ func (p *PrinterMock) SetTheme(theme *printer.Theme) {
p.Called(theme)
}
type CliClientMock struct {
mock.Mock
}
func (c *CliClientMock) RequestEvaluationPrerunData(token string) (*cliClient.EvaluationPrerunDataResponse, error) {
args := c.Called(token)
return args.Get(0).(*cliClient.EvaluationPrerunDataResponse), nil
}
type ReaderMock struct {
mock.Mock
}
......@@ -193,6 +202,7 @@ var mockedEvaluator *mockEvaluator
var localConfigMock *LocalConfigMock
var messagerMock *mockMessager
var readerMock *ReaderMock
var mockedCliClient *CliClientMock
func pathFromRoot(path string) string {
_, filename, _, _ := runtime.Caller(0)
......@@ -635,7 +645,6 @@ func setup() {
mockedEvaluator = &mockEvaluator{}
mockedEvaluator.On("Evaluate", mock.Anything).Return(policyCheckResultData, nil)
mockedEvaluator.On("SendEvaluationResult", mock.Anything).Return(sendEvaluationResultsResponse, nil)
mockedEvaluator.On("RequestEvaluationPrerunData", mock.Anything).Return(prerunData, nil)
messagerMock = &mockMessager{}
messagerMock.On("LoadVersionMessages", mock.Anything)
......@@ -673,6 +682,9 @@ func setup() {
localConfigMock = &LocalConfigMock{}
localConfigMock.On("GetLocalConfiguration").Return(&localConfig.LocalConfig{Token: "134kh"}, nil)
mockedCliClient = &CliClientMock{}
mockedCliClient.On("RequestEvaluationPrerunData", mock.Anything).Return(prerunData, nil)
ctx = &TestCommandContext{
K8sValidator: k8sValidatorMock,
Evaluator: mockedEvaluator,
......@@ -681,6 +693,7 @@ func setup() {
Printer: printerMock,
Reader: readerMock,
FilesExtractor: filesExtractorMock,
CliClient: mockedCliClient,
}
testingPolicy, _ = policy_factory.CreatePolicy(prerunData.PoliciesJson, "", prerunData.RegistrationURL)
......@@ -690,6 +703,7 @@ func TestTestCommandFlagsValidation(t *testing.T) {
setup()
test_testCommand_output_flags_validation(t, ctx)
test_testCommand_version_flags_validation(t, ctx)
test_testCommand_no_record_flag(t, ctx)
}
func TestTestCommandEmptyDir(t *testing.T) {
......@@ -812,7 +826,7 @@ func test_testCommand_output_flags_validation(t *testing.T, ctx *TestCommandCont
values := []string{"Simple", "Json", "Yaml", "Xml", "invalid", "113", "true"}
for _, value := range values {
err := executeTestCommand(ctx, []string{"test", "8/*", "--output=" + value})
err := executeTestCommand(ctx, []string{"8/*", "--output=" + value})
expectedErrorStr := "Invalid --output option - \"" + value + "\"\n" +
"Valid output values are - simple, yaml, json, xml\n"
assert.EqualError(t, err, expectedErrorStr)
......@@ -829,7 +843,7 @@ func test_testCommand_version_flags_validation(t *testing.T, ctx *TestCommandCon
values := []string{"1", "1.15", "1.15.", "1.15.0.", "1.15.0.1", "1..15.0", "str.12.bool"}
for _, value := range values {
err := executeTestCommand(ctx, []string{"test", "8/*", "--schema-version=" + value})
err := executeTestCommand(ctx, []string{"8/*", "--schema-version=" + value})
assert.EqualError(t, err, getExpectedErrorStr(value))
}
......@@ -838,6 +852,12 @@ func test_testCommand_version_flags_validation(t *testing.T, ctx *TestCommandCon
assert.NoError(t, err)
}
func test_testCommand_no_record_flag(t *testing.T, ctx *TestCommandContext) {
err := executeTestCommand(ctx, []string{"8/*", "--no-record"})
mockedEvaluator.AssertNotCalled(t, "SendEvaluationResult")
assert.Equal(t, ViolationsFoundError, err)
}
func newFilesConfigurationsChan(path string) chan *extractor.FileConfigurations {
filesConfigurationsChan := make(chan *extractor.FileConfigurations, 1)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment