github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/pvl/registers_test.go (about) 1 // Copyright 2016 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package pvl 5 6 import ( 7 "fmt" 8 "testing" 9 ) 10 11 func TestNamedRegsStore(t *testing.T) { 12 tests := []struct { 13 shouldwork bool 14 op, arg1, arg2, expected string 15 }{ 16 // banning a register works 17 {true, "Ban", "banned", "", ""}, 18 {false, "Ban", "banned", "", ""}, 19 {false, "Set", "banned", "foo", ""}, 20 {false, "Get", "banned", "", ""}, 21 22 // set and get works 23 // cannot ban a set register 24 {true, "Set", "x", "foo", ""}, 25 {true, "Get", "x", "", "foo"}, 26 {false, "Ban", "x", "", ""}, 27 {true, "Get", "x", "", "foo"}, 28 29 // cannot set twice 30 {true, "Set", "y", "bar", ""}, 31 {true, "Get", "y", "", "bar"}, 32 {false, "Set", "y", "baz", ""}, 33 {true, "Get", "y", "", "bar"}, 34 35 // cannot use invalid keys 36 {false, "Set", "Z", "", ""}, 37 {false, "Get", "Z", "", ""}, 38 {false, "Set", "specialchar@", "oosh", ""}, 39 {false, "Set", "", "oosh", ""}, 40 {false, "Ban", "#!", "", ""}, 41 42 // can use valid keys 43 {true, "Set", "tmp1_2", "fuzzle", ""}, 44 {true, "Get", "tmp1_2", "", "fuzzle"}, 45 46 // empty string is an ok value 47 {true, "Set", "empty", "", ""}, 48 {true, "Get", "empty", "", ""}, 49 } 50 51 regs := *newNamedRegsStore() 52 53 for i, unit := range tests { 54 var err error 55 var res string 56 useRes := false 57 58 fail := func(f string, args ...interface{}) { 59 prefix := fmt.Sprintf("[%v] ", i) 60 t.Fatalf(prefix+f, args...) 61 } 62 63 switch unit.op { 64 case "Get": 65 res, err = regs.Get(unit.arg1) 66 useRes = true 67 case "Set": 68 err = regs.Set(unit.arg1, unit.arg2) 69 case "Ban": 70 err = regs.Ban(unit.arg1) 71 } 72 73 if err == nil { 74 if !unit.shouldwork { 75 fail("should have failed") 76 } 77 if useRes && (res != unit.expected) { 78 fail("got '%v'; expected '%v'", res, unit.expected) 79 } 80 } else if unit.shouldwork { 81 fail("should have worked; got %v", err) 82 } 83 } 84 } 85 86 func TestNamedRegsStoreCopy(t *testing.T) { 87 // Copying a store aliases its state. 88 // This should not be depended on but it's good to know. 89 regs1 := *newNamedRegsStore() 90 regs2 := regs1 91 92 err := regs1.Set("foo", "1") 93 if err != nil { 94 t.Fatal() 95 } 96 97 err = regs2.Set("foo", "1") 98 if err == nil { 99 t.Fatal() 100 } 101 }