Skip to content

Commit 10268cb

Browse files
Manik2708amol-verma-allen
authored andcommitted
[ES][v2] Implement GetDependenies and WriteDependencies (jaegertracing#7085)
## Which problem is this PR solving? - Fixes a part of: jaegertracing#7034 ## Description of the changes - Upgrade DependencyStore for ES ## How was this change tested? - Unit Tests ## Checklist - [x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - [x] I have signed all commits - [x] I have added unit tests for the new functionality - [x] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `npm run lint` and `npm run test` Signed-off-by: Manik2708 <[email protected]> Signed-off-by: amol-verma-allen <[email protected]>
1 parent a774fcd commit 10268cb

File tree

2 files changed

+149
-0
lines changed

2 files changed

+149
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright (c) 2025 The Jaeger Authors.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package depstore
5+
6+
import (
7+
"context"
8+
"time"
9+
10+
"github.com/jaegertracing/jaeger-idl/model/v1"
11+
"github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore"
12+
"github.com/jaegertracing/jaeger/internal/storage/v2/elasticsearch/depstore/dbmodel"
13+
)
14+
15+
type DependencyStoreV2 struct {
16+
store CoreDependencyStore
17+
}
18+
19+
// NewDependencyStoreV2 returns a DependencyStoreV2
20+
func NewDependencyStoreV2(p Params) *DependencyStoreV2 {
21+
return &DependencyStoreV2{
22+
store: NewDependencyStore(p),
23+
}
24+
}
25+
26+
func (s *DependencyStoreV2) GetDependencies(ctx context.Context, query depstore.QueryParameters) ([]model.DependencyLink, error) {
27+
dbDependencies, err := s.store.GetDependencies(ctx, query.EndTime, query.EndTime.Sub(query.StartTime))
28+
if err != nil {
29+
return nil, err
30+
}
31+
dependencies := dbmodel.ToDomainDependencies(dbDependencies)
32+
return dependencies, nil
33+
}
34+
35+
func (s *DependencyStoreV2) WriteDependencies(ts time.Time, dependencies []model.DependencyLink) error {
36+
dbDependencies := dbmodel.FromDomainDependencies(dependencies)
37+
return s.store.WriteDependencies(ts, dbDependencies)
38+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// Copyright (c) 2025 The Jaeger Authors.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package depstore
5+
6+
import (
7+
"context"
8+
"errors"
9+
"testing"
10+
"time"
11+
12+
"github.com/stretchr/testify/assert"
13+
"github.com/stretchr/testify/mock"
14+
"github.com/stretchr/testify/require"
15+
"go.uber.org/zap"
16+
17+
"github.com/jaegertracing/jaeger-idl/model/v1"
18+
"github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore"
19+
"github.com/jaegertracing/jaeger/internal/storage/v2/elasticsearch/depstore/dbmodel"
20+
"github.com/jaegertracing/jaeger/internal/storage/v2/elasticsearch/depstore/mocks"
21+
)
22+
23+
func TestV2GetDependencies(t *testing.T) {
24+
tests := []struct {
25+
name string
26+
mockOutput []dbmodel.DependencyLink
27+
mockErr error
28+
expectedOutput []model.DependencyLink
29+
expectedErr string
30+
}{
31+
{
32+
name: "error from core reader",
33+
mockErr: errors.New("error from core reader"),
34+
expectedErr: "error from core reader",
35+
},
36+
{
37+
name: "success output",
38+
mockOutput: []dbmodel.DependencyLink{
39+
{
40+
Parent: "testing-parent",
41+
Child: "testing-child",
42+
CallCount: 1,
43+
},
44+
},
45+
expectedOutput: []model.DependencyLink{
46+
{
47+
Parent: "testing-parent",
48+
Child: "testing-child",
49+
CallCount: 1,
50+
},
51+
},
52+
},
53+
}
54+
for _, tt := range tests {
55+
t.Run(tt.name, func(t *testing.T) {
56+
coreReader := &mocks.CoreDependencyStore{}
57+
store := DependencyStoreV2{
58+
store: coreReader,
59+
}
60+
query := depstore.QueryParameters{
61+
StartTime: time.Now(),
62+
EndTime: time.Now(),
63+
}
64+
coreReader.On("GetDependencies", mock.Anything, query.EndTime, query.EndTime.Sub(query.StartTime)).Return(tt.mockOutput, tt.mockErr)
65+
actual, err := store.GetDependencies(context.Background(), query)
66+
if tt.expectedErr != "" {
67+
assert.ErrorContains(t, err, tt.expectedErr)
68+
} else {
69+
require.NoError(t, err)
70+
assert.Equal(t, tt.expectedOutput, actual)
71+
}
72+
})
73+
}
74+
}
75+
76+
func TestV2WriteDependencies(t *testing.T) {
77+
tests := []struct {
78+
name string
79+
returningErr error
80+
expectedErr string
81+
}{
82+
{
83+
name: "error from core writer",
84+
returningErr: errors.New("error from core writer"),
85+
expectedErr: "error from core writer",
86+
},
87+
{
88+
name: "success",
89+
},
90+
}
91+
for _, tt := range tests {
92+
t.Run(tt.name, func(t *testing.T) {
93+
coreReader := &mocks.CoreDependencyStore{}
94+
store := DependencyStoreV2{
95+
store: coreReader,
96+
}
97+
coreReader.On("WriteDependencies", mock.Anything, mock.Anything).Return(tt.returningErr)
98+
err := store.WriteDependencies(time.Now(), []model.DependencyLink{})
99+
if tt.expectedErr != "" {
100+
assert.ErrorContains(t, err, tt.expectedErr)
101+
} else {
102+
require.NoError(t, err)
103+
}
104+
})
105+
}
106+
}
107+
108+
func TestNewDependencyStoreV2(t *testing.T) {
109+
store := NewDependencyStoreV2(Params{Logger: zap.NewNop()})
110+
assert.IsType(t, &DependencyStore{}, store.store)
111+
}

0 commit comments

Comments
 (0)