Files
trufflehog/pkg/detectors/jdbc/sqlserver_integration_test.go

99 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"
"github.com/testcontainers/testcontainers-go/modules/mssql"
)
func TestSqlServer(t *testing.T) {
ctx := context.Background()
sqlServerUser := "sa"
sqlServerPass := gofakeit.Password(true, true, true, false, false, 10)
sqlServerDB := "master"
mssqlContainer, err := mssql.RunContainer(ctx,
testcontainers.WithImage("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: "//server=badhost;user id=sa;database=master;password=",
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) {
j, err := parseSqlServer(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)
})
}
}