| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package exvar |
| |
| import ( |
| "exvar"; |
| "fmt"; |
| "testing"; |
| ) |
| |
| func TestSimpleCounter(t *testing.T) { |
| // Unknown exvar should be zero. |
| x := GetInt("requests"); |
| if x != 0 { |
| t.Errorf("GetInt(nonexistent) = %v, want 0", x) |
| } |
| |
| IncrementInt("requests", 1); |
| IncrementInt("requests", 3); |
| x = GetInt("requests"); |
| if x != 4 { |
| t.Errorf("GetInt('requests') = %v, want 4", x) |
| } |
| |
| out := String(); |
| if out != "requests 4\n" { |
| t.Errorf("String() = \"%v\", want \"requests 4\n\"", |
| out); |
| } |
| } |
| |
| func TestStringVar(t *testing.T) { |
| // Unknown exvar should be empty string. |
| if s := GetStr("name"); s != "" { |
| t.Errorf("GetStr(nonexistent) = %q, want ''", s) |
| } |
| |
| SetStr("name", "Mike"); |
| if s := GetStr("name"); s != "Mike" { |
| t.Errorf("GetStr('name') = %q, want 'Mike'", s) |
| } |
| } |
| |
| func TestMismatchedCounters(t *testing.T) { |
| // Make sure some vars exist. |
| GetInt("requests"); |
| GetMapInt("colours", "red"); |
| GetStr("name"); |
| |
| IncrementInt("colours", 1); |
| if x := GetInt("x-mismatched-int"); x != 1 { |
| t.Errorf("GetInt('x-mismatched-int') = %v, want 1", x) |
| } |
| |
| IncrementMapInt("requests", "orange", 1); |
| if x := GetMapInt("x-mismatched-map", "orange"); x != 1 { |
| t.Errorf("GetMapInt('x-mismatched-map', 'orange') = %v, want 1", x) |
| } |
| |
| SetStr("requests", "apple"); |
| if s := GetStr("x-mismatched-str"); s != "apple" { |
| t.Errorf("GetStr('x-mismatched-str') = %q, want 'apple'", s) |
| } |
| } |
| |
| func TestMapCounter(t *testing.T) { |
| // Unknown exvar should be zero. |
| if x := GetMapInt("colours", "red"); x != 0 { |
| t.Errorf("GetMapInt(non, existent) = %v, want 0", x) |
| } |
| |
| IncrementMapInt("colours", "red", 1); |
| IncrementMapInt("colours", "red", 2); |
| IncrementMapInt("colours", "blue", 4); |
| if x := GetMapInt("colours", "red"); x != 3 { |
| t.Errorf("GetMapInt('colours', 'red') = %v, want 3", x) |
| } |
| if x := GetMapInt("colours", "blue"); x != 4 { |
| t.Errorf("GetMapInt('colours', 'blue') = %v, want 4", x) |
| } |
| |
| // TODO(dsymonds): Test String() |
| } |
| |
| func hammer(name string, total int, done chan <- int) { |
| for i := 0; i < total; i++ { |
| IncrementInt(name, 1) |
| } |
| done <- 1 |
| } |
| |
| func TestHammer(t *testing.T) { |
| SetInt("hammer-times", 0); |
| sync := make(chan int); |
| hammer_times := int(1e5); |
| go hammer("hammer-times", hammer_times, sync); |
| go hammer("hammer-times", hammer_times, sync); |
| <-sync; |
| <-sync; |
| if final := GetInt("hammer-times"); final != 2 * hammer_times { |
| t.Errorf("hammer-times = %v, want %v", final, 2 * hammer_times) |
| } |
| } |