Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move Archive test into shared integration test suite #5207

Merged
merged 54 commits into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from 52 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
0dc5157
Extracted Archive Test
Wise-Wizard Feb 16, 2024
2a2dd41
Initialized Archive Reader/Writer
Wise-Wizard Feb 18, 2024
1043163
Removed unconditional test
Wise-Wizard Feb 18, 2024
b76de62
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Feb 19, 2024
3a0fc2a
Improved Error Handling
Wise-Wizard Feb 19, 2024
f92986c
Initialized Archive Factory
Wise-Wizard Feb 19, 2024
53d3690
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Feb 19, 2024
1b0738d
Update plugin/storage/integration/integration.go
Wise-Wizard Feb 19, 2024
47e0134
Fix SubModule
Wise-Wizard Feb 19, 2024
59a61b4
Merge branch 'Test/ArchiveTrace' of https://github.com/Wise-Wizard/ja…
Wise-Wizard Feb 19, 2024
4927ed9
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Feb 19, 2024
b9b4f0d
Rectified Initialization Pattern
Wise-Wizard Feb 19, 2024
5d66943
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Feb 20, 2024
f36ce32
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 20, 2024
02a20c4
Extracted Test
Wise-Wizard Mar 21, 2024
1785da6
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 21, 2024
f012790
Extracted Test
Wise-Wizard Mar 21, 2024
487f919
Fixed Failing Test
Wise-Wizard Mar 21, 2024
64cbf2a
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 22, 2024
84851cd
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 23, 2024
c4540c1
Created Archive Span Reader/Writer
Wise-Wizard Mar 24, 2024
fa5219b
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 24, 2024
a7ec8d4
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 25, 2024
8cbc7d1
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 27, 2024
549fcad
Added Archive Reader/Writer for all backends supporting Archiving
Wise-Wizard Mar 27, 2024
ea8e2ad
Fixed Cassandra Error
Wise-Wizard Mar 27, 2024
ec9ea44
Cassandra Test fixed
Wise-Wizard Mar 27, 2024
3286586
removed unnecessary change in Badger0
Wise-Wizard Mar 27, 2024
422b0b1
Improved Code Coverage
Wise-Wizard Mar 27, 2024
f17d6d2
Improved Code Coverage
Wise-Wizard Mar 27, 2024
f102b49
Made required changes
Wise-Wizard Mar 27, 2024
9ff8bcc
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 27, 2024
7adbc90
Resolved nil pointer deference
Wise-Wizard Mar 27, 2024
178f640
Resolved nil pointer deference
Wise-Wizard Mar 27, 2024
5e5d8ab
Increased Coverage
Wise-Wizard Mar 28, 2024
30bec38
Fix ES Failing tests
Wise-Wizard Mar 28, 2024
eea2a9c
Revert "Fix ES Failing tests"
Wise-Wizard Mar 28, 2024
1e0f815
Fix ES Failing tests
Wise-Wizard Mar 28, 2024
d0c8b39
Revert "Fix ES Failing tests"
Wise-Wizard Mar 28, 2024
aaac007
Fix ES Failing tests
Wise-Wizard Mar 28, 2024
2a5d2d0
Revert "Fix ES Failing tests"
Wise-Wizard Mar 28, 2024
67fe067
Fix ES failing Test
Wise-Wizard Mar 28, 2024
b9bfa4c
Removed archive flag
Wise-Wizard Mar 28, 2024
eec97d1
Removed archive flag
Wise-Wizard Mar 28, 2024
8cebc82
Update plugin/storage/integration/integration.go
Wise-Wizard Mar 29, 2024
401780d
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 29, 2024
04c5850
Removed archive flag from ES
Wise-Wizard Mar 29, 2024
8c91aff
Deleted Test Archive
Wise-Wizard Mar 29, 2024
38c3037
Fixed nil pointer error
Wise-Wizard Mar 29, 2024
1cabbc8
Initialized Archive Span Reader/Writer
Wise-Wizard Mar 29, 2024
d017281
Added Constant
Wise-Wizard Mar 29, 2024
32a4359
Merge branch 'main' into Test/ArchiveTrace
Wise-Wizard Mar 29, 2024
6e284ae
Update plugin/storage/integration/integration.go
Wise-Wizard Mar 29, 2024
effeb3a
Truncated Time
Wise-Wizard Mar 29, 2024
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
1 change: 1 addition & 0 deletions plugin/storage/integration/badgerstore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ func (s *BadgerIntegrationStorage) initialize() error {

// TODO: remove this badger supports returning spanKind from GetOperations
s.GetOperationsMissingSpanKind = true
s.SkipArchiveTest = true
return nil
}

Expand Down
1 change: 1 addition & 0 deletions plugin/storage/integration/cassandra_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ func newCassandraStorageIntegration() *CassandraStorageIntegration {
s := &CassandraStorageIntegration{
StorageIntegration: StorageIntegration{
GetDependenciesReturnsSource: true,
SkipArchiveTest: true,

Refresh: func() error { return nil },
SkipList: []string{
Expand Down
91 changes: 41 additions & 50 deletions plugin/storage/integration/elasticsearch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import (
"go.opentelemetry.io/otel/trace"
"go.uber.org/zap"

"github.com/jaegertracing/jaeger/model"
estemplate "github.com/jaegertracing/jaeger/pkg/es"
eswrapper "github.com/jaegertracing/jaeger/pkg/es/wrapper"
"github.com/jaegertracing/jaeger/pkg/metrics"
Expand Down Expand Up @@ -101,7 +100,7 @@ func (s *ESStorageIntegration) getVersion() (uint, error) {
return uint(esVersion), nil
}

func (s *ESStorageIntegration) initializeES(t *testing.T, allTagsAsFields, archive bool) error {
func (s *ESStorageIntegration) initializeES(t *testing.T, allTagsAsFields bool) error {
rawClient, err := elastic.NewClient(
elastic.SetURL(queryURL),
elastic.SetSniff(false))
Expand All @@ -115,24 +114,25 @@ func (s *ESStorageIntegration) initializeES(t *testing.T, allTagsAsFields, archi
})
require.NoError(t, err)

s.initSpanstore(t, allTagsAsFields, archive)
s.initSpanstore(t, allTagsAsFields)
s.initSamplingStore(t)

s.CleanUp = func() error {
s.esCleanUp(t, allTagsAsFields, archive)
s.esCleanUp(t, allTagsAsFields)
return nil
}
s.Refresh = s.esRefresh
s.esCleanUp(t, allTagsAsFields, archive)
s.esCleanUp(t, allTagsAsFields)
// TODO: remove this flag after ES support returning spanKind when get operations
s.GetOperationsMissingSpanKind = true
s.SkipArchiveTest = false
return nil
}

func (s *ESStorageIntegration) esCleanUp(t *testing.T, allTagsAsFields, archive bool) {
func (s *ESStorageIntegration) esCleanUp(t *testing.T, allTagsAsFields bool) {
_, err := s.client.DeleteIndex("*").Do(context.Background())
require.NoError(t, err)
s.initSpanstore(t, allTagsAsFields, archive)
s.initSpanstore(t, allTagsAsFields)
}

func (s *ESStorageIntegration) initSamplingStore(t *testing.T) {
Expand Down Expand Up @@ -170,7 +170,7 @@ func (s *ESStorageIntegration) getEsClient(t *testing.T) eswrapper.ClientWrapper
return eswrapper.WrapESClient(s.client, bp, esVersion, s.v8Client)
}

func (s *ESStorageIntegration) initSpanstore(t *testing.T, allTagsAsFields, archive bool) error {
func (s *ESStorageIntegration) initSpanstore(t *testing.T, allTagsAsFields bool) error {
client := s.getEsClient(t)
mappingBuilder := mappings.MappingBuilder{
TemplateBuilder: estemplate.TextTemplateBuilder{},
Expand All @@ -184,6 +184,7 @@ func (s *ESStorageIntegration) initSpanstore(t *testing.T, allTagsAsFields, arch
require.NoError(t, err)
clientFn := func() estemplate.Client { return client }

// Initializing Span Reader and Writer
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved
w := spanstore.NewSpanWriter(
spanstore.SpanWriterParams{
Client: clientFn,
Expand All @@ -192,7 +193,7 @@ func (s *ESStorageIntegration) initSpanstore(t *testing.T, allTagsAsFields, arch
IndexPrefix: indexPrefix,
AllTagsAsFields: allTagsAsFields,
TagDotReplacement: tagKeyDeDotChar,
Archive: archive,
Archive: false,
})
err = w.CreateTemplates(spanMapping, serviceMapping, indexPrefix)
require.NoError(t, err)
Expand All @@ -206,10 +207,34 @@ func (s *ESStorageIntegration) initSpanstore(t *testing.T, allTagsAsFields, arch
IndexPrefix: indexPrefix,
MaxSpanAge: maxSpanAge,
TagDotReplacement: tagKeyDeDotChar,
Archive: archive,
yurishkuro marked this conversation as resolved.
Show resolved Hide resolved
MaxDocCount: defaultMaxDocCount,
Tracer: tracer.Tracer("test"),
Archive: false,
})

// Initializing Archive Span Reader and Writer
s.ArchiveSpanWriter = spanstore.NewSpanWriter(
spanstore.SpanWriterParams{
Client: clientFn,
Logger: s.logger,
MetricsFactory: metrics.NullFactory,
IndexPrefix: indexPrefix,
AllTagsAsFields: allTagsAsFields,
TagDotReplacement: tagKeyDeDotChar,
Archive: true,
})
s.ArchiveSpanReader = spanstore.NewSpanReader(spanstore.SpanReaderParams{
Client: clientFn,
Logger: s.logger,
MetricsFactory: metrics.NullFactory,
IndexPrefix: indexPrefix,
MaxSpanAge: maxSpanAge,
TagDotReplacement: tagKeyDeDotChar,
MaxDocCount: defaultMaxDocCount,
Tracer: tracer.Tracer("test"),
Archive: true,
})

dependencyStore := dependencystore.NewDependencyStore(dependencystore.DependencyStoreParams{
Client: clientFn,
Logger: s.logger,
Expand Down Expand Up @@ -246,35 +271,27 @@ func healthCheck() error {
return errors.New("elastic search is not ready")
}

func testElasticsearchStorage(t *testing.T, allTagsAsFields, archive bool) {
func testElasticsearchStorage(t *testing.T, allTagsAsFields bool) {
if os.Getenv("STORAGE") != "elasticsearch" && os.Getenv("STORAGE") != "opensearch" {
t.Skip("Integration test against ElasticSearch skipped; set STORAGE env var to elasticsearch to run this")
}
if err := healthCheck(); err != nil {
t.Fatal(err)
}
s := &ESStorageIntegration{}
s.initializeES(t, allTagsAsFields, archive)
s.initializeES(t, allTagsAsFields)

s.Fixtures = LoadAndParseQueryTestCases(t, "fixtures/queries_es.json")

if archive {
t.Run("ArchiveTrace", s.testArchiveTrace)
} else {
s.IntegrationTestAll(t)
}
s.IntegrationTestAll(t)
}

func TestElasticsearchStorage(t *testing.T) {
testElasticsearchStorage(t, false, false)
testElasticsearchStorage(t, false)
}

func TestElasticsearchStorage_AllTagsAsObjectFields(t *testing.T) {
testElasticsearchStorage(t, true, false)
}

func TestElasticsearchStorage_Archive(t *testing.T) {
testElasticsearchStorage(t, false, true)
testElasticsearchStorage(t, true)
}

func TestElasticsearchStorage_IndexTemplates(t *testing.T) {
Expand All @@ -285,7 +302,7 @@ func TestElasticsearchStorage_IndexTemplates(t *testing.T) {
t.Fatal(err)
}
s := &ESStorageIntegration{}
s.initializeES(t, true, false)
s.initializeES(t, true)
esVersion, err := s.getVersion()
require.NoError(t, err)
// TODO abstract this into pkg/es/client.IndexManagementLifecycleAPI
Expand All @@ -307,32 +324,6 @@ func TestElasticsearchStorage_IndexTemplates(t *testing.T) {
s.cleanESIndexTemplates(t, indexPrefix)
}

func (s *ESStorageIntegration) testArchiveTrace(t *testing.T) {
defer s.cleanUp(t)
tID := model.NewTraceID(uint64(11), uint64(22))
expected := &model.Span{
OperationName: "archive_span",
StartTime: time.Now().Add(-maxSpanAge * 5),
TraceID: tID,
SpanID: model.NewSpanID(55),
References: []model.SpanRef{},
Process: model.NewProcess("archived_service", model.KeyValues{}),
}

require.NoError(t, s.SpanWriter.WriteSpan(context.Background(), expected))
s.refresh(t)

var actual *model.Trace
found := s.waitForCondition(t, func(t *testing.T) bool {
var err error
actual, err = s.SpanReader.GetTrace(context.Background(), tID)
return err == nil && len(actual.Spans) == 1
})
if !assert.True(t, found) {
CompareTraces(t, &model.Trace{Spans: []*model.Span{expected}}, actual)
}
}

func (s *ESStorageIntegration) cleanESIndexTemplates(t *testing.T, prefix string) error {
version, err := s.getVersion()
require.NoError(t, err)
Expand Down
7 changes: 6 additions & 1 deletion plugin/storage/integration/grpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,12 @@ func (s *GRPCStorageIntegrationTestSuite) initialize() error {
if s.SpanReader, err = f.CreateSpanReader(); err != nil {
return err
}

if s.ArchiveSpanReader, err = f.CreateArchiveSpanReader(); err != nil {
return err
}
if s.ArchiveSpanWriter, err = f.CreateArchiveSpanWriter(); err != nil {
return err
}
// TODO DependencyWriter is not implemented in grpc store

s.Refresh = s.refresh
Expand Down
51 changes: 44 additions & 7 deletions plugin/storage/integration/integration.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,34 @@ import (
)

const (
iterations = 100
iterations = 100
maxSpanTime = 72 * time.Hour
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved
)

//go:embed fixtures
var fixtures embed.FS

// StorageIntegration holds components for storage integration test
type StorageIntegration struct {
SpanWriter spanstore.Writer
SpanReader spanstore.Reader
DependencyWriter dependencystore.Writer
DependencyReader dependencystore.Reader
SamplingStore samplingstore.Store
Fixtures []*QueryFixtures
SpanWriter spanstore.Writer
SpanReader spanstore.Reader
ArchiveSpanReader spanstore.Reader
ArchiveSpanWriter spanstore.Writer
DependencyWriter dependencystore.Writer
DependencyReader dependencystore.Reader
SamplingStore samplingstore.Store
Fixtures []*QueryFixtures

// TODO: remove this after all storage backends return spanKind from GetOperations
GetOperationsMissingSpanKind bool

// TODO: remove this after all storage backends return Source column from GetDependencies

GetDependenciesReturnsSource bool

// Skip Archive Test if not supported by the storage backend
SkipArchiveTest bool

// List of tests which has to be skipped, it can be regex too.
SkipList []string

Expand Down Expand Up @@ -144,6 +151,35 @@ func (s *StorageIntegration) testGetServices(t *testing.T) {
}
}

func (s *StorageIntegration) testArchiveTrace(t *testing.T) {
s.skipIfNeeded(t)
if s.SkipArchiveTest {
t.Skip("Skipping ArchiveTrace test because archive reader or writer is nil")
}
defer s.cleanUp(t)
tID := model.NewTraceID(uint64(11), uint64(22))
expected := &model.Span{
OperationName: "archive_span",
StartTime: time.Now().Add(-maxSpanTime * 5),
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved
TraceID: tID,
SpanID: model.NewSpanID(55),
References: []model.SpanRef{},
Process: model.NewProcess("archived_service", model.KeyValues{}),
}

require.NoError(t, s.ArchiveSpanWriter.WriteSpan(context.Background(), expected))
s.Refresh()
Wise-Wizard marked this conversation as resolved.
Show resolved Hide resolved

var actual *model.Trace
found := s.waitForCondition(t, func(t *testing.T) bool {
var err error
actual, err = s.ArchiveSpanReader.GetTrace(context.Background(), tID)
return err == nil && len(actual.Spans) == 1
})
require.True(t, found)
CompareTraces(t, &model.Trace{Spans: []*model.Span{expected}}, actual)
}

func (s *StorageIntegration) testGetLargeSpan(t *testing.T) {
s.skipIfNeeded(t)
defer s.cleanUp(t)
Expand Down Expand Up @@ -481,6 +517,7 @@ func (s *StorageIntegration) insertThroughput(t *testing.T) {
// IntegrationTestAll runs all integration tests
func (s *StorageIntegration) IntegrationTestAll(t *testing.T) {
t.Run("GetServices", s.testGetServices)
t.Run("ArchiveTrace", s.testArchiveTrace)
yurishkuro marked this conversation as resolved.
Show resolved Hide resolved
t.Run("GetOperations", s.testGetOperations)
t.Run("GetTrace", s.testGetTrace)
t.Run("GetLargeSpans", s.testGetLargeSpan)
Expand Down
1 change: 1 addition & 0 deletions plugin/storage/integration/kafka_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ func (s *KafkaIntegrationTestSuite) initialize() error {
s.SpanReader = &ingester{traceStore}
s.Refresh = func() error { return nil }
s.CleanUp = func() error { return nil }
s.SkipArchiveTest = true
return nil
}

Expand Down
3 changes: 3 additions & 0 deletions plugin/storage/integration/memstore_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,12 @@ func (s *MemStorageIntegrationTestSuite) initialize() error {
s.logger, _ = testutils.NewLogger()

store := memory.NewStore()
archiveStore := memory.NewStore()
s.SamplingStore = memory.NewSamplingStore(2)
s.SpanReader = store
s.SpanWriter = store
s.ArchiveSpanReader = archiveStore
s.ArchiveSpanWriter = archiveStore

// TODO DependencyWriter is not implemented in memory store

Expand Down
Loading