mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 23:41:12 +08:00
### What problem does this PR solve? - Tools management - Pregel engine wrapper for better usage - UT race - Coding style ### Type of change - [x] Refactoring
314 lines
7.1 KiB
Go
314 lines
7.1 KiB
Go
// Package managed tests managed value functionality.
|
|
package managed
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestIsManagedValue(t *testing.T) {
|
|
isLastStep := NewIsLastStep()
|
|
|
|
if !IsManagedValue(isLastStep) {
|
|
t.Error("IsLastStep should be a managed value")
|
|
}
|
|
|
|
if IsManagedValue("not a managed value") {
|
|
t.Error("String should not be a managed value")
|
|
}
|
|
|
|
if IsManagedValue(nil) {
|
|
t.Error("Nil should not be a managed value")
|
|
}
|
|
}
|
|
|
|
func TestManagedValueSpec(t *testing.T) {
|
|
spec := NewManagedValueSpec(
|
|
"TestValue",
|
|
func() ManagedValue { return NewIsLastStep() },
|
|
"default",
|
|
)
|
|
|
|
if spec.Name != "TestValue" {
|
|
t.Errorf("Expected name 'TestValue', got '%s'", spec.Name)
|
|
}
|
|
|
|
if spec.Default != "default" {
|
|
t.Errorf("Expected default 'default', got '%v'", spec.Default)
|
|
}
|
|
|
|
if spec.Factory == nil {
|
|
t.Error("Factory should not be nil")
|
|
}
|
|
}
|
|
|
|
func TestIsManagedValueSpec(t *testing.T) {
|
|
spec := NewManagedValueSpec(
|
|
"TestValue",
|
|
func() ManagedValue { return NewIsLastStep() },
|
|
nil,
|
|
)
|
|
|
|
if !IsManagedValueSpec(spec) {
|
|
t.Error("ManagedValueSpec should be recognized")
|
|
}
|
|
|
|
if IsManagedValueSpec("not a spec") {
|
|
t.Error("String should not be a managed value spec")
|
|
}
|
|
}
|
|
|
|
func TestIsValueManaged(t *testing.T) {
|
|
isLastStep := NewIsLastStep()
|
|
spec := NewManagedValueSpec("test", func() ManagedValue { return NewIsLastStep() }, nil)
|
|
|
|
tests := []struct {
|
|
name string
|
|
value interface{}
|
|
expected bool
|
|
}{
|
|
{"IsLastStep", isLastStep, true},
|
|
{"Spec", spec, true},
|
|
{"String", "test", false},
|
|
{"Nil", nil, false},
|
|
{"Number", 42, false},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if result := IsValueManaged(tt.value); result != tt.expected {
|
|
t.Errorf("IsValueManaged(%v) = %v, expected %v", tt.value, result, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestGetManagedValueName(t *testing.T) {
|
|
isLastStep := NewIsLastStep()
|
|
spec := NewManagedValueSpec("CustomSpec", func() ManagedValue { return NewIsLastStep() }, nil)
|
|
|
|
tests := []struct {
|
|
name string
|
|
value interface{}
|
|
expected string
|
|
}{
|
|
{"IsLastStep", isLastStep, "IsLastStep"},
|
|
{"Spec", spec, "CustomSpec"},
|
|
{"Nil", nil, ""},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if result := GetManagedValueName(tt.value); result != tt.expected {
|
|
t.Errorf("GetManagedValueName(%v) = %v, expected %v", tt.value, result, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestCurrentStep(t *testing.T) {
|
|
currentStep := NewCurrentStep()
|
|
|
|
// Test default value
|
|
if currentStep.Value != 0 {
|
|
t.Errorf("Expected initial value 0, got %d", currentStep.Value)
|
|
}
|
|
|
|
// Test Name
|
|
if currentStep.Name() != "CurrentStep" {
|
|
t.Errorf("Expected name 'CurrentStep', got '%s'", currentStep.Name())
|
|
}
|
|
|
|
// Test Set
|
|
currentStep.Set(5)
|
|
if currentStep.Value != 5 {
|
|
t.Errorf("Expected value 5 after Set, got %d", currentStep.Value)
|
|
}
|
|
|
|
// Test Increment
|
|
currentStep.Increment()
|
|
if currentStep.Value != 6 {
|
|
t.Errorf("Expected value 6 after Increment, got %d", currentStep.Value)
|
|
}
|
|
|
|
// Test Copy
|
|
copied := currentStep.Copy().(*CurrentStep)
|
|
if copied.Value != 6 {
|
|
t.Errorf("Expected copied value 6, got %d", copied.Value)
|
|
}
|
|
|
|
// Verify they are independent
|
|
currentStep.Value = 10
|
|
if copied.Value != 6 {
|
|
t.Errorf("Copied value should remain 6, got %d", copied.Value)
|
|
}
|
|
}
|
|
|
|
func TestConfigValue(t *testing.T) {
|
|
configValue := NewConfigValue("api_key", "default_key")
|
|
|
|
// Test with empty scratchpad
|
|
val, err := configValue.Get(nil)
|
|
if err != nil {
|
|
t.Errorf("Get should not error on empty scratchpad: %v", err)
|
|
}
|
|
if val != "default_key" {
|
|
t.Errorf("Expected default value 'default_key', got '%v'", val)
|
|
}
|
|
|
|
// Test with scratchpad containing configurable
|
|
scratchpad := map[string]interface{}{
|
|
"configurable": map[string]interface{}{
|
|
"api_key": "custom_key",
|
|
},
|
|
}
|
|
val, err = configValue.Get(scratchpad)
|
|
if err != nil {
|
|
t.Errorf("Get should not error: %v", err)
|
|
}
|
|
if val != "custom_key" {
|
|
t.Errorf("Expected value 'custom_key', got '%v'", val)
|
|
}
|
|
|
|
// Test Name
|
|
name := configValue.Name()
|
|
expectedName := "ConfigValue[api_key]"
|
|
if name != expectedName {
|
|
t.Errorf("Expected name '%s', got '%s'", expectedName, name)
|
|
}
|
|
|
|
// Test Copy
|
|
copied := configValue.Copy().(*ConfigValue)
|
|
if copied.Key != "api_key" {
|
|
t.Errorf("Expected copied key 'api_key', got '%s'", copied.Key)
|
|
}
|
|
}
|
|
|
|
func TestTaskID(t *testing.T) {
|
|
taskID := NewTaskID()
|
|
|
|
// Test default value
|
|
if taskID.Value != "" {
|
|
t.Errorf("Expected empty string, got '%s'", taskID.Value)
|
|
}
|
|
|
|
// Test with scratchpad containing task_id
|
|
scratchpad := map[string]interface{}{
|
|
"task_id": "task-123",
|
|
}
|
|
val, err := taskID.Get(scratchpad)
|
|
if err != nil {
|
|
t.Errorf("Get should not error: %v", err)
|
|
}
|
|
if val != "task-123" {
|
|
t.Errorf("Expected value 'task-123', got '%v'", val)
|
|
}
|
|
|
|
// Test Name
|
|
if taskID.Name() != "TaskID" {
|
|
t.Errorf("Expected name 'TaskID', got '%s'", taskID.Name())
|
|
}
|
|
}
|
|
|
|
func TestNodeName(t *testing.T) {
|
|
nodeName := NewNodeName()
|
|
|
|
// Test default value
|
|
if nodeName.Value != "" {
|
|
t.Errorf("Expected empty string, got '%s'", nodeName.Value)
|
|
}
|
|
|
|
// Test with scratchpad containing node_name
|
|
scratchpad := map[string]interface{}{
|
|
"node_name": "agent_node",
|
|
}
|
|
val, err := nodeName.Get(scratchpad)
|
|
if err != nil {
|
|
t.Errorf("Get should not error: %v", err)
|
|
}
|
|
if val != "agent_node" {
|
|
t.Errorf("Expected value 'agent_node', got '%v'", val)
|
|
}
|
|
|
|
// Test Name
|
|
if nodeName.Name() != "NodeName" {
|
|
t.Errorf("Expected name 'NodeName', got '%s'", nodeName.Name())
|
|
}
|
|
}
|
|
|
|
func TestManagedValueGetValue(t *testing.T) {
|
|
spec := NewManagedValueSpec(
|
|
"TestValue",
|
|
func() ManagedValue {
|
|
mv := NewCurrentStep()
|
|
mv.Value = 42
|
|
return mv
|
|
},
|
|
"default",
|
|
)
|
|
|
|
// Test with empty scratchpad - should return default
|
|
val := spec.GetValue(nil)
|
|
if val != "default" {
|
|
t.Errorf("Expected default value 'default', got '%v'", val)
|
|
}
|
|
|
|
// Test Create
|
|
mv := spec.Create()
|
|
if mv == nil {
|
|
t.Error("Create should return a managed value")
|
|
}
|
|
|
|
currentStep, ok := mv.(*CurrentStep)
|
|
if !ok {
|
|
t.Error("Create should return a CurrentStep")
|
|
}
|
|
if currentStep.Value != 42 {
|
|
t.Errorf("Expected value 42, got %d", currentStep.Value)
|
|
}
|
|
}
|
|
|
|
type TestStruct struct {
|
|
ManagedField ManagedValue
|
|
SpecField *ManagedValueSpec
|
|
NormalField string
|
|
NilField interface{}
|
|
}
|
|
|
|
func TestExtractManagedValues(t *testing.T) {
|
|
testStruct := TestStruct{
|
|
ManagedField: NewIsLastStep(),
|
|
SpecField: NewManagedValueSpec("test", func() ManagedValue { return NewCurrentStep() }, nil),
|
|
NormalField: "normal",
|
|
NilField: nil,
|
|
}
|
|
|
|
values := ExtractManagedValues(&testStruct)
|
|
|
|
if len(values) != 1 {
|
|
t.Errorf("Expected 1 managed value, got %d", len(values))
|
|
}
|
|
|
|
if values[0].Name() != "IsLastStep" {
|
|
t.Errorf("Expected IsLastStep, got %s", values[0].Name())
|
|
}
|
|
}
|
|
|
|
func TestExtractManagedValueSpecs(t *testing.T) {
|
|
testStruct := TestStruct{
|
|
ManagedField: NewIsLastStep(),
|
|
SpecField: NewManagedValueSpec("test", func() ManagedValue { return NewCurrentStep() }, nil),
|
|
NormalField: "normal",
|
|
NilField: nil,
|
|
}
|
|
|
|
specs := ExtractManagedValueSpecs(&testStruct)
|
|
|
|
if len(specs) != 1 {
|
|
t.Errorf("Expected 1 managed value spec, got %d", len(specs))
|
|
}
|
|
|
|
if specs[0].Name != "test" {
|
|
t.Errorf("Expected name 'test', got %s", specs[0].Name)
|
|
}
|
|
}
|