2022-01-19 06:19:08 +00:00
package jiratoken
import (
"context"
"fmt"
"testing"
"time"
"github.com/kylelemons/godebug/pretty"
"github.com/trufflesecurity/trufflehog/pkg/detectors"
"github.com/trufflesecurity/trufflehog/pkg/common"
"github.com/trufflesecurity/trufflehog/pkg/pb/detectorspb"
)
func TestJiraToken_FromChunk ( t * testing . T ) {
ctx , cancel := context . WithTimeout ( context . Background ( ) , time . Second * 5 )
defer cancel ( )
2022-01-19 06:24:42 +00:00
testSecrets , err := common . GetSecret ( ctx , "trufflehog-testing" , "scanners3" )
2022-01-19 06:19:08 +00:00
if err != nil {
t . Fatalf ( "could not get test secrets from GCP: %s" , err )
}
token := testSecrets . MustGetField ( "JIRA_TOKEN" )
inactiveToken := testSecrets . MustGetField ( "JIRA_INACTIVE" )
email := testSecrets . MustGetField ( "JIRA_EMAIL" )
domain := testSecrets . MustGetField ( "JIRA_DOMAIN" )
type args struct {
ctx context . Context
data [ ] byte
verify bool
}
tests := [ ] struct {
name string
s Scanner
args args
want [ ] detectors . Result
wantErr bool
} {
{
name : "found, verified" ,
s : Scanner { } ,
args : args {
ctx : context . Background ( ) ,
data : [ ] byte ( fmt . Sprintf ( "You can find a jira secret %s within jira %s with jira %s" , token , email , domain ) ) ,
verify : true ,
} ,
want : [ ] detectors . Result {
{
DetectorType : detectorspb . DetectorType_JiraToken ,
Verified : true ,
} ,
} ,
wantErr : false ,
} ,
{
name : "found, unverified" ,
s : Scanner { } ,
args : args {
ctx : context . Background ( ) ,
data : [ ] byte ( fmt . Sprintf ( "You can find a jira secret %s within jira %s but not jira %s valid" , inactiveToken , email , domain ) ) , // the secret would satisfy the regex but not pass validation
verify : true ,
} ,
want : [ ] detectors . Result {
{
DetectorType : detectorspb . DetectorType_JiraToken ,
Verified : false ,
} ,
} ,
wantErr : false ,
} ,
{
name : "not found" ,
s : Scanner { } ,
args : args {
ctx : context . Background ( ) ,
data : [ ] byte ( "You cannot find the secret within" ) ,
verify : true ,
} ,
want : nil ,
wantErr : false ,
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
s := Scanner { }
got , err := s . FromData ( tt . args . ctx , tt . args . verify , tt . args . data )
if ( err != nil ) != tt . wantErr {
t . Errorf ( "JiraToken.FromData() error = %v, wantErr %v" , err , tt . wantErr )
return
}
for i := range got {
if len ( got [ i ] . Raw ) == 0 {
t . Fatalf ( "no raw secret present: \n %+v" , got [ i ] )
}
got [ i ] . Raw = nil
}
if diff := pretty . Compare ( got , tt . want ) ; diff != "" {
t . Errorf ( "JiraToken.FromData() %s diff: (-got +want)\n%s" , tt . name , diff )
}
} )
}
}
func BenchmarkFromData ( benchmark * testing . B ) {
ctx := context . Background ( )
s := Scanner { }
for name , data := range detectors . MustGetBenchmarkData ( ) {
benchmark . Run ( name , func ( b * testing . B ) {
for n := 0 ; n < b . N ; n ++ {
s . FromData ( ctx , false , data )
}
} )
}
}