1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2026-06-03 18:35:08 +02:00
Files
opentelemetry-go/sdk/resource/process_test.go
T

147 lines
3.6 KiB
Go
Raw Normal View History

2021-04-23 15:28:13 +00:00
// Copyright The OpenTelemetry Authors
2024-02-29 07:05:28 +01:00
// SPDX-License-Identifier: Apache-2.0
2021-04-23 15:28:13 +00:00
package resource_test
import (
"context"
"fmt"
"os"
"os/user"
"runtime"
"testing"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/sdk/resource"
)
var (
fakePID = 123
fakeExecutablePath = "/fake/path/mock"
fakeCommandArgs = []string{"mock", "-t", "30"}
fakeOwner = "gopher"
fakeRuntimeName = "gcmock"
fakeRuntimeVersion = "go1.2.3"
fakeRuntimeOS = "linux"
fakeRuntimeArch = "amd64"
)
var (
fakeExecutableName = "mock"
fakeRuntimeDescription = "go version go1.2.3 linux/amd64"
)
var (
fakePidProvider = func() int { return fakePID }
fakeExecutablePathProvider = func() (string, error) { return fakeExecutablePath, nil }
fakeCommandArgsProvider = func() []string { return fakeCommandArgs }
fakeOwnerProvider = func() (*user.User, error) { return &user.User{Username: fakeOwner}, nil }
fakeRuntimeNameProvider = func() string { return fakeRuntimeName }
fakeRuntimeVersionProvider = func() string { return fakeRuntimeVersion }
fakeRuntimeOSProvider = func() string { return fakeRuntimeOS }
fakeRuntimeArchProvider = func() string { return fakeRuntimeArch }
)
var (
fakeExecutablePathProviderWithError = func() (string, error) {
return "", fmt.Errorf("unable to get process executable")
2021-04-23 15:28:13 +00:00
}
fakeOwnerProviderWithError = func() (*user.User, error) {
return nil, fmt.Errorf("unable to get process user")
2021-04-23 15:28:13 +00:00
}
)
func mockProcessAttributesProviders() {
resource.SetOSProviders(
fakePidProvider,
fakeExecutablePathProvider,
fakeCommandArgsProvider,
)
resource.SetRuntimeProviders(
fakeRuntimeNameProvider,
fakeRuntimeVersionProvider,
fakeRuntimeOSProvider,
fakeRuntimeArchProvider,
)
resource.SetUserProviders(
fakeOwnerProvider,
)
}
func mockProcessAttributesProvidersWithErrors() {
resource.SetOSProviders(
fakePidProvider,
fakeExecutablePathProviderWithError,
fakeCommandArgsProvider,
)
resource.SetRuntimeProviders(
fakeRuntimeNameProvider,
fakeRuntimeVersionProvider,
fakeRuntimeOSProvider,
fakeRuntimeArchProvider,
)
resource.SetUserProviders(
fakeOwnerProviderWithError,
)
}
2021-07-08 20:35:27 +00:00
func restoreAttributesProviders() {
2021-04-23 15:28:13 +00:00
resource.SetDefaultOSProviders()
resource.SetDefaultRuntimeProviders()
resource.SetDefaultUserProviders()
2021-07-08 20:35:27 +00:00
resource.SetDefaultOSDescriptionProvider()
resource.SetDefaultContainerProviders()
2021-04-23 15:28:13 +00:00
}
func TestWithProcessFuncsErrors(t *testing.T) {
mockProcessAttributesProvidersWithErrors()
t.Run("WithExecutablePath", testWithProcessExecutablePathError)
t.Run("WithOwner", testWithProcessOwnerError)
2021-04-23 15:28:13 +00:00
2021-07-08 20:35:27 +00:00
restoreAttributesProviders()
2021-04-23 15:28:13 +00:00
}
func TestCommandArgs(t *testing.T) {
require.EqualValues(t, os.Args, resource.CommandArgs())
}
func TestRuntimeName(t *testing.T) {
2022-02-23 18:27:52 +01:00
if runtime.Compiler == "gc" {
require.EqualValues(t, "go", resource.RuntimeName())
} else {
require.EqualValues(t, runtime.Compiler, resource.RuntimeName())
}
2021-04-23 15:28:13 +00:00
}
func TestRuntimeOS(t *testing.T) {
require.EqualValues(t, runtime.GOOS, resource.RuntimeOS())
}
func TestRuntimeArch(t *testing.T) {
require.EqualValues(t, runtime.GOARCH, resource.RuntimeArch())
}
func testWithProcessExecutablePathError(t *testing.T) {
ctx := context.Background()
res, err := resource.New(ctx,
resource.WithProcessExecutablePath(),
)
require.Error(t, err)
require.EqualValues(t, map[string]string{}, toMap(res))
}
func testWithProcessOwnerError(t *testing.T) {
ctx := context.Background()
res, err := resource.New(ctx,
resource.WithProcessOwner(),
)
require.Error(t, err)
require.EqualValues(t, map[string]string{}, toMap(res))
}