github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/formatters/junit_test.go (about)

     1  package formatters
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	defsecTypes "github.com/khulnasoft-lab/defsec/pkg/types"
    11  
    12  	"github.com/khulnasoft-lab/defsec/pkg/severity"
    13  
    14  	"github.com/khulnasoft-lab/defsec/pkg/scan"
    15  
    16  	"github.com/khulnasoft-lab/defsec/pkg/providers"
    17  	"github.com/khulnasoft-lab/defsec/pkg/providers/aws/dynamodb"
    18  
    19  	"github.com/stretchr/testify/assert"
    20  	"github.com/stretchr/testify/require"
    21  )
    22  
    23  var (
    24  	jUnitScanRule = scan.Rule{
    25  		AVDID:       "AVD-AA-9999",
    26  		ShortCode:   "enable-at-rest-encryption",
    27  		Summary:     "summary",
    28  		Explanation: "explanation",
    29  		Impact:      "impact",
    30  		Resolution:  "resolution",
    31  		Provider:    providers.AWSProvider,
    32  		Service:     "dynamodb",
    33  		Links: []string{
    34  			"https://google.com",
    35  		},
    36  		Severity: severity.High,
    37  	}
    38  )
    39  
    40  func Test_JUnit(t *testing.T) {
    41  	want := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?>
    42  <testsuite name="%s" failures="1" tests="1">
    43  	<testcase classname="test.test" name="[aws-dynamodb-enable-at-rest-encryption][HIGH] - Cluster encryption is not enabled." time="0">
    44  		<failure message="Cluster encryption is not enabled." type="">test.test:123&#xA;&#xA;&#xA;&#xA;See https://google.com</failure>
    45  	</testcase>
    46  </testsuite>`, filepath.Base(os.Args[0]))
    47  	buffer := bytes.NewBuffer([]byte{})
    48  	formatter := New().AsJUnit().WithWriter(buffer).Build()
    49  	var results scan.Results
    50  	results.Add("Cluster encryption is not enabled.",
    51  		dynamodb.ServerSideEncryption{
    52  			Metadata: defsecTypes.NewTestMetadata(),
    53  			Enabled:  defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    54  		})
    55  	results.SetRule(jUnitScanRule)
    56  	require.NoError(t, formatter.Output(results))
    57  	assert.Equal(t, want, buffer.String())
    58  }
    59  
    60  func Test_JUnit_skipped(t *testing.T) {
    61  	want := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?>
    62  <testsuite name="%s" failures="0" skipped="1" tests="1">
    63  	<testcase classname="test.test" name="[aws-dynamodb-enable-at-rest-encryption][HIGH] - Cluster encryption is not enabled." time="0">
    64  		<skipped message="Cluster encryption is not enabled."></skipped>
    65  	</testcase>
    66  </testsuite>`, filepath.Base(os.Args[0]))
    67  	buffer := bytes.NewBuffer([]byte{})
    68  	formatter := New().AsJUnit().
    69  		WithWriter(buffer).
    70  		WithIncludeIgnored(true).
    71  		Build()
    72  	var results scan.Results
    73  	results.AddIgnored(
    74  		dynamodb.ServerSideEncryption{
    75  			Metadata: defsecTypes.NewTestMetadata(),
    76  			Enabled:  defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
    77  		},
    78  		"Cluster encryption is not enabled.",
    79  	)
    80  	results.SetRule(jUnitScanRule)
    81  	require.NoError(t, formatter.Output(results))
    82  	assert.Equal(t, want, buffer.String())
    83  }
    84  
    85  func Test_JUnit_passed(t *testing.T) {
    86  	want := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?>
    87  <testsuite name="%s" failures="0" tests="1">
    88  	<testcase classname="test.test" name="[aws-dynamodb-enable-at-rest-encryption][HIGH] - Cluster encryption is not enabled." time="0"></testcase>
    89  </testsuite>`, filepath.Base(os.Args[0]))
    90  	buffer := bytes.NewBuffer([]byte{})
    91  	formatter := New().AsJUnit().
    92  		WithWriter(buffer).
    93  		WithIncludePassed(true).
    94  		Build()
    95  	var results scan.Results
    96  	results.AddPassed(
    97  		dynamodb.ServerSideEncryption{
    98  			Metadata: defsecTypes.NewTestMetadata(),
    99  			Enabled:  defsecTypes.Bool(false, defsecTypes.NewTestMetadata()),
   100  		},
   101  		"Cluster encryption is not enabled.",
   102  	)
   103  	results.SetRule(jUnitScanRule)
   104  	require.NoError(t, formatter.Output(results))
   105  	assert.Equal(t, want, buffer.String())
   106  }