| // 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, and return !ok. |
| x, ok := Get("requests"); |
| if x != 0 || ok { |
| t.Errorf("Get(nonexistent) = (%v, %v), want (%v, %v)", |
| x, ok, 0, false) |
| } |
| |
| Increment("requests", 1); |
| Increment("requests", 3); |
| x, ok = Get("requests"); |
| if x != 4 || !ok { |
| t.Errorf("Get('requests') = (%v, %v), want (%v, %v)", |
| x, ok, 4, true) |
| } |
| |
| out := String(); |
| if out != "requests 4\n" { |
| t.Errorf("String() = \"%v\", want \"requests 4\n\"", |
| out); |
| } |
| } |
| |
| func hammer(name string, total int, done chan <- int) { |
| for i := 0; i < total; i++ { |
| Increment(name, 1) |
| } |
| done <- 1 |
| } |
| |
| func TestHammer(t *testing.T) { |
| Set("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, ok := Get("hammer-times"); final != 2 * hammer_times { |
| t.Errorf("hammer-times = %v, want %v", final, 2 * hammer_times) |
| } |
| } |