Skip to content

Commit 3aef60a

Browse files
committed
Make changes based on PR (open-telemetry#459)
1 parent 1986b65 commit 3aef60a

File tree

4 files changed

+69
-57
lines changed

4 files changed

+69
-57
lines changed

idgenerator/aws/go.mod

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module go.opentelemetry.io/contrib/idgenerator/aws/xray
22

33
go 1.15
44

5-
require github.com/stretchr/testify v1.6.1
5+
require (
6+
github.com/stretchr/testify v1.6.1
7+
go.opentelemetry.io/otel v0.14.0
8+
)

idgenerator/aws/go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
22
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3+
github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo=
4+
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
35
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
46
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
57
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
68
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
79
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
10+
go.opentelemetry.io/otel v0.14.0 h1:YFBEfjCk9MTjaytCNSUkp9Q8lF7QJezA06T71FbQxLQ=
11+
go.opentelemetry.io/otel v0.14.0/go.mod h1:vH5xEuwy7Rts0GNtsCW3HYQoZDY+OmBJ6t1bFGGlxgw=
12+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
13+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
814
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
915
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1016
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=

idgenerator/aws/xray/aws_xray_idgenerator.go

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,32 @@ import (
1818
crand "crypto/rand"
1919
"encoding/binary"
2020
"encoding/hex"
21-
"log"
2221
"math/rand"
2322
"strconv"
2423
"sync"
2524
"time"
25+
26+
"go.opentelemetry.io/otel/trace"
27+
)
28+
29+
const (
30+
errConvertTimeToHex errorConst = "cannot convert current timestamp to hex"
2631
)
2732

28-
type spanID [8]byte
29-
type traceID [16]byte
33+
type errorConst string
3034

31-
// IDGenerator is an interface for generating new TraceIDs and SpanIDs
32-
type IDGenerator interface {
33-
NewTraceID() traceID
34-
NewSpanID() spanID
35+
func (e errorConst) Error() string {
36+
return string(e)
3537
}
3638

37-
type xRayIDGenerator struct {
39+
type IDGenerator struct {
3840
sync.Mutex
3941
randSource *rand.Rand
4042
}
4143

42-
// XRayIDGenerator returns an idGenerator used for sending traces to AWS X-Ray
43-
func XRayIDGenerator() IDGenerator {
44-
gen := &xRayIDGenerator{}
44+
// NewIDGenerator returns an idGenerator used for sending traces to AWS X-Ray
45+
func NewIDGenerator() *IDGenerator {
46+
gen := &IDGenerator{}
4547
var rngSeed int64
4648
err := binary.Read(crand.Reader, binary.LittleEndian, &rngSeed)
4749
if err != nil {
@@ -52,33 +54,37 @@ func XRayIDGenerator() IDGenerator {
5254
}
5355

5456
// NewSpanID returns a non-zero span ID from a randomly-chosen sequence.
55-
func (gen *xRayIDGenerator) NewSpanID() spanID {
57+
func (gen *IDGenerator) NewSpanID() trace.SpanID {
5658
gen.Lock()
5759
defer gen.Unlock()
58-
sid := spanID{}
60+
sid := trace.SpanID{}
5961
gen.randSource.Read(sid[:])
6062
return sid
6163
}
6264

6365
// NewTraceID returns a non-zero trace ID based on AWS X-Ray TraceID format.
6466
// (https://docs.aws.amazon.com/xray/latest/devguide/xray-api-sendingdata.html#xray-api-traceids)
65-
func (gen *xRayIDGenerator) NewTraceID() traceID {
67+
func (gen *IDGenerator) NewTraceID() (trace.TraceID, error) {
6668
gen.Lock()
6769
defer gen.Unlock()
6870

69-
tid := traceID{}
70-
currentTime := getCurrentTimeHex()
71+
tid := trace.TraceID{}
72+
currentTime, err := getCurrentTimeHex()
73+
if err != nil {
74+
var nilTraceID trace.TraceID
75+
return nilTraceID, err
76+
}
7177
copy(tid[:4], currentTime)
7278
gen.randSource.Read(tid[4:])
7379

74-
return tid
80+
return tid, nil
7581
}
7682

77-
func getCurrentTimeHex() []uint8 {
83+
func getCurrentTimeHex() ([]uint8, error) {
7884
currentTime := time.Now().Unix()
7985
currentTimeHex, err := hex.DecodeString(strconv.FormatInt(currentTime, 16))
8086
if err != nil {
81-
log.Fatalf("%s: %v", "Could not convert timestamp to hex", err)
87+
return nil, errConvertTimeToHex
8288
}
83-
return currentTimeHex
89+
return currentTimeHex, nil
8490
}

idgenerator/aws/xray/aws_xray_idgenerator_test.go

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,86 +16,83 @@ package aws
1616

1717
import (
1818
"bytes"
19-
"encoding/hex"
2019
"strconv"
2120
"testing"
2221
"time"
2322

2423
"github.com/stretchr/testify/assert"
25-
)
26-
27-
func (t traceID) convertTraceIDToHexString() string {
28-
return hex.EncodeToString(t[:])
29-
}
3024

31-
func (s spanID) convertSpanIDToHexString() string {
32-
return hex.EncodeToString(s[:])
33-
}
25+
"go.opentelemetry.io/otel/trace"
26+
)
3427

3528
func TestAwsXRayTraceIdIsValidLength(t *testing.T) {
36-
idg := XRayIDGenerator()
37-
traceIDHex := idg.NewTraceID().convertTraceIDToHexString()
38-
traceIDLength := len(traceIDHex)
39-
expectedTraceIDLength := 32
29+
idg := NewIDGenerator()
30+
traceID, _ := idg.NewTraceID()
4031

41-
assert.Equal(t, traceIDLength, expectedTraceIDLength, "TraceID has incorrect length.")
32+
expectedTraceIDLength := 32
33+
assert.Equal(t, len(traceID.String()), expectedTraceIDLength, "TraceID has incorrect length.")
4234
}
4335

4436
func TestAwsXRayTraceIdIsUnique(t *testing.T) {
45-
idg := XRayIDGenerator()
46-
traceID1 := idg.NewTraceID().convertTraceIDToHexString()
47-
traceID2 := idg.NewTraceID().convertTraceIDToHexString()
37+
idg := NewIDGenerator()
38+
traceID1, _ := idg.NewTraceID()
39+
traceID2, _ := idg.NewTraceID()
4840

49-
assert.NotEqual(t, traceID1, traceID2, "TraceID should be unique")
41+
assert.NotEqual(t, traceID1.String(), traceID2.String(), "TraceID should be unique")
5042
}
5143

5244
func TestAwsXRayTraceIdTimeStampInBounds(t *testing.T) {
5345

54-
idg := XRayIDGenerator()
46+
idg := NewIDGenerator()
5547

5648
previousTime := time.Now().Unix()
5749

58-
traceIDHex := idg.NewTraceID().convertTraceIDToHexString()
59-
currentTime, err := strconv.ParseInt(traceIDHex[0:8], 16, 64)
60-
61-
nextTime := time.Now().Unix()
50+
traceID, err := idg.NewTraceID()
51+
if err != nil {
52+
t.Error(err)
53+
}
6254

55+
currentTime, err := strconv.ParseInt(traceID.String()[0:8], 16, 64)
6356
if err != nil {
6457
t.Error(err)
6558
}
6659

60+
nextTime := time.Now().Unix()
61+
6762
assert.LessOrEqual(t, previousTime, currentTime, "TraceID is generated incorrectly with the wrong timestamp.")
6863
assert.LessOrEqual(t, currentTime, nextTime, "TraceID is generated incorrectly with the wrong timestamp.")
6964
}
7065

7166
func TestAwsXRayTraceIdIsNotNil(t *testing.T) {
72-
var nilTraceID traceID
73-
idg := XRayIDGenerator()
74-
traceID := idg.NewTraceID()
67+
var nilTraceID trace.TraceID
68+
idg := NewIDGenerator()
69+
traceID, err := idg.NewTraceID()
70+
if err != nil {
71+
t.Error(err)
72+
}
7573

7674
assert.False(t, bytes.Equal(traceID[:], nilTraceID[:]), "TraceID cannot be Nil.")
7775
}
7876

7977
func TestAwsXRaySpanIdIsValidLength(t *testing.T) {
80-
idg := XRayIDGenerator()
81-
spanIDHex := idg.NewSpanID().convertSpanIDToHexString()
82-
spanIDLength := len(spanIDHex)
78+
idg := NewIDGenerator()
79+
spanID := idg.NewSpanID()
8380
expectedSpanIDLength := 16
8481

85-
assert.Equal(t, spanIDLength, expectedSpanIDLength, "SpanID has incorrect length")
82+
assert.Equal(t, len(spanID.String()), expectedSpanIDLength, "SpanID has incorrect length")
8683
}
8784

8885
func TestAwsXRaySpanIdIsUnique(t *testing.T) {
89-
idg := XRayIDGenerator()
90-
spanID1 := idg.NewSpanID().convertSpanIDToHexString()
91-
spanID2 := idg.NewSpanID().convertSpanIDToHexString()
86+
idg := NewIDGenerator()
87+
spanID1 := idg.NewSpanID()
88+
spanID2 := idg.NewSpanID()
9289

93-
assert.NotEqual(t, spanID1, spanID2, "SpanID should be unique")
90+
assert.NotEqual(t, spanID1.String(), spanID2.String(), "SpanID should be unique")
9491
}
9592

9693
func TestAwsXRaySpanIdIsNotNil(t *testing.T) {
97-
var nilSpanID spanID
98-
idg := XRayIDGenerator()
94+
var nilSpanID trace.SpanID
95+
idg := NewIDGenerator()
9996
spanID := idg.NewSpanID()
10097

10198
assert.False(t, bytes.Equal(spanID[:], nilSpanID[:]), "SpanID cannot be Nil.")

0 commit comments

Comments
 (0)