From 5c5c5b5b643f4604da8c1a005b22a0fb58edbb2d Mon Sep 17 00:00:00 2001 From: JaeguKim Date: Fri, 12 Apr 2024 21:43:30 +0900 Subject: [PATCH] Test case for MappingBuilder returning error Signed-off-by: JaeguKim --- plugin/storage/es/factory.go | 17 +++++++++++------ plugin/storage/es/factory_test.go | 24 ++++++++++++++++++++++++ storage/factory.go | 2 +- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/plugin/storage/es/factory.go b/plugin/storage/es/factory.go index 01b19c716c7..c1cbad996ec 100644 --- a/plugin/storage/es/factory.go +++ b/plugin/storage/es/factory.go @@ -74,6 +74,8 @@ type Factory struct { archiveClient atomic.Pointer[es.Client] watchers []*fswatcher.FSWatcher + + templateBuilder es.TemplateBuilder } // NewFactory creates a new Factory. @@ -171,6 +173,8 @@ func (f *Factory) Initialize(metricsFactory metrics.Factory, logger *zap.Logger) } } + f.templateBuilder = es.TextTemplateBuilder{} + return nil } @@ -195,7 +199,7 @@ func (f *Factory) CreateSpanReader() (spanstore.Reader, error) { // CreateSpanWriter implements storage.Factory func (f *Factory) CreateSpanWriter() (spanstore.Writer, error) { - return createSpanWriter(f.getPrimaryClient, f.primaryConfig, false, f.metricsFactory, f.logger) + return createSpanWriter(f.getPrimaryClient, f.primaryConfig, false, f.metricsFactory, f.logger, f.templateBuilder) } // CreateDependencyReader implements storage.Factory @@ -216,7 +220,7 @@ func (f *Factory) CreateArchiveSpanWriter() (spanstore.Writer, error) { if !f.archiveConfig.Enabled { return nil, nil } - return createSpanWriter(f.getArchiveClient, f.archiveConfig, true, f.metricsFactory, f.logger) + return createSpanWriter(f.getArchiveClient, f.archiveConfig, true, f.metricsFactory, f.logger, f.templateBuilder) } func createSpanReader( @@ -255,6 +259,7 @@ func createSpanWriter( archive bool, mFactory metrics.Factory, logger *zap.Logger, + templateBuilder es.TemplateBuilder, ) (spanstore.Writer, error) { var tags []string var err error @@ -282,7 +287,7 @@ func createSpanWriter( // Creating a template here would conflict with the one created for ILM resulting to no index rollover if cfg.CreateIndexTemplates && !cfg.UseILM { - mappingBuilder := mappingBuilderFromConfig(cfg) + mappingBuilder := getMappingBuilder(cfg, templateBuilder) spanMapping, serviceMapping, err := mappingBuilder.GetSpanServiceMappings() if err != nil { return nil, err @@ -307,7 +312,7 @@ func (f *Factory) CreateSamplingStore(maxBuckets int) (samplingstore.Store, erro }) if f.primaryConfig.CreateIndexTemplates && !f.primaryConfig.UseILM { - mappingBuilder := mappingBuilderFromConfig(f.primaryConfig) + mappingBuilder := getMappingBuilder(f.primaryConfig, f.templateBuilder) sampleMapping, err := mappingBuilder.GetSamplingMappings() if err != nil { return nil, err @@ -320,9 +325,9 @@ func (f *Factory) CreateSamplingStore(maxBuckets int) (samplingstore.Store, erro return store, nil } -func mappingBuilderFromConfig(cfg *config.Configuration) mappings.MappingBuilder { +func getMappingBuilder(cfg *config.Configuration, templateBuilder es.TemplateBuilder) mappings.MappingBuilder { return mappings.MappingBuilder{ - TemplateBuilder: es.TextTemplateBuilder{}, + TemplateBuilder: templateBuilder, Shards: cfg.NumShards, Replicas: cfg.NumReplicas, EsVersion: cfg.Version, diff --git a/plugin/storage/es/factory_test.go b/plugin/storage/es/factory_test.go index 0e424d699b9..6675b5cd6b3 100644 --- a/plugin/storage/es/factory_test.go +++ b/plugin/storage/es/factory_test.go @@ -204,6 +204,30 @@ func TestTagKeysAsFields(t *testing.T) { } } +func TestMappingBuilderError(t *testing.T) { + f := NewFactory() + f.primaryConfig = &escfg.Configuration{CreateIndexTemplates: true} + f.archiveConfig = &escfg.Configuration{} + f.newClientFn = (&mockClientBuilder{createTemplateError: errors.New("template-error")}).NewClient + err := f.Initialize(metrics.NullFactory, zap.NewNop()) + require.NoError(t, err) + defer f.Close() + + tb := mocks.TemplateBuilder{} + ta := mocks.TemplateApplier{} + ta.On("Execute", mock.Anything, mock.Anything).Return(errors.New("template load error")) + tb.On("Parse", mock.Anything).Return(&ta, nil) + f.templateBuilder = &tb + + w, err := f.CreateSpanWriter() + assert.Nil(t, w) + require.Error(t, err, "mapping-builder-error") + + s, err := f.CreateSamplingStore(1) + assert.Nil(t, s) + require.Error(t, err, "mapping-builder-error") +} + func TestCreateTemplateError(t *testing.T) { f := NewFactory() f.primaryConfig = &escfg.Configuration{CreateIndexTemplates: true} diff --git a/storage/factory.go b/storage/factory.go index f6d3394840b..933d0dce27d 100644 --- a/storage/factory.go +++ b/storage/factory.go @@ -23,7 +23,7 @@ import ( "github.com/jaegertracing/jaeger/pkg/distributedlock" "github.com/jaegertracing/jaeger/pkg/metrics" "github.com/jaegertracing/jaeger/storage/dependencystore" - metricsstore "github.com/jaegertracing/jaeger/storage/metricsstore" + "github.com/jaegertracing/jaeger/storage/metricsstore" "github.com/jaegertracing/jaeger/storage/samplingstore" "github.com/jaegertracing/jaeger/storage/spanstore" )