diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index fdf36295..198e4bc6 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -148,6 +148,21 @@ jobs: - if: needs.changes.outputs.platform == 'true' name: Run golangci-lint run: golangci-lint run --timeout 3m ./... || true + - if: needs.changes.outputs.platform == 'true' + name: Diagnostic — per-package verbose 60s + run: | + set +e + go test -race -v -timeout 60s ./internal/handlers/... 2>&1 | tee /tmp/test-handlers.log + handlers_exit=$? + go test -race -v -timeout 60s ./internal/pendinguploads/... 2>&1 | tee /tmp/test-pu.log + pu_exit=$? + echo "::group::handlers exit=$handlers_exit (last 100 lines)" + tail -100 /tmp/test-handlers.log + echo "::endgroup::" + echo "::group::pendinguploads exit=$pu_exit (last 100 lines)" + tail -100 /tmp/test-pu.log + echo "::endgroup::" + continue-on-error: true - if: needs.changes.outputs.platform == 'true' name: Run tests with race detection and coverage run: go test -race -coverprofile=coverage.out ./... diff --git a/workspace-server/internal/handlers/delegation_test.go b/workspace-server/internal/handlers/delegation_test.go index 38c63206..b2d1c93a 100644 --- a/workspace-server/internal/handlers/delegation_test.go +++ b/workspace-server/internal/handlers/delegation_test.go @@ -983,7 +983,16 @@ func expectExecuteDelegationBase(mock sqlmock.Sqlmock) { WithArgs("dispatched", "", testSourceID, testDelegationID). WillReturnResult(sqlmock.NewResult(0, 1)) - // CanCommunicate (source=target self-call is always allowed — no DB lookup needed) + // CanCommunicate: source != target → fires two getWorkspaceRef lookups. + // Both test fixtures have parent_id = NULL (root-level siblings) → allowed. + // Order matches call order: source first, then target. + mock.ExpectQuery("SELECT id, parent_id FROM workspaces WHERE id"). + WithArgs(testSourceID). + WillReturnRows(sqlmock.NewRows([]string{"id", "parent_id"}).AddRow(testSourceID, nil)) + mock.ExpectQuery("SELECT id, parent_id FROM workspaces WHERE id"). + WithArgs(testTargetID). + WillReturnRows(sqlmock.NewRows([]string{"id", "parent_id"}).AddRow(testTargetID, nil)) + // resolveAgentURL: reads ws:{id}:url from Redis, falls back to DB for target mock.ExpectQuery("SELECT url, status FROM workspaces WHERE id = "). WithArgs(testTargetID).