mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-26 10:15:39 -06:00
9a597feb2e
Another annoyance removed :P Signed-off-by: Anders Eknert <anders@eknert.com>
272 lines
5.6 KiB
Go
272 lines
5.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/open-policy-agent/opa/util/test"
|
|
)
|
|
|
|
const formatted = `package test
|
|
|
|
p {
|
|
a == 1
|
|
true
|
|
1 + 3
|
|
}
|
|
`
|
|
|
|
const unformatted = `
|
|
package test
|
|
|
|
p { a == 1; true
|
|
1 + 3
|
|
}
|
|
|
|
|
|
`
|
|
|
|
func TestFmtFormatFile(t *testing.T) {
|
|
params := fmtCommandParams{}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": unformatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %s", err)
|
|
}
|
|
|
|
actual := stdout.String()
|
|
if actual != formatted {
|
|
t.Fatalf("Expected:%s\n\nGot:\n%s\n\n", formatted, actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFormatFileNoChanges(t *testing.T) {
|
|
params := fmtCommandParams{}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": formatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %s", err)
|
|
}
|
|
|
|
actual := stdout.String()
|
|
if actual != formatted {
|
|
t.Fatalf("Expected:%s\n\nGot:\n%s\n\n", formatted, actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFailFormatFileNoChanges(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
fail: true,
|
|
diff: true,
|
|
}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": formatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
|
|
actual := stdout.String()
|
|
if len(actual) > 0 {
|
|
t.Fatalf("Expected no output, got:\n%v\n\n", actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFormatFileDiff(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
diff: true,
|
|
}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": formatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %s", err)
|
|
}
|
|
|
|
actual := stdout.String()
|
|
|
|
if len(actual) > 0 {
|
|
t.Fatalf("Expected no output, got:\n%s\n\n", actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFormatFileList(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
list: true,
|
|
}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": formatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %s", err)
|
|
}
|
|
|
|
actual := strings.TrimSpace(stdout.String())
|
|
|
|
if len(actual) > 0 {
|
|
t.Fatalf("Expected no output, got:\n%s\n\n", actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFailFormatFileList(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
fail: true,
|
|
list: true,
|
|
}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": formatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
|
|
actual := strings.TrimSpace(stdout.String())
|
|
if len(actual) > 0 {
|
|
t.Fatalf("Expected no output, got:\n%v\n\n", actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFailFormatFileChangesList(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
fail: true,
|
|
list: true,
|
|
}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": unformatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err == nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
|
|
actual := strings.TrimSpace(stdout.String())
|
|
if len(actual) == 0 {
|
|
t.Fatalf("Expected output, got:\n%v\n\n", actual)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFailFileNoChanges(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
fail: true,
|
|
}
|
|
|
|
files := map[string]string{
|
|
"policy.rego": formatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, io.Discard, policyFile, info, err)
|
|
if err != nil {
|
|
t.Fatalf("Expected error but did not receive one")
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFailFileChanges(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
fail: true,
|
|
}
|
|
|
|
files := map[string]string{
|
|
"policy.rego": unformatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, io.Discard, policyFile, info, err)
|
|
if err == nil {
|
|
t.Fatalf("Unexpected error: %s", err)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestFmtFailFileChangesDiff(t *testing.T) {
|
|
params := fmtCommandParams{
|
|
diff: true,
|
|
fail: true,
|
|
}
|
|
var stdout bytes.Buffer
|
|
|
|
files := map[string]string{
|
|
"policy.rego": unformatted,
|
|
}
|
|
|
|
test.WithTempFS(files, func(path string) {
|
|
policyFile := filepath.Join(path, "policy.rego")
|
|
info, err := os.Stat(policyFile)
|
|
err = formatFile(¶ms, &stdout, policyFile, info, err)
|
|
if err == nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
|
|
actual := strings.TrimSpace(stdout.String())
|
|
if len(actual) == 0 {
|
|
t.Fatalf("Expected output, got:\n%v\n\n", actual)
|
|
}
|
|
})
|
|
}
|