modulepackage
0.0.0-20241215003426-b9d2d3addde3
Repository: https://github.com/tullo/crdb.git
Documentation: pkg.go.dev
# README
crdb
Testserver
The testserver package helps running CRDB binary with tests.
import "github.com/cockroachdb/cockroach-go/v2/testserver"
import "testing"
import "time"
func TestRunServer(t *testing.T) {
ts, err := testserver.NewTestServer()
if err != nil {
t.Fatal(err)
}
defer ts.Stop()
db, err := sql.Open("postgres", ts.PGURL().String())
if err != nil {
t.Fatal(err)
}
}
Integration Tests
CRDB Docker Container
Launches a single node cockroachdb in a docker container using the github.com/ory/dockertest/v3/docker package and executes the test function.
# 1. Pulls docker image cockroachdb/cockroach:v21.2.3
# 2. Executes TestWithDockerContainer test func located in roach_test.go
go test -v -timeout 30s -run ^TestWithDockerContainer$ github.com/tullo/crdb
=== RUN TestWithDockerContainer
roach_test.go:58: ping postgresql://[email protected]:26257?sslmode=disable
roach_test.go:58: ping postgresql://[email protected]:26257?sslmode=disable
roach_test.go:73: Stats {MaxOpenConnections:0 OpenConnections:1 InUse:0 Idle:1 WaitCount:0 WaitDuration:0s MaxIdleClosed:0 MaxIdleTimeClosed:0 MaxLifetimeClosed:0}
roach_test.go:140: Balances:
roach_test.go:146: 1 1000
roach_test.go:146: 2 250
roach_test.go:140: Balances: after tx
roach_test.go:146: 1 900
roach_test.go:146: 2 350
--- PASS: TestWithDockerContainer (1.55s)
PASS
ok github.com/tullo/crdb 1.560s
CRDB Test Server
Launches a single node cockroachdb using the cockroach-go/v2/testserver package and executes the test function.
# 1. Pulls the latest cockroach binary.
# 2. Executes TestWithTestServer test func located in roach_test.go
go test -v -timeout 30s -run ^TestWithTestServer$ github.com/tullo/crdb
=== RUN TestWithTestServer
2021/12/23 16:25:35 GET https://binaries.cockroachdb.com/cockroach-v21.2.3.linux-amd64.tgz
2021/12/23 16:25:35 Using automatically-downloaded binary: /tmp/cockroach-21-2-3
roach_test.go:184: Balances:
roach_test.go:190: 1 1000
roach_test.go:190: 2 250
roach_test.go:184: Balances: after tx
roach_test.go:190: 1 900
roach_test.go:190: 2 350
--- PASS: TestWithTestServer (0.75s)
PASS
ok github.com/tullo/crdb 0.758s
Migrations Test
Launches a single node cockroachdb in a docker container using the github.com/golang-migrate/migrate/v4/dktesting package and is applying all up migrations when executing the test function using github.com/golang-migrate/migrate/v4.
# 1. Pulls docker image cockroachdb/cockroach:v21.2.2
# 2. Processes migration files (18) located under db/migrations
# by applying all up migrations.
go test -v -timeout 30s -run ^TestMigrate$ github.com/tullo/crdb
=== RUN TestMigrate
=== RUN TestMigrate/cockroachdb/cockroach:v21.2.2
=== PAUSE TestMigrate/cockroachdb/cockroach:v21.2.2
=== CONT TestMigrate/cockroachdb/cockroach:v21.2.2
dktest.go:36: Pulling image: cockroachdb/cockroach:v21.2.2
dktest.go:80: Created container: ...
dktest.go:85: Started container: ...
dktest.go:95: Inspected container: ...
dktest.go:130: Stopped container: ...
dktest.go:136: Removed container: ...
--- PASS: TestMigrate (0.00s)
--- PASS: TestMigrate/cockroachdb/cockroach:v21.2.2 (7.52s)
PASS
ok github.com/tullo/crdb 7.527s
Secure Mode
Start a local secure db node with make secure-node
.
Run make secure-sql-insert
to create db objects and grant privileges.
Check grants:
-- cockroach sql --certs-dir=certs --database bank -e 'SHOW GRANTS ON TABLE accounts;'
database_name | schema_name | table_name | grantee | privilege_type | is_grantable
----------------+-------------+------------+---------+----------------+---------------
bank | public | accounts | admin | ALL | true
bank | public | accounts | johndoe | INSERT | false
bank | public | accounts | johndoe | SELECT | false
bank | public | accounts | johndoe | UPDATE | false
bank | public | accounts | root | ALL | true
(5 rows)
Secure Client Connection
Client code connects using the generated certificates:
// driver-pgx/main.go
certs := "/path/to/certs%2F"
crt := fmt.Sprintf("sslcert=%sclient.johndoe.crt", certs)
key := fmt.Sprintf("sslkey=%sclient.johndoe.key", certs)
ca := fmt.Sprintf("sslrootcert=%sca.crt", certs)
secure := fmt.Sprintf("postgresql://johndoe@localhost:26257/bank?%s&%s&%s&sslmode=verify-full", crt, key, ca)
config, err := pgx.ParseConfig(secure)
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author