blob: 6e131c5aa9ba2d8526cf953e33e8253bc00f16e5 [file] [log] [blame]
Cosmos Nicolaou486d3492014-09-30 22:21:20 -07001package exec
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -07002
3import (
Bogdan Capritabf356d72015-01-08 17:28:48 -08004 "reflect"
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -07005 "testing"
Bogdan Capritabf356d72015-01-08 17:28:48 -08006
Jiri Simsa6ac95222015-02-23 16:11:49 -08007 "v.io/v23/verror"
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -07008)
9
10func checkPresent(t *testing.T, c Config, k, wantV string) {
11 if v, err := c.Get(k); err != nil {
12 t.Errorf("Expected value %q for key %q, got error %v instead", wantV, k, err)
13 } else if v != wantV {
14 t.Errorf("Expected value %q for key %q, got %q instead", wantV, k, v)
15 }
16}
17
18func checkAbsent(t *testing.T, c Config, k string) {
Jiri Simsa074bf362015-02-17 09:29:45 -080019 if v, err := c.Get(k); !verror.Is(err, verror.ErrNoExist.ID) {
20 t.Errorf("Expected (\"\", %v) for key %q, got (%q, %v) instead", verror.ErrNoExist, k, v, err)
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -070021 }
22}
23
24// TestConfig checks that Set and Get work as expected.
25func TestConfig(t *testing.T) {
Cosmos Nicolaou486d3492014-09-30 22:21:20 -070026 c := NewConfig()
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -070027 c.Set("foo", "bar")
28 checkPresent(t, c, "foo", "bar")
29 checkAbsent(t, c, "food")
30 c.Set("foo", "baz")
31 checkPresent(t, c, "foo", "baz")
Jiri Simsa37893392014-11-07 10:55:45 -080032 c.Clear("foo")
33 checkAbsent(t, c, "foo")
Bogdan Capritabf356d72015-01-08 17:28:48 -080034 if want, got := map[string]string{}, c.Dump(); !reflect.DeepEqual(want, got) {
35 t.Errorf("Expected %v for Dump, got %v instead", want, got)
36 }
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -070037}
38
39// TestSerialize checks that serializing the config and merging from a
40// serialized config work as expected.
41func TestSerialize(t *testing.T) {
Cosmos Nicolaou486d3492014-09-30 22:21:20 -070042 c := NewConfig()
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -070043 c.Set("k1", "v1")
44 c.Set("k2", "v2")
45 s, err := c.Serialize()
46 if err != nil {
47 t.Fatalf("Failed to serialize: %v", err)
48 }
Cosmos Nicolaou486d3492014-09-30 22:21:20 -070049 readC := NewConfig()
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -070050 if err := readC.MergeFrom(s); err != nil {
51 t.Fatalf("Failed to deserialize: %v", err)
52 }
53 checkPresent(t, readC, "k1", "v1")
54 checkPresent(t, readC, "k2", "v2")
55
56 readC.Set("k2", "newv2") // This should be overwritten by the next merge.
57 checkPresent(t, readC, "k2", "newv2")
58 readC.Set("k3", "v3") // This should survive the next merge.
59
60 c.Set("k1", "newv1") // This should overwrite v1 in the next merge.
61 c.Set("k4", "v4") // This should be added following the next merge.
62 s, err = c.Serialize()
63 if err != nil {
64 t.Fatalf("Failed to serialize: %v", err)
65 }
66 if err := readC.MergeFrom(s); err != nil {
67 t.Fatalf("Failed to deserialize: %v", err)
68 }
69 checkPresent(t, readC, "k1", "newv1")
70 checkPresent(t, readC, "k2", "v2")
71 checkPresent(t, readC, "k3", "v3")
72 checkPresent(t, readC, "k4", "v4")
Bogdan Capritabf356d72015-01-08 17:28:48 -080073 if want, got := map[string]string{"k1": "newv1", "k2": "v2", "k3": "v3", "k4": "v4"}, readC.Dump(); !reflect.DeepEqual(want, got) {
74 t.Errorf("Expected %v for Dump, got %v instead", want, got)
75 }
Bogdan Capritaa4d9ee42014-06-20 16:42:53 -070076}