Lint / golangci-lint (push) Waiting to run
Lint / semgrep (push) Waiting to run
Release / Release (push) Waiting to run
Scan for secrets / test (push) Waiting to run
Test / test (push) Waiting to run
Test / test-community (push) Waiting to run
* Fix jdbc detector detecting incomplete conn string and fixed invalid parsing of sql server string * [INS-165] Jdbc detector integration tests fix (#4637) * [INS-165] Fix Jdbc tests and updated the deprecated code
100 lines
2.4 KiB
Go
100 lines
2.4 KiB
Go
//go:build detectors && integration
|
|
// +build detectors,integration
|
|
|
|
package jdbc
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/brianvoe/gofakeit/v7"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/testcontainers/testcontainers-go/modules/mssql"
|
|
logContext "github.com/trufflesecurity/trufflehog/v3/pkg/context"
|
|
)
|
|
|
|
func TestSqlServer(t *testing.T) {
|
|
ctx := context.Background()
|
|
|
|
sqlServerUser := "sa"
|
|
sqlServerPass := gofakeit.Password(true, true, true, false, false, 10)
|
|
sqlServerDB := "master"
|
|
|
|
mssqlContainer, err := mssql.Run(ctx,
|
|
"mcr.microsoft.com/azure-sql-edge",
|
|
mssql.WithAcceptEULA(),
|
|
mssql.WithPassword(sqlServerPass),
|
|
)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
defer mssqlContainer.Terminate(ctx)
|
|
|
|
mssqlHost, err := mssqlContainer.Host(ctx)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
mssqlPort, err := mssqlContainer.MappedPort(ctx, "1433")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
type result struct {
|
|
parseErr bool
|
|
pingOk bool
|
|
pingDeterminate bool
|
|
}
|
|
tests := []struct {
|
|
input string
|
|
want result
|
|
}{
|
|
{
|
|
input: "",
|
|
want: result{parseErr: true},
|
|
},
|
|
{
|
|
input: fmt.Sprintf("//server=%s;port=%s;user id=%s;database=%s;password=%s",
|
|
mssqlHost, mssqlPort.Port(), sqlServerUser, sqlServerDB, sqlServerPass),
|
|
want: result{pingOk: true, pingDeterminate: true},
|
|
},
|
|
{
|
|
input: fmt.Sprintf("//server=badhost;user id=sa;database=master;password=%s", sqlServerPass),
|
|
want: result{pingOk: false, pingDeterminate: false},
|
|
},
|
|
{
|
|
input: fmt.Sprintf("//%s;database=master;spring.datasource.password=%s;port=%s",
|
|
mssqlHost, sqlServerPass, mssqlPort.Port()),
|
|
want: result{pingOk: true, pingDeterminate: true},
|
|
},
|
|
{
|
|
input: fmt.Sprintf("//%s;database=master;spring.datasource.password=badpassword;port=%s", mssqlHost, mssqlPort.Port()),
|
|
want: result{pingOk: false, pingDeterminate: true},
|
|
},
|
|
{
|
|
input: fmt.Sprintf("//%s:%s;databaseName=master;user=%s;password=%s",
|
|
mssqlHost, mssqlPort.Port(), sqlServerUser, sqlServerPass),
|
|
want: result{pingOk: true, pingDeterminate: true},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.input, func(t *testing.T) {
|
|
ctx := logContext.AddLogger(context.Background())
|
|
j, err := ParseSqlServer(ctx, tt.input)
|
|
|
|
if err != nil {
|
|
got := result{parseErr: true}
|
|
assert.Equal(t, tt.want, got)
|
|
return
|
|
}
|
|
|
|
pr := j.ping(context.Background())
|
|
|
|
got := result{pingOk: pr.err == nil, pingDeterminate: pr.determinate}
|
|
assert.Equal(t, tt.want, got)
|
|
})
|
|
}
|
|
}
|