...
1
16
17 package remote
18
19 import (
20 "context"
21 "os"
22 "testing"
23 "time"
24
25 sdktrace "go.opentelemetry.io/otel/sdk/trace"
26 "go.opentelemetry.io/otel/sdk/trace/tracetest"
27 oteltrace "go.opentelemetry.io/otel/trace"
28
29 "github.com/stretchr/testify/assert"
30 "github.com/stretchr/testify/require"
31 utilfeature "k8s.io/apiserver/pkg/util/feature"
32 featuregatetesting "k8s.io/component-base/featuregate/testing"
33 internalapi "k8s.io/cri-api/pkg/apis"
34 apitest "k8s.io/cri-api/pkg/apis/testing"
35 "k8s.io/kubernetes/pkg/features"
36 fakeremote "k8s.io/kubernetes/pkg/kubelet/cri/remote/fake"
37 "k8s.io/kubernetes/pkg/kubelet/util"
38 )
39
40 const (
41 defaultConnectionTimeout = 15 * time.Second
42 )
43
44
45
46
47 func createAndStartFakeRemoteRuntime(t *testing.T) (*fakeremote.RemoteRuntime, string) {
48 endpoint, err := fakeremote.GenerateEndpoint()
49 require.NoError(t, err)
50
51 fakeRuntime := fakeremote.NewFakeRemoteRuntime()
52 fakeRuntime.Start(endpoint)
53
54 return fakeRuntime, endpoint
55 }
56
57 func createRemoteRuntimeService(endpoint string, t *testing.T) internalapi.RuntimeService {
58 runtimeService, err := NewRemoteRuntimeService(endpoint, defaultConnectionTimeout, oteltrace.NewNoopTracerProvider())
59
60 require.NoError(t, err)
61
62 return runtimeService
63 }
64
65 func createRemoteRuntimeServiceWithTracerProvider(endpoint string, tp oteltrace.TracerProvider, t *testing.T) internalapi.RuntimeService {
66 runtimeService, err := NewRemoteRuntimeService(endpoint, defaultConnectionTimeout, tp)
67 require.NoError(t, err)
68
69 return runtimeService
70 }
71
72 func TestGetSpans(t *testing.T) {
73 defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.KubeletTracing, true)()
74 fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
75 defer func() {
76 fakeRuntime.Stop()
77
78 if addr, _, err := util.GetAddressAndDialer(endpoint); err == nil {
79 if _, err := os.Stat(addr); err == nil {
80 os.Remove(addr)
81 }
82 }
83 }()
84 exp := tracetest.NewInMemoryExporter()
85 tp := sdktrace.NewTracerProvider(
86 sdktrace.WithBatcher(exp),
87 )
88 ctx := context.Background()
89 rtSvc := createRemoteRuntimeServiceWithTracerProvider(endpoint, tp, t)
90 _, err := rtSvc.Version(ctx, apitest.FakeVersion)
91 require.NoError(t, err)
92 err = tp.ForceFlush(ctx)
93 require.NoError(t, err)
94 assert.NotEmpty(t, exp.GetSpans())
95 }
96
97 func TestVersion(t *testing.T) {
98 fakeRuntime, endpoint := createAndStartFakeRemoteRuntime(t)
99 defer func() {
100 fakeRuntime.Stop()
101
102 if addr, _, err := util.GetAddressAndDialer(endpoint); err == nil {
103 if _, err := os.Stat(addr); err == nil {
104 os.Remove(addr)
105 }
106 }
107 }()
108
109 ctx := context.Background()
110 rtSvc := createRemoteRuntimeService(endpoint, t)
111 version, err := rtSvc.Version(ctx, apitest.FakeVersion)
112 require.NoError(t, err)
113 assert.Equal(t, apitest.FakeVersion, version.Version)
114 assert.Equal(t, apitest.FakeRuntimeName, version.RuntimeName)
115 }
116
View as plain text