github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/protecode/analysis_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package protecode
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  )
    11  
    12  func TestIsSevere(t *testing.T) {
    13  	t.Run("with severe cvss v3 vulnerability", func(t *testing.T) {
    14  		// init
    15  		vulnerability := Vulnerability{
    16  			Exact:  true,
    17  			Triage: []Triage{},
    18  			Vuln: Vuln{
    19  				Cve:        "Cve2",
    20  				Cvss:       "8.0",
    21  				Cvss3Score: "7.3",
    22  			},
    23  		}
    24  		// test && assert
    25  		assert.True(t, isSevere(vulnerability))
    26  	})
    27  	t.Run("with severe cvss v2 vulnerability", func(t *testing.T) {
    28  		// init
    29  		vulnerability := Vulnerability{
    30  			Exact:  true,
    31  			Triage: []Triage{},
    32  			Vuln: Vuln{
    33  				Cve:        "Cve2",
    34  				Cvss:       "8.0",
    35  				Cvss3Score: "0.0",
    36  			},
    37  		}
    38  		// test && assert
    39  		assert.True(t, isSevere(vulnerability))
    40  	})
    41  	t.Run("with non-severe cvss v3 vulnerability", func(t *testing.T) {
    42  		// init
    43  		vulnerability := Vulnerability{
    44  			Exact:  true,
    45  			Triage: []Triage{},
    46  			Vuln: Vuln{
    47  				Cve:        "Cve2",
    48  				Cvss:       "4.0",
    49  				Cvss3Score: "4.0",
    50  			},
    51  		}
    52  		// test && assert
    53  		assert.False(t, isSevere(vulnerability))
    54  	})
    55  	t.Run("with non-severe cvss v2 vulnerability", func(t *testing.T) {
    56  		// init
    57  		vulnerability := Vulnerability{
    58  			Exact:  true,
    59  			Triage: []Triage{},
    60  			Vuln: Vuln{
    61  				Cve:        "Cve2",
    62  				Cvss:       "4.0",
    63  				Cvss3Score: "0.0",
    64  			},
    65  		}
    66  		// test && assert
    67  		assert.False(t, isSevere(vulnerability))
    68  	})
    69  	t.Run("with non-severe vulnerability with missing cvss v3 rating", func(t *testing.T) {
    70  		// init
    71  		vulnerability := Vulnerability{
    72  			Exact:  true,
    73  			Triage: []Triage{},
    74  			Vuln: Vuln{
    75  				Cve:        "Cve2",
    76  				Cvss:       "4.0",
    77  				Cvss3Score: "",
    78  			},
    79  		}
    80  		// test && assert
    81  		assert.False(t, isSevere(vulnerability))
    82  	})
    83  }
    84  
    85  func TestHasSevereVulnerabilities(t *testing.T) {
    86  	severeV3 := Vulnerability{Exact: true, Triage: []Triage{}, Vuln: Vuln{Cve: "Cve1", Cvss: "4.0", Cvss3Score: "8.0"}}
    87  	severeV2 := Vulnerability{Exact: true, Triage: []Triage{}, Vuln: Vuln{Cve: "Cve2", Cvss: "8.0", Cvss3Score: "0.0"}}
    88  	nonSevere1 := Vulnerability{Exact: true, Triage: []Triage{}, Vuln: Vuln{Cve: "Cve3", Cvss: "4.0", Cvss3Score: "4.0"}}
    89  	nonSevere2 := Vulnerability{Exact: true, Triage: []Triage{}, Vuln: Vuln{Cve: "Cve4", Cvss: "4.0", Cvss3Score: "4.0"}}
    90  	excluded := Vulnerability{Exact: true, Triage: []Triage{}, Vuln: Vuln{Cve: "Cve5", Cvss: "8.0", Cvss3Score: "8.0"}}
    91  	triaged := Vulnerability{Exact: true, Triage: []Triage{{ID: 1}}, Vuln: Vuln{Cve: "Cve6", Cvss: "8.0", Cvss3Score: "8.0"}}
    92  	historic := Vulnerability{Exact: false, Triage: []Triage{}, Vuln: Vuln{Cve: "Cve7", Cvss: "8.0", Cvss3Score: "8.0"}}
    93  
    94  	t.Run("with severe v3 vulnerabilities", func(t *testing.T) {
    95  		// init
    96  		data := Result{Components: []Component{{Vulns: []Vulnerability{nonSevere1, severeV3}}}}
    97  		// test && assert
    98  		assert.True(t, HasSevereVulnerabilities(data, ""))
    99  	})
   100  	t.Run("with severe v2 vulnerabilities", func(t *testing.T) {
   101  		// init
   102  		data := Result{Components: []Component{{Vulns: []Vulnerability{nonSevere1, severeV2}}}}
   103  		// test && assert
   104  		assert.True(t, HasSevereVulnerabilities(data, ""))
   105  	})
   106  	t.Run("without severe vulnerabilities", func(t *testing.T) {
   107  		// init
   108  		data := Result{Components: []Component{{Vulns: []Vulnerability{nonSevere1, nonSevere2}}}}
   109  		// test && assert
   110  		assert.False(t, HasSevereVulnerabilities(data, ""))
   111  	})
   112  	t.Run("with historic vulnerabilities", func(t *testing.T) {
   113  		// init
   114  		data := Result{Components: []Component{{Vulns: []Vulnerability{nonSevere1, triaged}}}}
   115  		// test && assert
   116  		assert.False(t, HasSevereVulnerabilities(data, ""))
   117  	})
   118  	t.Run("with excluded vulnerabilities", func(t *testing.T) {
   119  		// init
   120  		data := Result{Components: []Component{{Vulns: []Vulnerability{nonSevere1, excluded}}}}
   121  		// test && assert
   122  		assert.False(t, HasSevereVulnerabilities(data, "Cve5,Cve14"))
   123  	})
   124  	t.Run("with historic vulnerabilities", func(t *testing.T) {
   125  		// init
   126  		data := Result{Components: []Component{{Vulns: []Vulnerability{nonSevere1, historic}}}}
   127  		// test && assert
   128  		assert.False(t, HasSevereVulnerabilities(data, ""))
   129  	})
   130  }