From 2c2f9852fef1d85d8a08e6d763777ccea3797648 Mon Sep 17 00:00:00 2001 From: Daniil Rutskiy Date: Thu, 19 Nov 2020 03:15:26 +0300 Subject: [PATCH] Add missing tests for attributesMap (#1337) * Rename sdk/trace/attributesMap.go -> sdk/trace/attributesmap.go Signed-off-by: Daniil Rutskiy * Add missing tests for attributesMap Signed-off-by: Daniil Rutskiy * Update CHANGELOG.md Signed-off-by: Daniil Rutskiy * Add missing license header Signed-off-by: Daniil Rutskiy * Delete underscores in test names Signed-off-by: Daniil Rutskiy * Tests clean up Signed-off-by: Daniil Rutskiy --- CHANGELOG.md | 1 + .../{attributesMap.go => attributesmap.go} | 0 sdk/trace/attributesmap_test.go | 98 +++++++++++++++++++ 3 files changed, 99 insertions(+) rename sdk/trace/{attributesMap.go => attributesmap.go} (100%) create mode 100644 sdk/trace/attributesmap_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 011cb37f9..841ed03a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Add an opencensus to opentelemetry tracing bridge. (#1305) - Add a parent context argument to `SpanProcessor.OnStart` to follow the specification. (#1333) - Add an opencensus binary propagation implementation. (#1334) +- Add missing tests for `sdk/trace/attributes_map.go`. (#1337) ### Changed diff --git a/sdk/trace/attributesMap.go b/sdk/trace/attributesmap.go similarity index 100% rename from sdk/trace/attributesMap.go rename to sdk/trace/attributesmap.go diff --git a/sdk/trace/attributesmap_test.go b/sdk/trace/attributesmap_test.go new file mode 100644 index 000000000..be16e4597 --- /dev/null +++ b/sdk/trace/attributesmap_test.go @@ -0,0 +1,98 @@ +// Copyright The OpenTelemetry Authors +// +// 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. + +package trace + +import ( + "fmt" + "testing" + + "go.opentelemetry.io/otel/label" + export "go.opentelemetry.io/otel/sdk/export/trace" +) + +const testKeyFmt = "test-key-%d" + +func TestAttributesMap(t *testing.T) { + wantCapacity := 128 + attrMap := newAttributesMap(wantCapacity) + + for i := 0; i < 256; i++ { + attrMap.add(label.Int(fmt.Sprintf(testKeyFmt, i), i)) + } + if attrMap.capacity != wantCapacity { + t.Errorf("attrMap.capacity: got '%d'; want '%d'", attrMap.capacity, wantCapacity) + } + + if attrMap.droppedCount != wantCapacity { + t.Errorf("attrMap.droppedCount: got '%d'; want '%d'", attrMap.droppedCount, wantCapacity) + } + + for i := 0; i < wantCapacity; i++ { + key := label.Key(fmt.Sprintf(testKeyFmt, i)) + _, ok := attrMap.attributes[key] + if ok { + t.Errorf("key %q should be dropped", testKeyFmt) + } + } + for i := wantCapacity; i < 256; i++ { + key := label.Key(fmt.Sprintf(testKeyFmt, i)) + _, ok := attrMap.attributes[key] + if !ok { + t.Errorf("key %q should not be dropped", key) + } + } +} + +func TestAttributesMapGetOldestRemoveOldest(t *testing.T) { + attrMap := newAttributesMap(128) + + for i := 0; i < 128; i++ { + attrMap.add(label.Int(fmt.Sprintf(testKeyFmt, i), i)) + } + + attrMap.removeOldest() + attrMap.removeOldest() + attrMap.removeOldest() + + for i := 0; i < 3; i++ { + key := label.Key(fmt.Sprintf(testKeyFmt, i)) + _, ok := attrMap.attributes[key] + if ok { + t.Errorf("key %q should be removed", key) + } + } +} + +func TestAttributesMapToSpanData(t *testing.T) { + attrMap := newAttributesMap(128) + + for i := 0; i < 128; i++ { + attrMap.add(label.Int(fmt.Sprintf(testKeyFmt, i), i)) + } + + sd := &export.SpanData{} + + attrMap.toSpanData(sd) + + if attrMap.droppedCount != sd.DroppedAttributeCount { + t.Errorf("attrMap.droppedCount: got '%d'; want '%d'", attrMap.droppedCount, sd.DroppedAttributeCount) + } + + gotAttrLen := len(attrMap.attributes) + wantAttrLen := len(sd.Attributes) + if gotAttrLen != wantAttrLen { + t.Errorf("len(attrMap.attributes): got '%d'; want '%d'", gotAttrLen, wantAttrLen) + } +}