1
16
17 package remote
18
19 import (
20 "context"
21 "os"
22 "testing"
23
24 "github.com/stretchr/testify/assert"
25 "github.com/stretchr/testify/require"
26 sdktrace "go.opentelemetry.io/otel/sdk/trace"
27 "go.opentelemetry.io/otel/sdk/trace/tracetest"
28 oteltrace "go.opentelemetry.io/otel/trace"
29 utilfeature "k8s.io/apiserver/pkg/util/feature"
30 featuregatetesting "k8s.io/component-base/featuregate/testing"
31 internalapi "k8s.io/cri-api/pkg/apis"
32 runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
33 "k8s.io/kubernetes/pkg/features"
34 "k8s.io/kubernetes/pkg/kubelet/util"
35 )
36
37 func createRemoteImageServiceWithTracerProvider(endpoint string, tp oteltrace.TracerProvider, t *testing.T) internalapi.ImageManagerService {
38 runtimeService, err := NewRemoteImageService(endpoint, defaultConnectionTimeout, tp)
39 require.NoError(t, err)
40
41 return runtimeService
42 }
43
44 func createRemoteImageServiceWithoutTracerProvider(endpoint string, t *testing.T) internalapi.ImageManagerService {
45 runtimeService, err := NewRemoteImageService(endpoint, defaultConnectionTimeout, oteltrace.NewNoopTracerProvider())
46 require.NoError(t, err)
47
48 return runtimeService
49 }
50
51 func TestImageServiceSpansWithTP(t *testing.T) {
52 defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.KubeletTracing, true)()
53 fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
54 defer func() {
55 fakeRuntime.Stop()
56
57 if addr, _, err := util.GetAddressAndDialer(endpoint); err == nil {
58 if _, err := os.Stat(addr); err == nil {
59 os.Remove(addr)
60 }
61 }
62 }()
63 exp := tracetest.NewInMemoryExporter()
64 tp := sdktrace.NewTracerProvider(
65 sdktrace.WithBatcher(exp),
66 )
67 ctx := context.Background()
68 imgSvc := createRemoteImageServiceWithTracerProvider(endpoint, tp, t)
69 imgRef, err := imgSvc.PullImage(ctx, &runtimeapi.ImageSpec{Image: "busybox"}, nil, nil)
70 assert.NoError(t, err)
71 assert.Equal(t, "busybox", imgRef)
72 require.NoError(t, err)
73 err = tp.ForceFlush(ctx)
74 require.NoError(t, err)
75 assert.NotEmpty(t, exp.GetSpans())
76 }
77
78 func TestImageServiceSpansWithoutTP(t *testing.T) {
79 defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.KubeletTracing, true)()
80 fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
81 defer func() {
82 fakeRuntime.Stop()
83
84 if addr, _, err := util.GetAddressAndDialer(endpoint); err == nil {
85 if _, err := os.Stat(addr); err == nil {
86 os.Remove(addr)
87 }
88 }
89 }()
90 exp := tracetest.NewInMemoryExporter()
91 tp := sdktrace.NewTracerProvider(
92 sdktrace.WithBatcher(exp),
93 )
94 ctx := context.Background()
95 imgSvc := createRemoteImageServiceWithoutTracerProvider(endpoint, t)
96 imgRef, err := imgSvc.PullImage(ctx, &runtimeapi.ImageSpec{Image: "busybox"}, nil, nil)
97 assert.NoError(t, err)
98 assert.Equal(t, "busybox", imgRef)
99 require.NoError(t, err)
100 err = tp.ForceFlush(ctx)
101 require.NoError(t, err)
102 assert.Empty(t, exp.GetSpans())
103 }
104
View as plain text