* Improve anonymous redaction * Add sqlserver integration test and some default params
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
//go:build detectors && integration
|
|
// +build detectors,integration
|
|
|
|
package jdbc
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"errors"
|
|
"os/exec"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
const (
|
|
sqlServerPass = "Secr3tP@s5w0rd"
|
|
sqlServerUser = "sa"
|
|
sqlServerDatabase = "master"
|
|
)
|
|
|
|
func TestSqlServer(t *testing.T) {
|
|
tests := []struct {
|
|
input string
|
|
wantErr bool
|
|
wantPing bool
|
|
}{
|
|
{
|
|
input: "",
|
|
wantErr: true,
|
|
},
|
|
{
|
|
input: "//odbc:server=localhost;user id=sa;database=master;password=" + sqlServerPass,
|
|
wantPing: true,
|
|
},
|
|
{
|
|
input: "//localhost;database= master;spring.datasource.password=" + sqlServerPass,
|
|
wantPing: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.input, func(t *testing.T) {
|
|
j, err := parseSqlServer(tt.input)
|
|
if tt.wantErr {
|
|
assert.Error(t, err)
|
|
return
|
|
}
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, tt.wantPing, j.ping(context.Background()))
|
|
})
|
|
}
|
|
}
|
|
|
|
var sqlServerDockerHash string
|
|
|
|
func startSqlServer() error {
|
|
cmd := exec.Command(
|
|
"docker", "run", "--rm", "-p", "1433:1433",
|
|
"-e", "ACCEPT_EULA=1",
|
|
"-e", "MSSQL_SA_PASSWORD="+sqlServerPass,
|
|
"-d", "mcr.microsoft.com/azure-sql-edge",
|
|
)
|
|
out, err := cmd.Output()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sqlServerDockerHash = string(bytes.TrimSpace(out))
|
|
select {
|
|
case <-dockerLogLine(sqlServerDockerHash, "EdgeTelemetry starting up"):
|
|
return nil
|
|
case <-time.After(30 * time.Second):
|
|
stopSqlServer()
|
|
return errors.New("timeout waiting for mysql database to be ready")
|
|
}
|
|
}
|
|
|
|
func stopSqlServer() {
|
|
exec.Command("docker", "kill", sqlServerDockerHash).Run()
|
|
}
|