logs-analyzer/signoz/pkg/query-service/app/integrations/test_utils.go
2024-09-02 22:47:30 +03:00

194 lines
4.9 KiB
Go

package integrations
import (
"context"
"slices"
"testing"
"go.signoz.io/signoz/pkg/query-service/app/dashboards"
"go.signoz.io/signoz/pkg/query-service/app/logparsingpipeline"
"go.signoz.io/signoz/pkg/query-service/model"
v3 "go.signoz.io/signoz/pkg/query-service/model/v3"
"go.signoz.io/signoz/pkg/query-service/rules"
"go.signoz.io/signoz/pkg/query-service/utils"
)
func NewTestIntegrationsManager(t *testing.T) *Manager {
testDB := utils.NewQueryServiceDBForTests(t)
installedIntegrationsRepo, err := NewInstalledIntegrationsSqliteRepo(testDB)
if err != nil {
t.Fatalf("could not init sqlite DB for installed integrations: %v", err)
}
return &Manager{
availableIntegrationsRepo: &TestAvailableIntegrationsRepo{},
installedIntegrationsRepo: installedIntegrationsRepo,
}
}
type TestAvailableIntegrationsRepo struct{}
func (t *TestAvailableIntegrationsRepo) list(
ctx context.Context,
) ([]IntegrationDetails, *model.ApiError) {
return []IntegrationDetails{
{
IntegrationSummary: IntegrationSummary{
Id: "test-integration-1",
Title: "Test Integration 1",
Description: "A test integration",
Author: IntegrationAuthor{
Name: "signoz",
Email: "integrations@signoz.io",
HomePage: "https://signoz.io",
},
Icon: `data:image/svg+xml;utf8,<svg ... > ... </svg>`,
},
Categories: []string{"testcat1", "testcat2"},
Overview: "test integration overview",
Configuration: []IntegrationConfigStep{
{
Title: "Step 1",
Instructions: "Set source attrib on your signals",
},
},
DataCollected: DataCollectedForIntegration{
Logs: []CollectedLogAttribute{},
Metrics: []CollectedMetric{},
},
Assets: IntegrationAssets{
Logs: LogsAssets{
Pipelines: []logparsingpipeline.PostablePipeline{
{
Name: "pipeline1",
Alias: "pipeline1",
Enabled: true,
Filter: &v3.FilterSet{
Operator: "AND",
Items: []v3.FilterItem{
{
Key: v3.AttributeKey{
Key: "source",
DataType: v3.AttributeKeyDataTypeString,
Type: v3.AttributeKeyTypeTag,
},
Operator: "=",
Value: "nginx",
},
},
},
Config: []logparsingpipeline.PipelineOperator{
{
OrderId: 1,
ID: "add",
Type: "add",
Field: "attributes.test",
Value: "val",
Enabled: true,
Name: "test add",
},
},
},
},
},
Dashboards: []dashboards.Data{},
Alerts: []rules.PostableRule{},
},
ConnectionTests: &IntegrationConnectionTests{
Logs: &LogsConnectionTest{
AttributeKey: "source",
AttributeValue: "nginx",
},
},
}, {
IntegrationSummary: IntegrationSummary{
Id: "test-integration-2",
Title: "Test Integration 2",
Description: "Another test integration",
Author: IntegrationAuthor{
Name: "signoz",
Email: "integrations@signoz.io",
HomePage: "https://signoz.io",
},
Icon: `data:image/svg+xml;utf8,<svg ... > ... </svg>`,
},
Categories: []string{"testcat1", "testcat2"},
Overview: "test integration overview",
Configuration: []IntegrationConfigStep{
{
Title: "Step 1",
Instructions: "Set source attrib on your signals",
},
},
DataCollected: DataCollectedForIntegration{
Logs: []CollectedLogAttribute{},
Metrics: []CollectedMetric{},
},
Assets: IntegrationAssets{
Logs: LogsAssets{
Pipelines: []logparsingpipeline.PostablePipeline{
{
Name: "pipeline2",
Alias: "pipeline2",
Enabled: true,
Filter: &v3.FilterSet{
Operator: "AND",
Items: []v3.FilterItem{
{
Key: v3.AttributeKey{
Key: "source",
DataType: v3.AttributeKeyDataTypeString,
Type: v3.AttributeKeyTypeTag,
},
Operator: "=",
Value: "redis",
},
},
},
Config: []logparsingpipeline.PipelineOperator{
{
OrderId: 1,
ID: "add",
Type: "add",
Field: "attributes.test",
Value: "val",
Enabled: true,
Name: "test add",
},
},
},
},
},
Dashboards: []dashboards.Data{},
Alerts: []rules.PostableRule{},
},
ConnectionTests: &IntegrationConnectionTests{
Logs: &LogsConnectionTest{
AttributeKey: "source",
AttributeValue: "nginx",
},
},
},
}, nil
}
func (t *TestAvailableIntegrationsRepo) get(
ctx context.Context, ids []string,
) (map[string]IntegrationDetails, *model.ApiError) {
availableIntegrations, apiErr := t.list(ctx)
if apiErr != nil {
return nil, apiErr
}
result := map[string]IntegrationDetails{}
for _, ai := range availableIntegrations {
if slices.Contains(ids, ai.Id) {
result[ai.Id] = ai
}
}
return result, nil
}