mirror of https://github.com/status-im/consul.git
Adds a test for the custom prepared query template indexer.
This commit is contained in:
parent
897ab0d5c7
commit
79eccf2c66
|
@ -0,0 +1,111 @@
|
|||
package state
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/hashicorp/consul/consul/structs"
|
||||
)
|
||||
|
||||
// Indexer is a global indexer to use for tests since there is no state.
|
||||
var index PreparedQueryIndex
|
||||
|
||||
func TestPreparedQueryIndex_FromObject(t *testing.T) {
|
||||
// We shouldn't index an object we don't understand.
|
||||
if ok, _, err := index.FromObject(42); ok || err == nil {
|
||||
t.Fatalf("bad: ok=%v err=%v", ok, err)
|
||||
}
|
||||
|
||||
// We shouldn't index a non-template query.
|
||||
wrapped := &queryWrapper{&structs.PreparedQuery{}, nil}
|
||||
if ok, _, err := index.FromObject(wrapped); ok || err != nil {
|
||||
t.Fatalf("bad: ok=%v err=%v", ok, err)
|
||||
}
|
||||
|
||||
// Create a template with an empty name.
|
||||
query := &structs.PreparedQuery{
|
||||
Template: structs.QueryTemplateOptions{
|
||||
Type: structs.QueryTemplateTypeNamePrefixMatch,
|
||||
},
|
||||
}
|
||||
ok, key, err := index.FromObject(&queryWrapper{query, nil})
|
||||
if !ok || err != nil {
|
||||
t.Fatalf("bad: ok=%v err=%v", ok, err)
|
||||
}
|
||||
if string(key) != "\x00" {
|
||||
t.Fatalf("bad: %#v", key)
|
||||
}
|
||||
|
||||
// Set the name and try again.
|
||||
query.Name = "hello"
|
||||
ok, key, err = index.FromObject(&queryWrapper{query, nil})
|
||||
if !ok || err != nil {
|
||||
t.Fatalf("bad: ok=%v err=%v", ok, err)
|
||||
}
|
||||
if string(key) != "\x00hello" {
|
||||
t.Fatalf("bad: %#v", key)
|
||||
}
|
||||
|
||||
// Make sure the index isn't case-sensitive.
|
||||
query.Name = "HELLO"
|
||||
ok, key, err = index.FromObject(&queryWrapper{query, nil})
|
||||
if !ok || err != nil {
|
||||
t.Fatalf("bad: ok=%v err=%v", ok, err)
|
||||
}
|
||||
if string(key) != "\x00hello" {
|
||||
t.Fatalf("bad: %#v", key)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreparedQueryIndex_FromArgs(t *testing.T) {
|
||||
// Only accept a single string arg.
|
||||
if _, err := index.FromArgs(42); err == nil {
|
||||
t.Fatalf("should be an error")
|
||||
}
|
||||
if _, err := index.FromArgs("hello", "world"); err == nil {
|
||||
t.Fatalf("should be an error")
|
||||
}
|
||||
|
||||
// Try an empty string.
|
||||
if key, err := index.FromArgs(""); err != nil || string(key) != "\x00" {
|
||||
t.Fatalf("bad: key=%#v err=%v", key, err)
|
||||
}
|
||||
|
||||
// Try a non-empty string.
|
||||
if key, err := index.FromArgs("hello"); err != nil ||
|
||||
string(key) != "\x00hello" {
|
||||
t.Fatalf("bad: key=%#v err=%v", key, err)
|
||||
}
|
||||
|
||||
// Make sure index is not case-sensitive.
|
||||
if key, err := index.FromArgs("HELLO"); err != nil ||
|
||||
string(key) != "\x00hello" {
|
||||
t.Fatalf("bad: key=%#v err=%v", key, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreparedQueryIndex_PrefixFromArgs(t *testing.T) {
|
||||
// Only accept a single string arg.
|
||||
if _, err := index.PrefixFromArgs(42); err == nil {
|
||||
t.Fatalf("should be an error")
|
||||
}
|
||||
if _, err := index.PrefixFromArgs("hello", "world"); err == nil {
|
||||
t.Fatalf("should be an error")
|
||||
}
|
||||
|
||||
// Try an empty string.
|
||||
if key, err := index.PrefixFromArgs(""); err != nil || string(key) != "\x00" {
|
||||
t.Fatalf("bad: key=%#v err=%v", key, err)
|
||||
}
|
||||
|
||||
// Try a non-empty string.
|
||||
if key, err := index.PrefixFromArgs("hello"); err != nil ||
|
||||
string(key) != "\x00hello" {
|
||||
t.Fatalf("bad: key=%#v err=%v", key, err)
|
||||
}
|
||||
|
||||
// Make sure index is not case-sensitive.
|
||||
if key, err := index.PrefixFromArgs("HELLO"); err != nil ||
|
||||
string(key) != "\x00hello" {
|
||||
t.Fatalf("bad: key=%#v err=%v", key, err)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue