3.2 KiB
Development
Module: forge.lthn.ai/core/go-netops
Prerequisites
| Tool | Version | Notes |
|---|---|---|
| Go | 1.25+ | Module uses go 1.25.5 |
| core/go | local | replace directive in go.mod |
The go.mod contains a replace directive pointing at ../go for the
forge.lthn.ai/core/go dependency. Ensure the core/go repository is
checked out alongside this one (the standard workspace layout handles this).
Build and Test
# Run all tests
go test ./...
# Race detector (required before commit)
go test -race ./...
# Verbose output
go test -v ./...
# Single test
go test -v -run TestResolveConfig ./unifi/
# Coverage
go test -cover ./...
# Vet
go vet ./...
Test Patterns
Tests use net/http/httptest to mock the UniFi controller API. The mock
server returns minimal JSON responses ({"meta":{"rc":"ok"}, "data": []})
sufficient for the unpoller SDK to initialise without error.
Config Tests
Config tests isolate the environment by:
- Clearing all
UNIFI_*andCORE_CONFIG_UNIFI_*environment variables - Using
t.Setenvfor scoped variable injection - Using
t.TempDir()asHOMEto avoid polluting real config
What Is Tested
| Area | Coverage | Notes |
|---|---|---|
| Client creation | Yes | New, insecure true/false, invalid URL |
| Config resolve | Yes | Defaults, env vars, flags, priority order |
| NewFromConfig | Yes | Success path, missing credentials |
| SaveConfig | Yes | Round-trip save and re-resolve |
What Is Not Tested
The query methods (GetClients, GetDevices, GetDeviceList, GetNetworks,
GetRoutes, GetSites) require a live or fully-mocked UniFi controller and
are not covered by unit tests. Current coverage is 39%.
Coverage
ok forge.lthn.ai/core/go-netops/unifi coverage: 39.0% of statements
Coverage is concentrated on the config resolution and client construction paths. The query methods delegate to the unpoller SDK and would require integration tests against a real or emulated controller to cover meaningfully.
Coding Standards
- Language: UK English throughout (comments, docs, commit messages)
- Formatting:
gofmt(enforced by Go toolchain) - Linting:
go vet ./...must pass before commit - Race detector:
go test -race ./...must pass before commit - Commit convention: Conventional Commits
Examples:type(scope): descriptionfeat(unifi): add VLAN filtering,fix(config): handle empty API key - Co-Author: All commits include:
Co-Authored-By: Virgil <virgil@lethean.io>
Dependencies
| Module | Role |
|---|---|
forge.lthn.ai/core/go |
Framework (config, logging) |
github.com/unpoller/unifi/v5 |
UniFi controller SDK |
github.com/stretchr/testify |
Test assertions |
Licence
EUPL-1.2