opentelemetry-java-instrume.../instrumentation/kubernetes-client-7.0/javaagent-unit-tests/src/test/groovy/KubernetesRequestUtilsTest....

88 lines
5.5 KiB
Groovy

/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import io.opentelemetry.javaagent.instrumentation.kubernetesclient.KubernetesRequestDigest
import io.opentelemetry.javaagent.instrumentation.kubernetesclient.KubernetesResource
import io.opentelemetry.javaagent.instrumentation.kubernetesclient.KubernetesVerb
import spock.lang.Specification
class KubernetesRequestUtilsTest extends Specification {
def "asserting non-resource requests should work"() {
expect:
!KubernetesRequestDigest.isResourceRequest("/api")
!KubernetesRequestDigest.isResourceRequest("/apis")
!KubernetesRequestDigest.isResourceRequest("/apis/v1")
!KubernetesRequestDigest.isResourceRequest("/healthz")
!KubernetesRequestDigest.isResourceRequest("/swagger.json")
!KubernetesRequestDigest.isResourceRequest("/api/v1")
!KubernetesRequestDigest.isResourceRequest("/api/v1/")
!KubernetesRequestDigest.isResourceRequest("/apis/apps/v1")
!KubernetesRequestDigest.isResourceRequest("/apis/apps/v1/")
}
def "asserting resource requests should work"() {
expect:
KubernetesRequestDigest.isResourceRequest("/apis/example.io/v1/foos")
KubernetesRequestDigest.isResourceRequest("/apis/example.io/v1/namespaces/default/foos")
KubernetesRequestDigest.isResourceRequest("/api/v1/namespaces")
KubernetesRequestDigest.isResourceRequest("/api/v1/pods")
KubernetesRequestDigest.isResourceRequest("/api/v1/namespaces/default/pods")
}
def "parsing core resource from url-path should work"(String urlPath, String apiGroup, String apiVersion, String resource, String subResource, String namespace, String name) {
expect:
KubernetesResource.parseCoreResource(urlPath).apiGroup == apiGroup
KubernetesResource.parseCoreResource(urlPath).apiVersion == apiVersion
KubernetesResource.parseCoreResource(urlPath).resource == resource
KubernetesResource.parseCoreResource(urlPath).subResource == subResource
KubernetesResource.parseCoreResource(urlPath).namespace == namespace
KubernetesResource.parseCoreResource(urlPath).name == name
where:
urlPath | apiGroup | apiVersion | resource | subResource | namespace | name
"/api/v1/pods" | "" | "v1" | "pods" | null | null | null
"/api/v1/namespaces/default/pods" | "" | "v1" | "pods" | null | "default" | null
"/api/v1/namespaces/default/pods/foo" | "" | "v1" | "pods" | null | "default" | "foo"
"/api/v1/namespaces/default/pods/foo/exec" | "" | "v1" | "pods" | "exec" | "default" | "foo"
}
def "parsing regular non-core resource from url-path should work"(String urlPath, String apiGroup, String apiVersion, String resource, String subResource, String namespace, String name) {
expect:
KubernetesResource.parseRegularResource(urlPath).apiGroup == apiGroup
KubernetesResource.parseRegularResource(urlPath).apiVersion == apiVersion
KubernetesResource.parseRegularResource(urlPath).resource == resource
KubernetesResource.parseRegularResource(urlPath).subResource == subResource
KubernetesResource.parseRegularResource(urlPath).namespace == namespace
KubernetesResource.parseRegularResource(urlPath).name == name
where:
urlPath | apiGroup | apiVersion | resource | subResource | namespace | name
"/apis/apps/v1/deployments" | "apps" | "v1" | "deployments" | null | null | null
"/apis/apps/v1/namespaces/default/deployments" | "apps" | "v1" | "deployments" | null | "default" | null
"/apis/apps/v1/namespaces/default/deployments/foo" | "apps" | "v1" | "deployments" | null | "default" | "foo"
"/apis/apps/v1/namespaces/default/deployments/foo/status" | "apps" | "v1" | "deployments" | "status" | "default" | "foo"
"/apis/example.io/v1alpha1/foos" | "example.io" | "v1alpha1" | "foos" | null | null | null
"/apis/example.io/v1alpha1/namespaces/default/foos" | "example.io" | "v1alpha1" | "foos" | null | "default" | null
"/apis/example.io/v1alpha1/namespaces/default/foos/foo" | "example.io" | "v1alpha1" | "foos" | null | "default" | "foo"
"/apis/example.io/v1alpha1/namespaces/default/foos/foo/status" | "example.io" | "v1alpha1" | "foos" | "status" | "default" | "foo"
}
def "parsing kubernetes request verbs should work"(String httpVerb, boolean hasNamePathParam, boolean hasWatchParam, KubernetesVerb kubernetesVerb) {
expect:
KubernetesVerb.of(httpVerb, hasNamePathParam, hasWatchParam) == kubernetesVerb
where:
httpVerb | hasNamePathParam | hasWatchParam | kubernetesVerb
"GET" | true | false | KubernetesVerb.GET
"GET" | false | true | KubernetesVerb.WATCH
"GET" | false | false | KubernetesVerb.LIST
"POST" | false | false | KubernetesVerb.CREATE
"PUT" | false | false | KubernetesVerb.UPDATE
"PATCH" | false | false | KubernetesVerb.PATCH
"DELETE" | true | false | KubernetesVerb.DELETE
"DELETE" | false | false | KubernetesVerb.DELETE_COLLECTION
}
}