Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import datadog.trace.api.civisibility.telemetry.tag.TestFrameworkInstrumentation;
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
import datadog.trace.bootstrap.instrumentation.api.AgentSpanContext;
import datadog.trace.bootstrap.instrumentation.api.Tags;
import datadog.trace.civisibility.codeowners.Codeowners;
import datadog.trace.civisibility.decorator.TestDecorator;
import datadog.trace.civisibility.domain.AbstractTestModule;
Expand Down Expand Up @@ -56,30 +57,36 @@ public ManualApiTestModule(
}

@Override
public TestSuiteImpl testSuiteStart(
public ManualApiTestSuite testSuiteStart(
String testSuiteName,
@Nullable Class<?> testClass,
@Nullable Long startTime,
boolean parallelized) {
return new TestSuiteImpl(
span.context(),
moduleName,
testSuiteName,
null,
testClass,
startTime,
parallelized,
InstrumentationType.MANUAL_API,
TestFrameworkInstrumentation.OTHER,
config,
metricCollector,
testDecorator,
sourcePathResolver,
codeowners,
linesResolver,
coverageStoreFactory,
executionResults,
Collections.emptyList(),
tagsPropagator::propagateCiVisibilityTags);
TestSuiteImpl suite =
new TestSuiteImpl(
span.context(),
moduleName,
testSuiteName,
null,
testClass,
startTime,
parallelized,
InstrumentationType.MANUAL_API,
TestFrameworkInstrumentation.OTHER, // for metric purposes, framework is OTHER
config,
metricCollector,
testDecorator,
sourcePathResolver,
codeowners,
linesResolver,
coverageStoreFactory,
executionResults,
Collections.emptyList(),
tagsPropagator::propagateCiVisibilityTags);

String frameworkName = testDecorator.component().toString();
suite.setTag(Tags.TEST_FRAMEWORK, frameworkName);

return new ManualApiTestSuite(suite, frameworkName);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package datadog.trace.civisibility.domain.manualapi;

import datadog.trace.api.civisibility.DDTest;
import datadog.trace.api.civisibility.DDTestSuite;
import datadog.trace.bootstrap.instrumentation.api.Tags;
import datadog.trace.civisibility.domain.TestImpl;
import datadog.trace.civisibility.domain.TestSuiteImpl;
import java.lang.reflect.Method;
import javax.annotation.Nullable;

/**
* Test suite that was created using manual API ({@link
* datadog.trace.api.civisibility.CIVisibility}).
*/
public class ManualApiTestSuite implements DDTestSuite {

private final TestSuiteImpl delegate;
private final String frameworkName;

public ManualApiTestSuite(TestSuiteImpl delegate, String frameworkName) {
this.delegate = delegate;
this.frameworkName = frameworkName;
}

@Override
public void setTag(String key, Object value) {
delegate.setTag(key, value);
}

@Override
public void setErrorInfo(Throwable error) {
delegate.setErrorInfo(error);
}

@Override
public void setSkipReason(String skipReason) {
delegate.setSkipReason(skipReason);
}

@Override
public void end(@Nullable Long endTime) {
delegate.end(endTime);
}

@Override
public DDTest testStart(String testName, @Nullable Method testMethod, @Nullable Long startTime) {
TestImpl test = delegate.testStart(testName, testMethod, startTime);
test.setTag(Tags.TEST_FRAMEWORK, frameworkName);
return test;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package datadog.trace.civisibility.domain.manualapi

import datadog.trace.api.Config
import datadog.trace.api.DDSpanTypes
import datadog.trace.api.civisibility.coverage.CoverageStore
import datadog.trace.api.civisibility.telemetry.CiVisibilityMetricCollector
import datadog.trace.api.civisibility.telemetry.tag.Provider
import datadog.trace.bootstrap.instrumentation.api.Tags
import datadog.trace.civisibility.codeowners.Codeowners
import datadog.trace.civisibility.decorator.TestDecoratorImpl
import datadog.trace.civisibility.domain.SpanWriterTest
import datadog.trace.civisibility.source.LinesResolver
import datadog.trace.civisibility.source.SourcePathResolver

class ManualApiTest extends SpanWriterTest {

def "test framework tag is set on suite, test, module and session with component info"() {
setup:
def component = "my-custom-framework"
def session = givenAManualApiSession(component)
def module = session.testModuleStart("module-name", null)
def suite = module.testSuiteStart("suite-name", null, null, false)
def test = suite.testStart("test-name", null, null)

when:
test.end(null)
suite.end(null)
module.end(null)
session.end(null)

then:
def traces = TEST_WRITER.toList()
traces.size() == 2

def allSpans = traces.flatten()
def sessionSpan = allSpans.find { it.spanType == DDSpanTypes.TEST_SESSION_END }
def moduleSpan = allSpans.find { it.spanType == DDSpanTypes.TEST_MODULE_END }
def suiteSpan = allSpans.find { it.spanType == DDSpanTypes.TEST_SUITE_END }
def testSpan = allSpans.find { it.spanType == DDSpanTypes.TEST }

sessionSpan != null
moduleSpan != null
suiteSpan != null
testSpan != null

sessionSpan.tags[Tags.TEST_FRAMEWORK] == component
moduleSpan.tags[Tags.TEST_FRAMEWORK] == component
suiteSpan.tags[Tags.TEST_FRAMEWORK] == component
testSpan.tags[Tags.TEST_FRAMEWORK] == component
}

private ManualApiTestSession givenAManualApiSession(String component) {
new ManualApiTestSession(
"project-name",
null,
Provider.UNSUPPORTED,
Stub(Config),
Stub(CiVisibilityMetricCollector),
new TestDecoratorImpl(component, "session-name", "test-command", [:]),
Stub(SourcePathResolver),
Stub(Codeowners),
Stub(LinesResolver),
Stub(CoverageStore.Factory)
)
}
}
Loading