2018-02-09 12:15:28 +08:00
|
|
|
// Copyright 2015 Light Code Labs, LLC
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
// you may not use this file except in compliance with the License.
|
|
|
|
// You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
// See the License for the specific language governing permissions and
|
|
|
|
// limitations under the License.
|
|
|
|
|
2018-03-23 08:05:31 +08:00
|
|
|
package telemetry
|
2018-02-09 12:15:28 +08:00
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/google/uuid"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestInit(t *testing.T) {
|
|
|
|
reset()
|
|
|
|
|
|
|
|
id := doInit(t) // should not panic
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
if r := recover(); r == nil {
|
|
|
|
t.Errorf("Second call to Init should have panicked")
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
Init(id) // should panic
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInitEmptyUUID(t *testing.T) {
|
|
|
|
reset()
|
|
|
|
defer func() {
|
|
|
|
if r := recover(); r == nil {
|
|
|
|
t.Errorf("Call to Init with empty UUID should have panicked")
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
Init(uuid.UUID([16]byte{}))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSet(t *testing.T) {
|
|
|
|
reset()
|
|
|
|
|
|
|
|
// should be no-op since we haven't called Init() yet
|
|
|
|
Set("test1", "foobar")
|
|
|
|
if _, ok := buffer["test"]; ok {
|
|
|
|
t.Errorf("Should not have inserted item when not initialized")
|
|
|
|
}
|
|
|
|
|
|
|
|
// should work after we've initialized
|
|
|
|
doInit(t)
|
|
|
|
Set("test1", "foobar")
|
|
|
|
val, ok := buffer["test1"]
|
|
|
|
if !ok {
|
|
|
|
t.Errorf("Expected value to be in buffer, but it wasn't")
|
|
|
|
} else if val.(string) != "foobar" {
|
|
|
|
t.Errorf("Expected 'foobar', got '%v'", val)
|
|
|
|
}
|
|
|
|
|
|
|
|
// should not overfill buffer
|
|
|
|
maxBufferItemsTmp := maxBufferItems
|
|
|
|
maxBufferItems = 10
|
|
|
|
for i := 0; i < maxBufferItems+1; i++ {
|
|
|
|
Set(fmt.Sprintf("overfill_%d", i), "foobar")
|
|
|
|
}
|
|
|
|
if len(buffer) > maxBufferItems {
|
|
|
|
t.Errorf("Should not exceed max buffer size (%d); has %d items",
|
|
|
|
maxBufferItems, len(buffer))
|
|
|
|
}
|
|
|
|
maxBufferItems = maxBufferItemsTmp
|
|
|
|
|
|
|
|
// Should overwrite values
|
|
|
|
Set("test1", "foobar2")
|
|
|
|
val, ok = buffer["test1"]
|
|
|
|
if !ok {
|
|
|
|
t.Errorf("Expected value to be in buffer, but it wasn't")
|
|
|
|
} else if val.(string) != "foobar2" {
|
|
|
|
t.Errorf("Expected 'foobar2', got '%v'", val)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// doInit calls Init() with a valid UUID
|
|
|
|
// and returns it.
|
|
|
|
func doInit(t *testing.T) uuid.UUID {
|
|
|
|
id, err := uuid.Parse(testUUID)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatalf("Could not make UUID: %v", err)
|
|
|
|
}
|
|
|
|
Init(id)
|
|
|
|
return id
|
|
|
|
}
|
|
|
|
|
|
|
|
// reset resets all the lovely package-level state;
|
|
|
|
// can be used as a set up function in tests.
|
|
|
|
func reset() {
|
|
|
|
instanceUUID = uuid.UUID{}
|
|
|
|
buffer = make(map[string]interface{})
|
|
|
|
bufferItemCount = 0
|
|
|
|
updating = false
|
|
|
|
enabled = false
|
|
|
|
}
|
|
|
|
|
|
|
|
const testUUID = "0b6cfa22-0d4c-11e8-b11b-7a0058e13201"
|