noop_test.go 2.7 KB
Newer Older
G
Gao Hongtao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// Copyright 2019 Tetrate Labs
//
// 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 go2sky

import (
	"context"
	"sync"
	"testing"
21 22 23
	"time"

	"github.com/tetratelabs/go2sky/reporter/grpc/common"
G
Gao Hongtao 已提交
24 25 26 27 28
)

type createFunc func() (Span, context.Context, error)

func TestCreateNoopSpan(t *testing.T) {
29
	tracer, _ := NewTracer("noop")
G
Gao Hongtao 已提交
30 31 32 33 34 35 36
	tests := []struct {
		name string
		n    createFunc
	}{
		{
			"Entry",
			func() (Span, context.Context, error) {
37 38 39
				return tracer.CreateEntrySpan(context.Background(), "entry", func() (s string, e error) {
					return "", nil
				})
G
Gao Hongtao 已提交
40 41 42 43 44
			},
		},
		{
			"Exit",
			func() (s Span, c context.Context, err error) {
45 46 47
				s, err = tracer.CreateExitSpan(context.Background(), "exit", "localhost:8080", func(header string) error {
					return nil
				})
G
Gao Hongtao 已提交
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
				return
			},
		},
		{
			"Local",
			func() (Span, context.Context, error) {
				return tracer.CreateLocalSpan(context.Background())
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			s, _, _ := tt.n()
			if _, ok := s.(*NoopSpan); !ok {
				t.Error("Should create noop span")
			}
		})
	}
}

func TestNoopSpanFromBegin(t *testing.T) {
	wg := &sync.WaitGroup{}
	wg.Add(1)
	r := &registerReporter{
		wg: wg,
	}
74 75 76 77
	tracer, _ := NewTracer("service", WithReporter(r))
	span, ctx, _ := tracer.CreateEntrySpan(context.Background(), "entry", func() (s string, e error) {
		return "", nil
	})
G
Gao Hongtao 已提交
78 79 80 81 82
	if _, ok := span.(*NoopSpan); !ok {
		t.Error("Should create noop span")
	}
	wg.Done()
	tracer.WaitUntilRegister()
83 84 85
	exitSpan, _ := tracer.CreateExitSpan(ctx, "exit", "localhost:8080", func(header string) error {
		return nil
	})
G
Gao Hongtao 已提交
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
	if _, ok := exitSpan.(*NoopSpan); !ok {
		t.Error("Should create noop span")
	}
	exitSpan.End()
	span.End()
}

type registerReporter struct {
	wg *sync.WaitGroup
}

func (r *registerReporter) Send(spans []ReportedSpan) {
}

func (r *registerReporter) Close() {
}

func (r *registerReporter) Register(service string, instance string) (int32, int32, error) {
	r.wg.Wait()
	return 0, 0, nil
}
107 108 109 110 111 112

func TestNoopMethod(t *testing.T) {
	n := NoopSpan{}
	n.SetOperationName("aa")
	n.SetPeer("localhost:1111")
	n.SetSpanLayer(common.SpanLayer_Database)
113
	n.SetComponent(2)
114 115 116 117
	n.Tag("key", "value")
	n.Log(time.Now(), "key", "value")
	n.Error(time.Now(), "key", "value")
}