| seo |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| seo_html | <title>Development - ClickVault Documentation</title> <meta name="description" content="Building"> <link rel="canonical" href="https://clickvault.emiliano-go.com/development"> <meta name="robots" content="index,follow"> <meta property="og:type" content="website"> <meta property="og:title" content="Development - ClickVault Documentation"> <meta property="og:description" content="Building"> <meta property="og:url" content="https://clickvault.emiliano-go.com/development"> <meta property="og:image" content="https://clickvault.emiliano-go.com/assets/images/og-image.png"> <meta property="og:image:width" content="1376"> <meta property="og:image:height" content="768"> <meta property="og:image:alt" content="ClickVault documentation"> <meta property="og:site_name" content="ClickVault Documentation"> <meta property="og:locale" content="en_US"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Development - ClickVault Documentation"> <meta name="twitter:description" content="Building"> <meta name="twitter:image" content="https://clickvault.emiliano-go.com/assets/images/og-image.png"> <meta name="twitter:image:alt" content="ClickVault documentation"> <meta name="twitter:site" content="@emiliano_go_"> <script type="application/ld+json"> [ { "@context": "https://schema.org", "@type": "WebPage", "name": "Development - ClickVault Documentation", "url": "https://clickvault.emiliano-go.com/development", "description": "Building", "image": "https://clickvault.emiliano-go.com/assets/images/og-image.png", "publisher": { "@type": "Organization", "name": "Emiliano Gandini Outeda", "logo": "https://clickvault.emiliano-go.com/assets/images/og-image.png" } }, { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Development", "item": "https://clickvault.emiliano-go.com/development" } ] } ] </script> |
make build # bin/clickvault, current OS/arch
make build-linux-amd64 # bin/clickvault-linux-amd64
make build-linux-arm64 # bin/clickvault-linux-arm64
make sha256 # builds linux/amd64 and prints its sha256sumUnit tests mock the database connection using go-sqlmock and do not need
Docker or a running ClickHouse:
make test
# or
go test ./...Integration tests spin up a real ClickHouse container (matching
testdata/docker-compose.yml) with the Vault SDK's Docker test helper,
and drive the full lifecycle:
Initialize- configure the connectionNewUser- create a dynamic user- Verify the user can connect to ClickHouse
DeleteUser- revoke the user- Verify the user can no longer connect
- Repeat
DeleteUserto confirm idempotency UpdateUseron a static-style user with before/after connection checks
Integration tests are gated behind the integration build tag:
go test -tags=integration ./tests/...Docker must be running locally for that command to work.
clickvault/
├── go.mod, go.sum module github.com/emiliano-go/clickvault
├── main.go plugin entrypoint
├── internal/clickvault/
│ ├── clickvault.go ClickvaultPlugin and six dbplugin methods
│ ├── clickvault_test.go unit tests (go-sqlmock)
│ ├── ddl.go all SQL construction and cluster branching
│ └── ddl_test.go table-driven tests for ddl.go
├── testdata/docker-compose.yml single-node ClickHouse for manual testing
├── tests/integration_test.go integration tests against real ClickHouse
├── scripts/setup_vault.sh registers and configures the plugin
└── .github/workflows/ci.yml go vet, go test, build, sha256 artifact