blob: e22a82043041c6bfae96e456b0f0e9164620717d [file] [log] [blame]
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -07001package config
2
3import (
4 "testing"
5)
6
7func checkPresent(t *testing.T, c Config, k, wantV string) {
8 if v, err := c.Get(k); err != nil {
9 t.Errorf("Expected value %q for key %q, got error %v instead", wantV, k, err)
10 } else if v != wantV {
11 t.Errorf("Expected value %q for key %q, got %q instead", wantV, k, v)
12 }
13}
14
15func checkAbsent(t *testing.T, c Config, k string) {
16 if v, err := c.Get(k); err != ErrKeyNotFound {
17 t.Errorf("Expected (\"\", %v) for key %q, got (%q, %v) instead", ErrKeyNotFound, k, v, err)
18 }
19}
20
21// TestConfig checks that Set and Get work as expected.
22func TestConfig(t *testing.T) {
23 c := New()
24 c.Set("foo", "bar")
25 checkPresent(t, c, "foo", "bar")
26 checkAbsent(t, c, "food")
27 c.Set("foo", "baz")
28 checkPresent(t, c, "foo", "baz")
29}
30
31// TestSerialize checks that serializing the config and merging from a
32// serialized config work as expected.
33func TestSerialize(t *testing.T) {
34 c := New()
35 c.Set("k1", "v1")
36 c.Set("k2", "v2")
37 s, err := c.Serialize()
38 if err != nil {
39 t.Fatalf("Failed to serialize: %v", err)
40 }
41 readC := New()
42 if err := readC.MergeFrom(s); err != nil {
43 t.Fatalf("Failed to deserialize: %v", err)
44 }
45 checkPresent(t, readC, "k1", "v1")
46 checkPresent(t, readC, "k2", "v2")
47
48 readC.Set("k2", "newv2") // This should be overwritten by the next merge.
49 checkPresent(t, readC, "k2", "newv2")
50 readC.Set("k3", "v3") // This should survive the next merge.
51
52 c.Set("k1", "newv1") // This should overwrite v1 in the next merge.
53 c.Set("k4", "v4") // This should be added following the next merge.
54 s, err = c.Serialize()
55 if err != nil {
56 t.Fatalf("Failed to serialize: %v", err)
57 }
58 if err := readC.MergeFrom(s); err != nil {
59 t.Fatalf("Failed to deserialize: %v", err)
60 }
61 checkPresent(t, readC, "k1", "newv1")
62 checkPresent(t, readC, "k2", "v2")
63 checkPresent(t, readC, "k3", "v3")
64 checkPresent(t, readC, "k4", "v4")
65}