Skip to content

Latest commit

 

History

History
131 lines (116 loc) · 5.68 KB

File metadata and controls

131 lines (116 loc) · 5.68 KB
seo
title canonical robots og twitter description schema_jsonld
Development - ClickVault Documentation
index,follow
type title description url image image:width image:height image:alt site_name locale
website
Development - ClickVault Documentation
Building
1376
768
ClickVault documentation
ClickVault Documentation
en_US
card title description image image:alt site
summary_large_image
Development - ClickVault Documentation
Building
ClickVault documentation
@emiliano_go_
Building
@context @type name url description image publisher
WebPage
Development - ClickVault Documentation
Building
@type name logo
Organization
Emiliano Gandini Outeda
@context @type itemListElement
BreadcrumbList
@type position name item
ListItem
1
Development
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>

Development

Building

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 sha256sum

Testing

Unit tests

Unit tests mock the database connection using go-sqlmock and do not need Docker or a running ClickHouse:

make test
# or
go test ./...

Integration tests

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:

  1. Initialize - configure the connection
  2. NewUser - create a dynamic user
  3. Verify the user can connect to ClickHouse
  4. DeleteUser - revoke the user
  5. Verify the user can no longer connect
  6. Repeat DeleteUser to confirm idempotency
  7. UpdateUser on 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.

Repository layout

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