mirror of https://github.com/status-im/consul.git
state: remove old schema test
This test has been replaced by TestNewDBSchema_Indexers
This commit is contained in:
parent
8591feb58a
commit
024dcbef03
|
@ -1,111 +1,12 @@
|
||||||
package state
|
package state
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
"runtime"
|
|
||||||
"sort"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/hashicorp/go-memdb"
|
"github.com/hashicorp/go-memdb"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/hashicorp/consul/internal/testing/golden"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// TODO: once TestNewDBSchema_Indexers has test cases for all tables and indexes
|
|
||||||
// it is probably safe to remove this test
|
|
||||||
func TestNewDBSchema(t *testing.T) {
|
|
||||||
schema := newDBSchema()
|
|
||||||
require.NoError(t, schema.Validate())
|
|
||||||
|
|
||||||
_, err := memdb.NewMemDB(schema)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
actual, err := repr(schema)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
expected := golden.Get(t, actual, stateStoreSchemaExpected)
|
|
||||||
require.Equal(t, expected, actual)
|
|
||||||
}
|
|
||||||
|
|
||||||
func repr(schema *memdb.DBSchema) (string, error) {
|
|
||||||
tables := make([]string, 0, len(schema.Tables))
|
|
||||||
for name := range schema.Tables {
|
|
||||||
tables = append(tables, name)
|
|
||||||
}
|
|
||||||
sort.Strings(tables)
|
|
||||||
|
|
||||||
buf := new(bytes.Buffer)
|
|
||||||
for _, name := range tables {
|
|
||||||
fmt.Fprintf(buf, "table=%v\n", name)
|
|
||||||
|
|
||||||
indexes := indexNames(schema.Tables[name])
|
|
||||||
for _, i := range indexes {
|
|
||||||
index := schema.Tables[name].Indexes[i]
|
|
||||||
fmt.Fprintf(buf, " index=%v", i)
|
|
||||||
if index.Unique {
|
|
||||||
buf.WriteString(" unique")
|
|
||||||
}
|
|
||||||
if index.AllowMissing {
|
|
||||||
buf.WriteString(" allow-missing")
|
|
||||||
}
|
|
||||||
buf.WriteString("\n")
|
|
||||||
buf.WriteString(" indexer=")
|
|
||||||
formatIndexer(buf, index.Indexer)
|
|
||||||
buf.WriteString("\n")
|
|
||||||
}
|
|
||||||
buf.WriteString("\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf.String(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatIndexer(buf *bytes.Buffer, indexer memdb.Indexer) {
|
|
||||||
v := reflect.Indirect(reflect.ValueOf(indexer))
|
|
||||||
typ := v.Type()
|
|
||||||
buf.WriteString(typ.PkgPath() + "." + typ.Name())
|
|
||||||
for i := 0; i < typ.NumField(); i++ {
|
|
||||||
fmt.Fprintf(buf, " %v=", typ.Field(i).Name)
|
|
||||||
|
|
||||||
formatField(buf, v.Field(i))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatField(buf *bytes.Buffer, field reflect.Value) {
|
|
||||||
switch field.Type().Kind() {
|
|
||||||
case reflect.Slice:
|
|
||||||
buf.WriteString("[")
|
|
||||||
for j := 0; j < field.Len(); j++ {
|
|
||||||
if j != 0 {
|
|
||||||
buf.WriteString(", ")
|
|
||||||
}
|
|
||||||
// TODO: handle other types of slices
|
|
||||||
formatIndexer(buf, field.Index(j).Interface().(memdb.Indexer))
|
|
||||||
}
|
|
||||||
buf.WriteString("]")
|
|
||||||
case reflect.Func:
|
|
||||||
// Functions are printed as pointer addresses, which change frequently.
|
|
||||||
// Instead use the name.
|
|
||||||
buf.WriteString(runtime.FuncForPC(field.Pointer()).Name())
|
|
||||||
case reflect.Interface:
|
|
||||||
formatField(buf, field.Elem())
|
|
||||||
default:
|
|
||||||
fmt.Fprintf(buf, "%v", field)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func indexNames(table *memdb.TableSchema) []string {
|
|
||||||
indexes := make([]string, 0, len(table.Indexes))
|
|
||||||
for name := range table.Indexes {
|
|
||||||
indexes = append(indexes, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(indexes)
|
|
||||||
return indexes
|
|
||||||
}
|
|
||||||
|
|
||||||
type indexerTestCase struct {
|
type indexerTestCase struct {
|
||||||
read indexValue
|
read indexValue
|
||||||
write indexValue
|
write indexValue
|
||||||
|
|
|
@ -1,186 +0,0 @@
|
||||||
table=acl-auth-methods
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Name Lowercase=true
|
|
||||||
|
|
||||||
table=acl-binding-rules
|
|
||||||
index=authmethod
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=AuthMethod Lowercase=true
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
|
|
||||||
table=acl-policies
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
index=name unique
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingleWithPrefix readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexNameFromACLPolicy prefixIndex=github.com/hashicorp/consul/agent/consul/state.prefixIndexFromQuery
|
|
||||||
|
|
||||||
table=acl-roles
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
index=name unique
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingleWithPrefix readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexNameFromACLRole prefixIndex=github.com/hashicorp/consul/agent/consul/state.prefixIndexFromQuery
|
|
||||||
index=policies allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerMulti readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromUUIDQuery writeIndexMulti=github.com/hashicorp/consul/agent/consul/state.multiIndexPolicyFromACLRole
|
|
||||||
|
|
||||||
table=acl-tokens
|
|
||||||
index=accessor unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=AccessorID
|
|
||||||
index=authmethod allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=AuthMethod Lowercase=false
|
|
||||||
index=expires-global allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.TokenExpirationIndex LocalFilter=false
|
|
||||||
index=expires-local allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.TokenExpirationIndex LocalFilter=true
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=SecretID Lowercase=false
|
|
||||||
index=local
|
|
||||||
indexer=github.com/hashicorp/go-memdb.ConditionalIndex Conditional=github.com/hashicorp/consul/agent/consul/state.tokensTableSchema.func1
|
|
||||||
index=needs-upgrade
|
|
||||||
indexer=github.com/hashicorp/go-memdb.ConditionalIndex Conditional=github.com/hashicorp/consul/agent/consul/state.tokensTableSchema.func2
|
|
||||||
index=policies allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.TokenPoliciesIndex
|
|
||||||
index=roles allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.TokenRolesIndex
|
|
||||||
|
|
||||||
table=autopilot-config
|
|
||||||
index=id unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.ConditionalIndex Conditional=github.com/hashicorp/consul/agent/consul/state.autopilotConfigTableSchema.func1
|
|
||||||
|
|
||||||
table=checks
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingleWithPrefix readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeCheckID writeIndex=github.com/hashicorp/consul/agent/consul/state.indexFromHealthCheck prefixIndex=github.com/hashicorp/consul/agent/consul/state.prefixIndexFromQuery
|
|
||||||
index=node allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingle readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeIdentity
|
|
||||||
index=node_service allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingle readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeServiceQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexNodeServiceFromHealthCheck
|
|
||||||
index=service allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=ServiceName Lowercase=true
|
|
||||||
index=status
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Status Lowercase=false
|
|
||||||
|
|
||||||
table=config-entries
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingleWithPrefix readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromConfigEntryKindName writeIndex=github.com/hashicorp/consul/agent/consul/state.indexFromConfigEntry prefixIndex=github.com/hashicorp/consul/agent/consul/state.indexFromConfigEntryKindName
|
|
||||||
index=intention-legacy-id unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ServiceIntentionLegacyIDIndex uuidFieldIndex={}
|
|
||||||
index=intention-source allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ServiceIntentionSourceIndex
|
|
||||||
index=kind
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingle readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromConfigEntryKindQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexKindFromConfigEntry
|
|
||||||
index=link allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ConfigEntryLinkIndex
|
|
||||||
|
|
||||||
table=connect-ca-builtin
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=ID Lowercase=false
|
|
||||||
|
|
||||||
table=connect-ca-config
|
|
||||||
index=id unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.ConditionalIndex Conditional=github.com/hashicorp/consul/agent/consul/state.caConfigTableSchema.func1
|
|
||||||
|
|
||||||
table=connect-ca-roots
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=ID Lowercase=false
|
|
||||||
|
|
||||||
table=connect-intentions
|
|
||||||
index=destination allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/go-memdb.StringFieldIndex Field=DestinationNS Lowercase=true, github.com/hashicorp/go-memdb.StringFieldIndex Field=DestinationName Lowercase=true] AllowMissing=false
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
index=source allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/go-memdb.StringFieldIndex Field=SourceNS Lowercase=true, github.com/hashicorp/go-memdb.StringFieldIndex Field=SourceName Lowercase=true] AllowMissing=false
|
|
||||||
index=source_destination unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/go-memdb.StringFieldIndex Field=SourceNS Lowercase=true, github.com/hashicorp/go-memdb.StringFieldIndex Field=SourceName Lowercase=true, github.com/hashicorp/go-memdb.StringFieldIndex Field=DestinationNS Lowercase=true, github.com/hashicorp/go-memdb.StringFieldIndex Field=DestinationName Lowercase=true] AllowMissing=false
|
|
||||||
|
|
||||||
table=coordinates
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/go-memdb.StringFieldIndex Field=Node Lowercase=true, github.com/hashicorp/go-memdb.StringFieldIndex Field=Segment Lowercase=true] AllowMissing=true
|
|
||||||
index=node
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Node Lowercase=true
|
|
||||||
|
|
||||||
table=federation-states
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Datacenter Lowercase=true
|
|
||||||
|
|
||||||
table=gateway-services
|
|
||||||
index=gateway
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Gateway
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Gateway, github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Service, github.com/hashicorp/go-memdb.IntFieldIndex Field=Port] AllowMissing=false
|
|
||||||
index=service allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Service
|
|
||||||
|
|
||||||
table=index
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Key Lowercase=true
|
|
||||||
|
|
||||||
table=kvs
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Key Lowercase=false
|
|
||||||
index=session allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=Session
|
|
||||||
|
|
||||||
table=mesh-topology
|
|
||||||
index=downstream
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Downstream
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Upstream, github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Downstream] AllowMissing=false
|
|
||||||
index=upstream allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.ServiceNameIndex Field=Upstream
|
|
||||||
|
|
||||||
table=nodes
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingle readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNode
|
|
||||||
index=meta allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringMapFieldIndex Field=Meta Lowercase=false
|
|
||||||
index=uuid unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
|
|
||||||
table=prepared-queries
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
index=name unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Name Lowercase=true
|
|
||||||
index=session allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=Session
|
|
||||||
index=template unique allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.PreparedQueryIndex
|
|
||||||
|
|
||||||
table=services
|
|
||||||
index=connect allow-missing
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.IndexConnectService
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingleWithPrefix readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeServiceQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexFromServiceNode prefixIndex=github.com/hashicorp/consul/agent/consul/state.prefixIndexFromQuery
|
|
||||||
index=kind
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.IndexServiceKind
|
|
||||||
index=node
|
|
||||||
indexer=github.com/hashicorp/consul/agent/consul/state.indexerSingle readIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeQuery writeIndex=github.com/hashicorp/consul/agent/consul/state.indexFromNodeIdentity
|
|
||||||
index=service allow-missing
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=ServiceName Lowercase=true
|
|
||||||
|
|
||||||
table=session_checks
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/go-memdb.StringFieldIndex Field=Node Lowercase=true, github.com/hashicorp/consul/agent/consul/state.CheckIDIndex, github.com/hashicorp/go-memdb.UUIDFieldIndex Field=Session] AllowMissing=false
|
|
||||||
index=node_check
|
|
||||||
indexer=github.com/hashicorp/go-memdb.CompoundIndex Indexes=[github.com/hashicorp/go-memdb.StringFieldIndex Field=Node Lowercase=true, github.com/hashicorp/consul/agent/consul/state.CheckIDIndex] AllowMissing=false
|
|
||||||
index=session
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=Session
|
|
||||||
|
|
||||||
table=sessions
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.UUIDFieldIndex Field=ID
|
|
||||||
index=node
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Node Lowercase=true
|
|
||||||
|
|
||||||
table=system-metadata
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Key Lowercase=true
|
|
||||||
|
|
||||||
table=tombstones
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=Key Lowercase=false
|
|
||||||
|
|
||||||
table=usage
|
|
||||||
index=id unique
|
|
||||||
indexer=github.com/hashicorp/go-memdb.StringFieldIndex Field=ID Lowercase=true
|
|
||||||
|
|
Loading…
Reference in New Issue