233 lines
6.4 KiB
TypeScript
233 lines
6.4 KiB
TypeScript
/*
|
|
* Copyright The OpenTelemetry Authors
|
|
*
|
|
* 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
|
|
*
|
|
* https://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.
|
|
*/
|
|
|
|
import { SDK_INFO } from '@opentelemetry/core';
|
|
import {
|
|
ATTR_SERVICE_NAME,
|
|
ATTR_SERVICE_VERSION,
|
|
ATTR_TELEMETRY_SDK_LANGUAGE,
|
|
ATTR_TELEMETRY_SDK_NAME,
|
|
ATTR_TELEMETRY_SDK_VERSION,
|
|
} from '@opentelemetry/semantic-conventions';
|
|
import {
|
|
ATTR_CLOUD_ACCOUNT_ID,
|
|
ATTR_CLOUD_AVAILABILITY_ZONE,
|
|
ATTR_CLOUD_PROVIDER,
|
|
ATTR_CLOUD_REGION,
|
|
ATTR_CONTAINER_ID,
|
|
ATTR_CONTAINER_IMAGE_NAME,
|
|
ATTR_CONTAINER_IMAGE_TAGS,
|
|
ATTR_CONTAINER_NAME,
|
|
ATTR_HOST_ID,
|
|
ATTR_HOST_IMAGE_ID,
|
|
ATTR_HOST_IMAGE_NAME,
|
|
ATTR_HOST_IMAGE_VERSION,
|
|
ATTR_HOST_NAME,
|
|
ATTR_HOST_TYPE,
|
|
ATTR_K8S_CLUSTER_NAME,
|
|
ATTR_K8S_DEPLOYMENT_NAME,
|
|
ATTR_K8S_NAMESPACE_NAME,
|
|
ATTR_K8S_POD_NAME,
|
|
ATTR_SERVICE_INSTANCE_ID,
|
|
ATTR_SERVICE_NAMESPACE,
|
|
} from '../src/semconv';
|
|
import {
|
|
assertCloudResource,
|
|
assertContainerResource,
|
|
assertHostResource,
|
|
assertK8sResource,
|
|
assertServiceResource,
|
|
assertTelemetrySDKResource,
|
|
} from './util/resource-assertions';
|
|
|
|
describe('assertCloudResource', () => {
|
|
it('requires one cloud label', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_CLOUD_PROVIDER]: 'gcp',
|
|
},
|
|
};
|
|
assertCloudResource(resource, {});
|
|
});
|
|
|
|
it('validates optional attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_CLOUD_PROVIDER]: 'gcp',
|
|
[ATTR_CLOUD_ACCOUNT_ID]: 'opentelemetry',
|
|
[ATTR_CLOUD_REGION]: 'us-central1',
|
|
[ATTR_CLOUD_AVAILABILITY_ZONE]: 'us-central1-a',
|
|
},
|
|
};
|
|
assertCloudResource(resource, {
|
|
provider: 'gcp',
|
|
accountId: 'opentelemetry',
|
|
region: 'us-central1',
|
|
zone: 'us-central1-a',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('assertContainerResource', () => {
|
|
it('requires one container label', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_CONTAINER_NAME]: 'opentelemetry-autoconf',
|
|
},
|
|
};
|
|
assertContainerResource(resource, {});
|
|
});
|
|
|
|
it('validates optional attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_CONTAINER_NAME]: 'opentelemetry-autoconf',
|
|
[ATTR_CONTAINER_ID]: 'abc',
|
|
[ATTR_CONTAINER_IMAGE_NAME]: 'gcr.io/opentelemetry/operator',
|
|
[ATTR_CONTAINER_IMAGE_TAGS]: ['0.1'],
|
|
},
|
|
};
|
|
assertContainerResource(resource, {
|
|
name: 'opentelemetry-autoconf',
|
|
id: 'abc',
|
|
imageName: 'gcr.io/opentelemetry/operator',
|
|
imageTags: ['0.1'],
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('assertHostResource', () => {
|
|
it('requires one host label', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_HOST_ID]: 'opentelemetry-test-id',
|
|
},
|
|
};
|
|
assertHostResource(resource, {});
|
|
});
|
|
|
|
it('validates optional attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_HOST_ID]: 'opentelemetry-test-id',
|
|
[ATTR_HOST_NAME]: 'opentelemetry-test-name',
|
|
[ATTR_HOST_TYPE]: 'n1-standard-1',
|
|
[ATTR_HOST_IMAGE_NAME]:
|
|
'infra-ami-eks-worker-node-7d4ec78312, CentOS-8-x86_64-1905',
|
|
[ATTR_HOST_IMAGE_ID]: 'ami-07b06b442921831e5',
|
|
[ATTR_HOST_IMAGE_VERSION]: '0.1',
|
|
},
|
|
};
|
|
assertHostResource(resource, {
|
|
hostName: 'opentelemetry-test-hostname',
|
|
id: 'opentelemetry-test-id',
|
|
name: 'opentelemetry-test-name',
|
|
hostType: 'n1-standard-1',
|
|
imageName: 'infra-ami-eks-worker-node-7d4ec78312, CentOS-8-x86_64-1905',
|
|
imageId: 'ami-07b06b442921831e5',
|
|
imageVersion: '0.1',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('assertK8sResource', () => {
|
|
it('requires one k8s label', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_K8S_CLUSTER_NAME]: 'opentelemetry-cluster',
|
|
},
|
|
};
|
|
assertK8sResource(resource, {});
|
|
});
|
|
|
|
it('validates optional attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_K8S_CLUSTER_NAME]: 'opentelemetry-cluster',
|
|
[ATTR_K8S_NAMESPACE_NAME]: 'default',
|
|
[ATTR_K8S_POD_NAME]: 'opentelemetry-pod-autoconf',
|
|
[ATTR_K8S_DEPLOYMENT_NAME]: 'opentelemetry',
|
|
},
|
|
};
|
|
assertK8sResource(resource, {
|
|
clusterName: 'opentelemetry-cluster',
|
|
namespaceName: 'default',
|
|
podName: 'opentelemetry-pod-autoconf',
|
|
deploymentName: 'opentelemetry',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('assertTelemetrySDKResource', () => {
|
|
it('uses default validations', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_TELEMETRY_SDK_NAME]: SDK_INFO[ATTR_TELEMETRY_SDK_NAME],
|
|
[ATTR_TELEMETRY_SDK_LANGUAGE]: SDK_INFO[ATTR_TELEMETRY_SDK_LANGUAGE],
|
|
[ATTR_TELEMETRY_SDK_VERSION]: SDK_INFO[ATTR_TELEMETRY_SDK_VERSION],
|
|
},
|
|
};
|
|
assertTelemetrySDKResource(resource, {});
|
|
});
|
|
|
|
it('validates optional attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_TELEMETRY_SDK_NAME]: 'opentelemetry',
|
|
[ATTR_TELEMETRY_SDK_LANGUAGE]: 'nodejs',
|
|
[ATTR_TELEMETRY_SDK_VERSION]: '0.1.0',
|
|
},
|
|
};
|
|
assertTelemetrySDKResource(resource, {
|
|
name: 'opentelemetry',
|
|
language: 'nodejs',
|
|
version: '0.1.0',
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('assertServiceResource', () => {
|
|
it('validates required attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_SERVICE_NAME]: 'shoppingcart',
|
|
[ATTR_SERVICE_INSTANCE_ID]: '627cc493-f310-47de-96bd-71410b7dec09',
|
|
},
|
|
};
|
|
assertServiceResource(resource, {
|
|
name: 'shoppingcart',
|
|
instanceId: '627cc493-f310-47de-96bd-71410b7dec09',
|
|
});
|
|
});
|
|
|
|
it('validates optional attributes', () => {
|
|
const resource = {
|
|
attributes: {
|
|
[ATTR_SERVICE_NAME]: 'shoppingcart',
|
|
[ATTR_SERVICE_INSTANCE_ID]: '627cc493-f310-47de-96bd-71410b7dec09',
|
|
[ATTR_SERVICE_NAMESPACE]: 'shop',
|
|
[ATTR_SERVICE_VERSION]: '0.1.0',
|
|
},
|
|
};
|
|
assertServiceResource(resource, {
|
|
name: 'shoppingcart',
|
|
instanceId: '627cc493-f310-47de-96bd-71410b7dec09',
|
|
namespace: 'shop',
|
|
version: '0.1.0',
|
|
});
|
|
});
|
|
});
|