github.imxd.top/hashicorp/consul@v1.4.5/agent/consul/state/prepared_query_index_test.go (about) 1 package state 2 3 import ( 4 "testing" 5 6 "github.com/hashicorp/consul/agent/structs" 7 ) 8 9 // Indexer is a global indexer to use for tests since there is no state. 10 var index PreparedQueryIndex 11 12 func TestPreparedQueryIndex_FromObject(t *testing.T) { 13 // We shouldn't index an object we don't understand. 14 if ok, _, err := index.FromObject(42); ok || err == nil { 15 t.Fatalf("bad: ok=%v err=%v", ok, err) 16 } 17 18 // We shouldn't index a non-template query. 19 wrapped := &queryWrapper{&structs.PreparedQuery{}, nil} 20 if ok, _, err := index.FromObject(wrapped); ok || err != nil { 21 t.Fatalf("bad: ok=%v err=%v", ok, err) 22 } 23 24 // Create a template with an empty name. 25 query := &structs.PreparedQuery{ 26 Template: structs.QueryTemplateOptions{ 27 Type: structs.QueryTemplateTypeNamePrefixMatch, 28 }, 29 } 30 ok, key, err := index.FromObject(&queryWrapper{query, nil}) 31 if !ok || err != nil { 32 t.Fatalf("bad: ok=%v err=%v", ok, err) 33 } 34 if string(key) != "\x00" { 35 t.Fatalf("bad: %#v", key) 36 } 37 38 // Set the name and try again. 39 query.Name = "hello" 40 ok, key, err = index.FromObject(&queryWrapper{query, nil}) 41 if !ok || err != nil { 42 t.Fatalf("bad: ok=%v err=%v", ok, err) 43 } 44 if string(key) != "\x00hello" { 45 t.Fatalf("bad: %#v", key) 46 } 47 48 // Make sure the index isn't case-sensitive. 49 query.Name = "HELLO" 50 ok, key, err = index.FromObject(&queryWrapper{query, nil}) 51 if !ok || err != nil { 52 t.Fatalf("bad: ok=%v err=%v", ok, err) 53 } 54 if string(key) != "\x00hello" { 55 t.Fatalf("bad: %#v", key) 56 } 57 } 58 59 func TestPreparedQueryIndex_FromArgs(t *testing.T) { 60 // Only accept a single string arg. 61 if _, err := index.FromArgs(42); err == nil { 62 t.Fatalf("should be an error") 63 } 64 if _, err := index.FromArgs("hello", "world"); err == nil { 65 t.Fatalf("should be an error") 66 } 67 68 // Try an empty string. 69 if key, err := index.FromArgs(""); err != nil || string(key) != "\x00" { 70 t.Fatalf("bad: key=%#v err=%v", key, err) 71 } 72 73 // Try a non-empty string. 74 if key, err := index.FromArgs("hello"); err != nil || 75 string(key) != "\x00hello" { 76 t.Fatalf("bad: key=%#v err=%v", key, err) 77 } 78 79 // Make sure index is not case-sensitive. 80 if key, err := index.FromArgs("HELLO"); err != nil || 81 string(key) != "\x00hello" { 82 t.Fatalf("bad: key=%#v err=%v", key, err) 83 } 84 } 85 86 func TestPreparedQueryIndex_PrefixFromArgs(t *testing.T) { 87 // Only accept a single string arg. 88 if _, err := index.PrefixFromArgs(42); err == nil { 89 t.Fatalf("should be an error") 90 } 91 if _, err := index.PrefixFromArgs("hello", "world"); err == nil { 92 t.Fatalf("should be an error") 93 } 94 95 // Try an empty string. 96 if key, err := index.PrefixFromArgs(""); err != nil || string(key) != "\x00" { 97 t.Fatalf("bad: key=%#v err=%v", key, err) 98 } 99 100 // Try a non-empty string. 101 if key, err := index.PrefixFromArgs("hello"); err != nil || 102 string(key) != "\x00hello" { 103 t.Fatalf("bad: key=%#v err=%v", key, err) 104 } 105 106 // Make sure index is not case-sensitive. 107 if key, err := index.PrefixFromArgs("HELLO"); err != nil || 108 string(key) != "\x00hello" { 109 t.Fatalf("bad: key=%#v err=%v", key, err) 110 } 111 }