1 //go:build windows 2 3 package regstate 4 5 import ( 6 "os" 7 "testing" 8 ) 9 10 var testKey = "runhcs-test-test-key" 11 12 func prepTest(t *testing.T) { 13 t.Helper() 14 err := RemoveAll(testKey, true) 15 if err != nil && !os.IsNotExist(err) { 16 t.Fatal(err) 17 } 18 } 19 20 func TestLifetime(t *testing.T) { 21 prepTest(t) 22 k, err := Open(testKey, true) 23 if err != nil { 24 t.Fatal(err) 25 } 26 ids, err := k.Enumerate() 27 if err != nil { 28 t.Fatal(err) 29 } 30 if len(ids) != 0 { 31 t.Fatal("wrong count", len(ids)) 32 } 33 34 id := "a/b/c" 35 key := "key" 36 err = k.Set(id, key, 1) 37 if err == nil { 38 t.Fatal("expected error") 39 } 40 41 var i int 42 err = k.Get(id, key, &i) 43 if err == nil { 44 t.Fatal("expected error") 45 } 46 47 err = k.Create(id, key, 2) 48 if err != nil { 49 t.Fatal(err) 50 } 51 52 ids, err = k.Enumerate() 53 if err != nil { 54 t.Fatal(err) 55 } 56 if len(ids) != 1 { 57 t.Fatal("wrong count", len(ids)) 58 } 59 if ids[0] != id { 60 t.Fatal("wrong value", ids[0]) 61 } 62 63 err = k.Get(id, key, &i) 64 if err != nil { 65 t.Fatal(err) 66 } 67 if i != 2 { 68 t.Fatal("got wrong value", i) 69 } 70 71 err = k.Set(id, key, 3) 72 if err != nil { 73 t.Fatal(err) 74 } 75 err = k.Get(id, key, &i) 76 if err != nil { 77 t.Fatal(err) 78 } 79 if i != 3 { 80 t.Fatal("got wrong value", i) 81 } 82 83 err = k.Remove(id) 84 if err != nil { 85 t.Fatal(err) 86 } 87 err = k.Remove(id) 88 if err == nil { 89 t.Fatal("expected error") 90 } 91 92 ids, err = k.Enumerate() 93 if err != nil { 94 t.Fatal(err) 95 } 96 if len(ids) != 0 { 97 t.Fatal("wrong count", len(ids)) 98 } 99 } 100 101 func TestBool(t *testing.T) { 102 prepTest(t) 103 k, err := Open(testKey, true) 104 if err != nil { 105 t.Fatal(err) 106 } 107 id := "x" 108 key := "y" 109 err = k.Create(id, key, true) 110 if err != nil { 111 t.Fatal(err) 112 } 113 b := false 114 err = k.Get(id, key, &b) 115 if err != nil { 116 t.Fatal(err) 117 } 118 if !b { 119 t.Fatal("value did not marshal correctly") 120 } 121 } 122 123 func TestInt(t *testing.T) { 124 prepTest(t) 125 k, err := Open(testKey, true) 126 if err != nil { 127 t.Fatal(err) 128 } 129 id := "x" 130 key := "y" 131 err = k.Create(id, key, 10) 132 if err != nil { 133 t.Fatal(err) 134 } 135 v := 0 136 err = k.Get(id, key, &v) 137 if err != nil { 138 t.Fatal(err) 139 } 140 if v != 10 { 141 t.Fatal("value did not marshal correctly") 142 } 143 } 144 145 func TestString(t *testing.T) { 146 prepTest(t) 147 k, err := Open(testKey, true) 148 if err != nil { 149 t.Fatal(err) 150 } 151 id := "x" 152 key := "y" 153 err = k.Create(id, key, "blah") 154 if err != nil { 155 t.Fatal(err) 156 } 157 v := "" 158 err = k.Get(id, key, &v) 159 if err != nil { 160 t.Fatal(err) 161 } 162 if v != "blah" { 163 t.Fatal("value did not marshal correctly") 164 } 165 } 166 167 func TestJson(t *testing.T) { 168 prepTest(t) 169 k, err := Open(testKey, true) 170 if err != nil { 171 t.Fatal(err) 172 } 173 id := "x" 174 key := "y" 175 v := struct{ X int }{5} 176 err = k.Create(id, key, &v) 177 if err != nil { 178 t.Fatal(err) 179 } 180 v.X = 0 181 err = k.Get(id, key, &v) 182 if err != nil { 183 t.Fatal(err) 184 } 185 if v.X != 5 { 186 t.Fatal("value did not marshal correctly: ", v) 187 } 188 } 189