- Introduced new methods in the trace manager for retrieving events, trace info, nodes, logs, and spaces from storage, improving data access and management. - Updated the driver implementations to support loading and unarchiving traces, ensuring robust handling of trace data. - Enhanced error handling and logging in the OpenAI provider to facilitate better debugging and traceability of requests and responses. - Added a new TraceSpaceData struct to encapsulate space metadata along with key-value data for improved API responses.
78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
package trace_test
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// TestGetInfo tests the trace info API endpoint
|
|
func TestGetInfo(t *testing.T) {
|
|
data := prepareTestTrace(t)
|
|
defer cleanupTestTrace(t, data)
|
|
|
|
// Test GET /traces/:traceID/info
|
|
requestURL := fmt.Sprintf("%s%s/trace/traces/%s/info", data.ServerURL, data.BaseURL, data.TraceID)
|
|
|
|
req, err := http.NewRequest("GET", requestURL, nil)
|
|
assert.NoError(t, err)
|
|
req.Header.Set("Authorization", "Bearer "+data.TokenInfo.AccessToken)
|
|
|
|
client := &http.Client{Timeout: 10 * time.Second}
|
|
resp, err := client.Do(req)
|
|
assert.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
|
|
assert.Equal(t, http.StatusOK, resp.StatusCode, "Expected status code 200")
|
|
|
|
// Parse response
|
|
body, err := io.ReadAll(resp.Body)
|
|
assert.NoError(t, err)
|
|
|
|
var responseData map[string]interface{}
|
|
err = json.Unmarshal(body, &responseData)
|
|
assert.NoError(t, err)
|
|
|
|
// Verify response structure
|
|
assert.Equal(t, data.TraceID, responseData["id"], "Trace ID should match")
|
|
assert.Equal(t, "local", responseData["driver"], "Driver should be local")
|
|
assert.NotNil(t, responseData["status"], "Should have status field")
|
|
assert.NotNil(t, responseData["created_at"], "Should have created_at field")
|
|
assert.NotNil(t, responseData["updated_at"], "Should have updated_at field")
|
|
|
|
// Verify metadata
|
|
metadata, ok := responseData["metadata"].(map[string]interface{})
|
|
assert.True(t, ok, "Should have metadata")
|
|
assert.Equal(t, "api_test", metadata["test_type"], "Metadata should match")
|
|
assert.Equal(t, "common_trace_data", metadata["test_name"], "Metadata should match")
|
|
|
|
// Verify user info
|
|
assert.Equal(t, data.TokenInfo.UserID, responseData["created_by"], "Created by should match")
|
|
|
|
t.Logf("Retrieved trace info for %s", data.TraceID)
|
|
}
|
|
|
|
// TestGetInfoNotFound tests getting info for non-existent trace
|
|
func TestGetInfoNotFound(t *testing.T) {
|
|
data := prepareTestTrace(t)
|
|
defer cleanupTestTrace(t, data)
|
|
|
|
// Try to get info for non-existent trace
|
|
requestURL := fmt.Sprintf("%s%s/trace/traces/nonexistent/info", data.ServerURL, data.BaseURL)
|
|
|
|
req, err := http.NewRequest("GET", requestURL, nil)
|
|
assert.NoError(t, err)
|
|
req.Header.Set("Authorization", "Bearer "+data.TokenInfo.AccessToken)
|
|
|
|
client := &http.Client{Timeout: 10 * time.Second}
|
|
resp, err := client.Do(req)
|
|
assert.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
|
|
assert.Equal(t, http.StatusNotFound, resp.StatusCode, "Expected status code 404 for non-existent trace")
|
|
}
|