Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 25 additions & 28 deletions v2/tests/admin_log_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,45 +230,42 @@ func Test_StructuredLogSettings(t *testing.T) {

func Test_GetRecentAPICalls(t *testing.T) {
Wrap(t, func(t *testing.T, client arangodb.Client) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, t testing.TB) {
skipBelowVersion(client, ctx, "3.12.5-2", t)
WithDatabase(t, client, nil, func(db arangodb.Database) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, t testing.TB) {
skipBelowVersion(client, ctx, "3.12.5-2", t)

resp, err := client.Version(ctx)
require.NoError(t, err)
require.NotEmpty(t, resp)
db, err := client.GetDatabase(ctx, "_system", nil)
require.NoError(t, err)
require.NotEmpty(t, db)
resp, err := client.Version(ctx)
require.NoError(t, err)
require.NotEmpty(t, resp)

recentApisResp, err := client.GetRecentAPICalls(ctx, db.Name())
require.NoError(t, err)
require.NotEmpty(t, recentApisResp)
recentApisResp, err := client.GetRecentAPICalls(ctx, db.Name())
require.NoError(t, err)
require.NotEmpty(t, recentApisResp)
})
})
})
}

func Test_GetMetrics(t *testing.T) {
Wrap(t, func(t *testing.T, client arangodb.Client) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, t testing.TB) {
WithDatabase(t, client, nil, func(db arangodb.Database) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, t testing.TB) {
// Role check
serverRole, err := client.ServerRole(ctx)
require.NoError(t, err)
t.Logf("ServerRole: %s", serverRole)

db, err := client.GetDatabase(ctx, "_system", nil)
require.NoError(t, err)
require.NotEmpty(t, db)
// Role check
serverRole, err := client.ServerRole(ctx)
require.NoError(t, err)
t.Logf("ServerRole: %s", serverRole)
var serverId *string
if serverRole == arangodb.ServerRoleCoordinator {
serverID, err := client.ServerID(ctx)
require.NoError(t, err)
serverId = &serverID
}

var serverId *string
if serverRole == arangodb.ServerRoleCoordinator {
serverID, err := client.ServerID(ctx)
metricsResp, err := client.GetMetrics(ctx, db.Name(), serverId)
require.NoError(t, err)
serverId = &serverID
}

metricsResp, err := client.GetMetrics(ctx, db.Name(), serverId)
require.NoError(t, err)
require.NotEmpty(t, metricsResp)
require.NotEmpty(t, metricsResp)
})
})
})
}
154 changes: 76 additions & 78 deletions v2/tests/admin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,65 +219,65 @@ func Test_GetStartupConfiguration(t *testing.T) {

func Test_ReloadRoutingTable(t *testing.T) {
Wrap(t, func(t *testing.T, client arangodb.Client) {
withContextT(t, time.Minute, func(ctx context.Context, t testing.TB) {
db, err := client.GetDatabase(ctx, "_system", nil)
require.NoError(t, err)
err = client.ReloadRoutingTable(ctx, db.Name())
require.NoError(t, err)
WithDatabase(t, client, nil, func(db arangodb.Database) {
withContextT(t, time.Minute, func(ctx context.Context, t testing.TB) {
err := client.ReloadRoutingTable(ctx, db.Name())
require.NoError(t, err)
})
})
})
}

func Test_ExecuteAdminScript(t *testing.T) {
Wrap(t, func(t *testing.T, client arangodb.Client) {
ctx := context.Background()
db, err := client.GetDatabase(ctx, "_system", nil)
require.NoError(t, err)

tests := []struct {
name string
script string
}{
{
name: "ReturnObject",
script: "return {hello: 'world'};",
},
{
name: "ReturnNumber",
script: `
WithDatabase(t, client, nil, func(db arangodb.Database) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, tb testing.TB) {
tests := []struct {
name string
script string
}{
{
name: "ReturnObject",
script: "return {hello: 'world'};",
},
{
name: "ReturnNumber",
script: `
var sum = 0;
for (var i = 1; i <= 5; i++) {
sum += i;
}
return sum;
`,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := client.ExecuteAdminScript(ctx, db.Name(), &tt.script)
var arangoErr shared.ArangoError
if errors.As(err, &arangoErr) {
t.Logf("arangoErr code:%d\n", arangoErr.Code)
if arangoErr.Code == http.StatusNotFound {
t.Skip("javascript.allow-admin-execute is disabled")
}
},
}
require.NoError(t, err)

switch v := result.(type) {
case map[string]interface{}:
t.Logf("Got object result: %+v", v)
require.Contains(t, v, "hello")
case float64:
t.Logf("Got number result: %v", v)
require.Equal(t, float64(15), v)
default:
t.Fatalf("Unexpected result type: %T, value: %+v", v, v)
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := client.ExecuteAdminScript(ctx, db.Name(), &tt.script)
var arangoErr shared.ArangoError
if errors.As(err, &arangoErr) {
t.Logf("arangoErr code:%d\n", arangoErr.Code)
if arangoErr.Code == http.StatusNotFound {
t.Skip("javascript.allow-admin-execute is disabled")
}
}
require.NoError(t, err)

switch v := result.(type) {
case map[string]interface{}:
t.Logf("Got object result: %+v", v)
require.Contains(t, v, "hello")
case float64:
t.Logf("Got number result: %v", v)
require.Equal(t, float64(15), v)
default:
t.Fatalf("Unexpected result type: %T, value: %+v", v, v)
}
})
}
})
}
})
})
}

Expand Down Expand Up @@ -326,34 +326,33 @@ func Test_CompactDatabases(t *testing.T) {
// Test_GetTLSData checks that TLS configuration data is available and valid, skipping if not configured.
func Test_GetTLSData(t *testing.T) {
Wrap(t, func(t *testing.T, client arangodb.Client) {
withContextT(t, time.Minute, func(ctx context.Context, t testing.TB) {
db, err := client.GetDatabase(ctx, "_system", nil)
require.NoError(t, err)

// Get TLS data using the client (which embeds ClientAdmin)
tlsResp, err := client.GetTLSData(ctx, db.Name())
if err != nil {
var arangoErr shared.ArangoError
if errors.As(err, &arangoErr) {
t.Logf("GetTLSData failed with ArangoDB error code: %d", arangoErr.Code)
switch arangoErr.Code {
case 403:
t.Skip("Skipping TLS get test - authentication/permission denied (HTTP 403)")
default:
t.Logf("Unexpected ArangoDB error code: %d, message: %s", arangoErr.Code, arangoErr.ErrorMessage)
WithDatabase(t, client, nil, func(db arangodb.Database) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, t testing.TB) {
// Get TLS data using the client (which embeds ClientAdmin)
tlsResp, err := client.GetTLSData(ctx, db.Name())
if err != nil {
var arangoErr shared.ArangoError
if errors.As(err, &arangoErr) {
t.Logf("GetTLSData failed with ArangoDB error code: %d", arangoErr.Code)
switch arangoErr.Code {
case 403:
t.Skip("Skipping TLS get test - authentication/permission denied (HTTP 403)")
default:
t.Logf("Unexpected ArangoDB error code: %d, message: %s", arangoErr.Code, arangoErr.ErrorMessage)
}
return
}
return
// Skip for any other error (TLS not configured, network issues, etc.)
t.Logf("GetTLSData failed: %v", err)
t.Skip("Skipping TLS get test - likely TLS not configured or other server issue")
}
// Skip for any other error (TLS not configured, network issues, etc.)
t.Logf("GetTLSData failed: %v", err)
t.Skip("Skipping TLS get test - likely TLS not configured or other server issue")
}

// Success! Validate response structure
t.Logf("TLS data retrieved successfully")
// Success! Validate response structure
t.Logf("TLS data retrieved successfully")

// Validate TLS response data
validateTLSResponse(t, tlsResp, "Retrieved")
// Validate TLS response data
validateTLSResponse(t, tlsResp, "Retrieved")
})
})
})
}
Expand Down Expand Up @@ -484,19 +483,18 @@ func Test_RotateEncryptionAtRestKey(t *testing.T) {
// Test_GetJWTSecrets validates retrieval and structure of JWT secrets, skipping if not accessible.
func Test_GetJWTSecrets(t *testing.T) {
Wrap(t, func(t *testing.T, client arangodb.Client) {
withContextT(t, time.Minute, func(ctx context.Context, t testing.TB) {
db, err := client.GetDatabase(ctx, "_system", nil)
require.NoError(t, err)

resp, err := client.GetJWTSecrets(ctx, db.Name())
if err != nil {
if handleJWTSecretsError(t, err, "GetJWTSecrets", []int{http.StatusForbidden}) {
return
WithDatabase(t, client, nil, func(db arangodb.Database) {
withContextT(t, defaultTestTimeout, func(ctx context.Context, t testing.TB) {
resp, err := client.GetJWTSecrets(ctx, db.Name())
if err != nil {
if handleJWTSecretsError(t, err, "GetJWTSecrets", []int{http.StatusForbidden}) {
return
}
require.NoError(t, err)
}
require.NoError(t, err)
}

validateJWTSecretsResponse(t, resp, "Retrieved")
validateJWTSecretsResponse(t, resp, "Retrieved")
})
})
})
}
Expand Down
Loading