mirror of
https://github.com/hanzoai/o11y.git
synced 2026-10-15 12:58:33 +00:00
Re-sync the entire SigNoz-derived Go tree to a clean fork of latest SigNoz main (upstream 3e6339019), eliminating the version-skew that broke `go build ./...` (mixed-era packages, ~14 imported-but-absent packages, partial signoz->o11y / clickhouse->datastore rebrands, self-import cycle, duplicate package decls). - pkg/ + cmd/ wholesale replaced with latest SigNoz; imports rewritten github.com/SigNoz/signoz/ -> github.com/hanzoai/o11y/. - Adopt SigNoz's CURRENT structure (resourcefilter->telemetryresourcefilter, integrationtypes->cloudintegrationtypes, roletypes/grammar/times folded in upstream); old paths dropped. - Fork deps repathed to hanzoai + bumped: signoz-otel-collector v0.144.6, clickhouse-go-mock v0.14.1, govaluate v0.1.0; expr-lang/expr => hanzoai/expr v1.17.8 (replace). go.mod reconciled from latest SigNoz; go.sum re-tidied. - ee/ + cmd/enterprise stripped — o11y stays MIT-only; community edition imports no ee packages. - Preserved o11y additions: module path github.com/hanzoai/o11y, mount.go (cloud.Register/zip mount adapter, HIP-0106), NOTICE + LICENSE (SigNoz §4c attribution retained; upstream pkg files are headerless per SigNoz convention). - Reverted o11y cosmetic renames (o11y*/datastore*) and experimental originals (authz/iamauthz, billing, zapreceiver, zapmetricreceiver) to SigNoz canonical to kill the skew; snapshots retained in git history for re-layering. go build ./... = exit 0. go vet clean except benign "unreachable code" in generated ANTLR parser files (inherited from upstream).
95 lines
2.9 KiB
Go
95 lines
2.9 KiB
Go
package sqlalertmanagerstore
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/hanzoai/o11y/pkg/factory/factorytest"
|
|
"github.com/hanzoai/o11y/pkg/sqlstore"
|
|
"github.com/hanzoai/o11y/pkg/sqlstore/sqlitesqlstore"
|
|
"github.com/hanzoai/o11y/pkg/types"
|
|
"github.com/hanzoai/o11y/pkg/types/alertmanagertypes"
|
|
"github.com/hanzoai/o11y/pkg/valuer"
|
|
)
|
|
|
|
func newTestStore(t *testing.T) sqlstore.SQLStore {
|
|
t.Helper()
|
|
store, err := sqlitesqlstore.New(t.Context(), factorytest.NewSettings(), sqlstore.Config{
|
|
Provider: "sqlite",
|
|
Connection: sqlstore.ConnectionConfig{
|
|
MaxOpenConns: 1,
|
|
MaxConnLifetime: 0,
|
|
},
|
|
Sqlite: sqlstore.SqliteConfig{
|
|
Path: filepath.Join(t.TempDir(), "test.db"),
|
|
Mode: "wal",
|
|
BusyTimeout: 5 * time.Second,
|
|
TransactionMode: "deferred",
|
|
},
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
_, err = store.BunDB().NewCreateTable().
|
|
Model((*alertmanagertypes.StorablePlannedMaintenance)(nil)).
|
|
IfNotExists().
|
|
Exec(t.Context())
|
|
require.NoError(t, err)
|
|
|
|
_, err = store.BunDB().NewCreateTable().
|
|
Model((*alertmanagertypes.StorablePlannedMaintenanceRule)(nil)).
|
|
IfNotExists().
|
|
Exec(t.Context())
|
|
require.NoError(t, err)
|
|
|
|
return store
|
|
}
|
|
|
|
// TestListPlannedMaintenanceSkipsInvalid asserts that a single corrupt record
|
|
// (here, an unloadable timezone) is skipped rather than failing the whole list.
|
|
func TestListPlannedMaintenanceSkipsInvalid(t *testing.T) {
|
|
store := newTestStore(t)
|
|
orgID := valuer.GenerateUUID().StringValue()
|
|
now := time.Now().UTC()
|
|
|
|
valid := &alertmanagertypes.StorablePlannedMaintenance{
|
|
Identifiable: types.Identifiable{ID: valuer.GenerateUUID()},
|
|
TimeAuditable: types.TimeAuditable{CreatedAt: now, UpdatedAt: now},
|
|
Name: "valid",
|
|
Schedule: `{"timezone":"UTC","startTime":"2024-01-01T12:00:00Z","recurrence":{"duration":"2h","repeatType":"daily"}}`,
|
|
OrgID: orgID,
|
|
}
|
|
result, err := store.BunDB().NewInsert().Model(valid).Exec(t.Context())
|
|
require.NoError(t, err)
|
|
rowsAffected, err := result.RowsAffected()
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(1), rowsAffected)
|
|
|
|
// A schedule with "zero" startTime
|
|
invalid := &alertmanagertypes.StorablePlannedMaintenance{
|
|
Identifiable: types.Identifiable{ID: valuer.GenerateUUID()},
|
|
TimeAuditable: types.TimeAuditable{
|
|
CreatedAt: now,
|
|
UpdatedAt: now,
|
|
},
|
|
Name: "invalid",
|
|
Schedule: `{"timezone":"UTC","recurrence":{"duration":"2h","repeatType":"daily"}}`,
|
|
OrgID: orgID,
|
|
}
|
|
result, err = store.BunDB().NewInsert().Model(invalid).Exec(t.Context())
|
|
require.NoError(t, err)
|
|
rowsAffected, err = result.RowsAffected()
|
|
require.NoError(t, err)
|
|
require.Equal(t, int64(1), rowsAffected)
|
|
|
|
maintenanceStore := NewMaintenanceStore(store, factorytest.NewSettings())
|
|
|
|
list, err := maintenanceStore.ListPlannedMaintenance(t.Context(), orgID)
|
|
require.NoError(t, err)
|
|
require.Len(t, list, 1)
|
|
assert.Equal(t, valid.ID, list[0].ID)
|
|
}
|