Files
tasks/common/config/persistence_test.go
zeekay 40351cce6f rip: delete temporal fork — native ZAP-only tasksd
Goes from 135 MB binary with 1153 files importing go.temporal.io and 224
importing google.golang.org/grpc to a 10 MB native binary with ZERO of
either.

Deleted:
- tasks/, tasktests/, service/, chasm/, client/, api/, proto/, tools/
- cmd/tools/, components/, docker/
- schema/{cassandra,elasticsearch,mysql,postgresql,sqlite}/
- 40 tainted common/ subdirs + 7 top-level common files
- tests/testutils (no longer referenced after surviving deps drop common)

New cmd/tasksd (~100 lines) boots tasks.Embed (zap.Node) + http.Server.
New pkg/tasks/embed.go registers ZAP handlers for the SDK opcode surface
(0x0060-0x00A5). Workflow handlers return a 501 "not yet implemented"
envelope; native engine lands behind this contract.

Build:  go build ./cmd/tasksd → 10 MB
Vet:    go vet ./... → clean
Boot:   tasksd --zap-port 9999 --http :7243
Probes: /healthz, /v1/tasks/health → 200
UI:     /_/tasks/, / → 200 (embedded Vite bundle)
ZAP:    _tasks._tcp on :9999 (mDNS disabled; direct connect)

go.mod: tidy. No go.temporal.io. No google.golang.org/grpc.
2026-04-26 14:06:21 -07:00

311 lines
6.7 KiB
Go

package config
import (
"reflect"
"testing"
"time"
"github.com/gocql/gocql"
"github.com/stretchr/testify/require"
)
func TestSQLValidate_MutualExclusivity(t *testing.T) {
cfg := &SQL{
Password: "static",
PasswordCommand: &PasswordCommandConfig{
Command: "echo",
Args: []string{"dynamic"},
},
}
err := cfg.validate()
require.ErrorContains(t, err, "mutually exclusive")
}
func TestSQLValidate_PasswordOnly(t *testing.T) {
cfg := &SQL{Password: "static"}
err := cfg.validate()
require.NoError(t, err)
}
func TestSQLValidate_PasswordCommandOnly(t *testing.T) {
cfg := &SQL{
PasswordCommand: &PasswordCommandConfig{
Command: "echo",
Args: []string{"dynamic"},
},
}
err := cfg.validate()
require.NoError(t, err)
}
func TestSQLValidate_PasswordCommandEmptyCommand(t *testing.T) {
cfg := &SQL{
PasswordCommand: &PasswordCommandConfig{},
}
err := cfg.validate()
require.ErrorContains(t, err, "passwordCommand.command must not be empty")
}
func TestSQLResolvePassword_Static(t *testing.T) {
cfg := &SQL{Password: "static-pass"}
pw, err := cfg.ResolvePassword()
require.NoError(t, err)
require.Equal(t, "static-pass", pw)
}
func TestSQLResolvePassword_EmptyWhenNothingSet(t *testing.T) {
cfg := &SQL{}
pw, err := cfg.ResolvePassword()
require.NoError(t, err)
require.Empty(t, pw)
}
func TestSQLResolvePassword_Command(t *testing.T) {
cfg := &SQL{
PasswordCommand: &PasswordCommandConfig{
Command: "echo",
Args: []string{"hello"},
},
}
pw, err := cfg.ResolvePassword()
require.NoError(t, err)
require.Equal(t, "hello", pw)
}
func TestSQLResolvePassword_CommandTrimsTrailingNewline(t *testing.T) {
cfg := &SQL{
PasswordCommand: &PasswordCommandConfig{
Command: "printf",
Args: []string{"hello\n\n"},
},
}
pw, err := cfg.ResolvePassword()
require.NoError(t, err)
require.Equal(t, "hello", pw)
}
func TestSQLResolvePassword_CommandFailure(t *testing.T) {
cfg := &SQL{
PasswordCommand: &PasswordCommandConfig{
Command: "false",
},
}
_, err := cfg.ResolvePassword()
require.ErrorContains(t, err, "passwordCommand")
}
func TestSQLResolvePassword_CommandTimeout(t *testing.T) {
cfg := &SQL{
PasswordCommand: &PasswordCommandConfig{
Command: "sleep",
Args: []string{"10"},
Timeout: 10 * time.Millisecond,
},
}
start := time.Now()
_, err := cfg.ResolvePassword()
elapsed := time.Since(start)
require.ErrorContains(t, err, "passwordCommand")
require.Less(t, elapsed, 5*time.Second, "command should have been killed by timeout")
}
func TestCassandraStoreConsistency_GetConsistency(t *testing.T) {
t.Parallel()
tests := []struct {
name string
input *CassandraStoreConsistency
want gocql.Consistency
}{
{
name: "Nil Consistency Settings",
input: nil,
want: gocql.LocalQuorum,
},
{
name: "Empty Consistency Settings",
input: &CassandraStoreConsistency{},
want: gocql.LocalQuorum,
},
{
name: "Empty Default Settings",
input: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{},
},
want: gocql.LocalQuorum,
},
{
name: "Default Override",
input: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{
Consistency: "All",
},
},
want: gocql.All,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.input
if got := c.GetConsistency(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("CassandraStoreConsistency.GetConsistency() = %v, want %v", got, tt.want)
}
})
}
}
func TestCassandraStoreConsistency_GetSerialConsistency(t *testing.T) {
t.Parallel()
tests := []struct {
name string
input *CassandraStoreConsistency
want gocql.SerialConsistency
}{
{
name: "Nil Consistency Settings",
input: nil,
want: gocql.LocalSerial,
},
{
name: "Empty Consistency Settings",
input: &CassandraStoreConsistency{},
want: gocql.LocalSerial,
},
{
name: "Empty Default Settings",
input: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{},
},
want: gocql.LocalSerial,
},
{
name: "Default Override",
input: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{
SerialConsistency: "serial",
},
},
want: gocql.Serial,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.input
if got := c.GetSerialConsistency(); !reflect.DeepEqual(got, tt.want) {
t.Errorf("CassandraStoreConsistency.GetSerialConsistency() = %v, want %v", got, tt.want)
}
})
}
}
func TestCassandraConsistencySettings_validate(t *testing.T) {
t.Parallel()
tests := []struct {
name string
settings *CassandraConsistencySettings
wantErr bool
}{
{
name: "nil settings",
settings: nil,
wantErr: false,
},
{
name: "empty fields",
settings: &CassandraConsistencySettings{
Consistency: "",
SerialConsistency: "",
},
wantErr: false,
},
{
name: "happy path",
settings: &CassandraConsistencySettings{
Consistency: "Local_Quorum",
SerialConsistency: "lOcal_sErial",
},
wantErr: false,
},
{
name: "bad consistency",
settings: &CassandraConsistencySettings{
Consistency: "bad_value",
SerialConsistency: "local_serial",
},
wantErr: true,
},
{
name: "bad serial consistency",
settings: &CassandraConsistencySettings{
Consistency: "local_quorum",
SerialConsistency: "bad_value",
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.settings
if err := c.validate(); (err != nil) != tt.wantErr {
t.Errorf("CassandraConsistencySettings.validate() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
func TestCassandraStoreConsistency_validate(t *testing.T) {
t.Parallel()
tests := []struct {
name string
settings *CassandraStoreConsistency
wantErr bool
}{
{
name: "nil settings",
settings: nil,
wantErr: false,
},
{
name: "empty settings",
settings: &CassandraStoreConsistency{},
wantErr: false,
},
{
name: "empty default settings",
settings: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{},
},
wantErr: false,
},
{
name: "good default settings",
settings: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{
Consistency: "one",
},
},
wantErr: false,
},
{
name: "bad default settings",
settings: &CassandraStoreConsistency{
Default: &CassandraConsistencySettings{
Consistency: "fake_value",
},
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := tt.settings
if err := c.validate(); (err != nil) != tt.wantErr {
t.Errorf("CassandraStoreConsistency.validate() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}