Files
trufflehog/pkg/detectors/jdbc/sqlserver_integration_test.go
Muneeb Ullah Khan 116e717154
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
[INS-243] Fix jdbc detector detecting incomplete connection string and fixed invalid… (#4636)
* 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
2026-01-16 15:18:40 +05:00

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)
})
}
}