Skip to content

Commit

Permalink
ec test: implement option to write output to a file
Browse files Browse the repository at this point in the history
Signed-off-by: Mark Bestavros <mbestavr@redhat.com>
  • Loading branch information
mbestavros committed Dec 19, 2023
1 parent d7a0017 commit d10ab70
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions cmd/test/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ package test
import (
"encoding/json"
"fmt"
"io"
"os"

"github.com/open-policy-agent/conftest/output"
Expand Down Expand Up @@ -118,6 +119,7 @@ func newTestCommand() *cobra.Command {
"no-fail",
"suppress-exceptions",
"output",
"file",
"parser",
"policy",
"proto-file-dirs",
Expand Down Expand Up @@ -150,6 +152,11 @@ func newTestCommand() *cobra.Command {
return fmt.Errorf("unmarshal parameters: %w", err)
}

outputFilePath, err := cmd.Flags().GetString("file")
if err != nil {
return fmt.Errorf("reading flag: %w", err)
}

Check warning on line 158 in cmd/test/test.go

View check run for this annotation

Codecov / codecov/patch

cmd/test/test.go#L157-L158

Added lines #L157 - L158 were not covered by tests

results, resultsErr := runner.Run(ctx, fileList)
var exitCode int
if runner.FailOnWarn {
Expand All @@ -171,6 +178,13 @@ func newTestCommand() *cobra.Command {
if err != nil {
return appstudioErrorHandler(runner.NoFail, "output results", err)
}

if outputFilePath != "" {
err := os.WriteFile(outputFilePath, reportOutput, 0600)
if err != nil {
return fmt.Errorf("creating output file: %w", err)
}

Check warning on line 186 in cmd/test/test.go

View check run for this annotation

Codecov / codecov/patch

cmd/test/test.go#L182-L186

Added lines #L182 - L186 were not covered by tests
}
fmt.Printf("%s\n", reportOutput)

} else {
Expand All @@ -180,15 +194,32 @@ func newTestCommand() *cobra.Command {
return fmt.Errorf("running test: %w", resultsErr)
}

var outputFile *os.File
if outputFilePath != "" {
outputFile, err = os.Create(outputFilePath)
if err != nil {
return fmt.Errorf("creating output file: %w", err)
}
defer outputFile.Close()

Check warning on line 203 in cmd/test/test.go

View check run for this annotation

Codecov / codecov/patch

cmd/test/test.go#L199-L203

Added lines #L199 - L203 were not covered by tests
}

outputter := output.Get(runner.Output, output.Options{
NoColor: runner.NoColor,
SuppressExceptions: runner.SuppressExceptions,
Tracing: runner.Trace,
JUnitHideMessage: viper.GetBool("junit-hide-message"),
File: outputFile,
})
if err := outputter.Output(results); err != nil {
return fmt.Errorf("output results: %w", err)
}

if outputFilePath != "" {
_, err := io.Copy(outputFile, os.Stdout)
if err != nil {
return fmt.Errorf("copying output file to stdout: %w", err)
}

Check warning on line 221 in cmd/test/test.go

View check run for this annotation

Codecov / codecov/patch

cmd/test/test.go#L218-L221

Added lines #L218 - L221 were not covered by tests
}
}

// When the no-fail parameter is set, there is no need to figure out the error code
Expand Down Expand Up @@ -219,6 +250,7 @@ func newTestCommand() *cobra.Command {
cmd.Flags().String("capabilities", "", "Path to JSON file that can restrict opa functionality against a given policy. Default: all operations allowed")

cmd.Flags().StringP("output", "o", output.OutputStandard, fmt.Sprintf("Output format for conftest results - valid options are: %s", append(output.Outputs(), OutputAppstudio)))
cmd.Flags().String("file", "", "File path to write output to")
cmd.Flags().Bool("junit-hide-message", false, "Do not include the violation message in the JUnit test name")

cmd.Flags().StringSliceP("policy", "p", []string{"policy"}, "Path to the Rego policy files directory")
Expand Down

0 comments on commit d10ab70

Please sign in to comment.