Cosmos Nicolaou | 486d349 | 2014-09-30 22:21:20 -0700 | [diff] [blame] | 1 | package exec |
Bogdan Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 2 | |
| 3 | import ( |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 4 | "reflect" |
Bogdan Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 5 | "testing" |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 6 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame^] | 7 | "v.io/v23/verror" |
Bogdan Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 8 | ) |
| 9 | |
| 10 | func 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 | |
| 18 | func checkAbsent(t *testing.T, c Config, k string) { |
Jiri Simsa | 074bf36 | 2015-02-17 09:29:45 -0800 | [diff] [blame] | 19 | 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 Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 21 | } |
| 22 | } |
| 23 | |
| 24 | // TestConfig checks that Set and Get work as expected. |
| 25 | func TestConfig(t *testing.T) { |
Cosmos Nicolaou | 486d349 | 2014-09-30 22:21:20 -0700 | [diff] [blame] | 26 | c := NewConfig() |
Bogdan Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 27 | 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 Simsa | 3789339 | 2014-11-07 10:55:45 -0800 | [diff] [blame] | 32 | c.Clear("foo") |
| 33 | checkAbsent(t, c, "foo") |
Bogdan Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 34 | 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 Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 37 | } |
| 38 | |
| 39 | // TestSerialize checks that serializing the config and merging from a |
| 40 | // serialized config work as expected. |
| 41 | func TestSerialize(t *testing.T) { |
Cosmos Nicolaou | 486d349 | 2014-09-30 22:21:20 -0700 | [diff] [blame] | 42 | c := NewConfig() |
Bogdan Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 43 | 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 Nicolaou | 486d349 | 2014-09-30 22:21:20 -0700 | [diff] [blame] | 49 | readC := NewConfig() |
Bogdan Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 50 | 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 Caprita | bf356d7 | 2015-01-08 17:28:48 -0800 | [diff] [blame] | 73 | 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 Caprita | a4d9ee4 | 2014-06-20 16:42:53 -0700 | [diff] [blame] | 76 | } |