You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@texera.apache.org by gi...@apache.org on 2026/08/12 03:58:31 UTC

(texera) branch gh-readonly-queue/main/pr-7561-a353b71c231f89d4d33a5fffa69be84d1ef675c5 created (now cd3872a3a6)

This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a change to branch gh-readonly-queue/main/pr-7561-a353b71c231f89d4d33a5fffa69be84d1ef675c5
in repository https://gitbox.apache.org/repos/asf/texera.git


      at cd3872a3a6 test(workflow-compiling-service): cover WorkflowCompilingService.run (#7561)

This branch includes the following new commits:

     new cd3872a3a6 test(workflow-compiling-service): cover WorkflowCompilingService.run (#7561)

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(texera) 01/01: test(workflow-compiling-service): cover WorkflowCompilingService.run (#7561)

Posted by gi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-7561-a353b71c231f89d4d33a5fffa69be84d1ef675c5
in repository https://gitbox.apache.org/repos/asf/texera.git

commit cd3872a3a68393644ac28227532ae181b8a01b8f
Author: Meng Wang <me...@uci.edu>
AuthorDate: Tue Aug 11 20:58:11 2026 -0700

    test(workflow-compiling-service): cover WorkflowCompilingService.run (#7561)
    
    ### What changes were proposed in this PR?
    
    Extends `WorkflowCompilingServiceRunSpec` to actually exercise
    `WorkflowCompilingService.run`, which had no coverage — the spec
    previously only
    asserted role annotations on the resource classes. No production code
    was
    changed.
    
    Following `AccessControlServiceRunSpec` (the template the issue points
    at), a
    mocked Dropwizard `Environment` is handed to `run(config, env)` and the
    wiring it
    installs is verified, without starting a server:
    
    - `jersey.setUrlPattern("/api/*")`
    - `jersey.register(classOf[HealthCheckResource])` and
      `jersey.register(classOf[WorkflowCompilationResource])`
    - the auth stack from `AuthFeatures.register` — asserted through the
    `RolesAllowedDynamicFeature` and `UnauthorizedExceptionMapper` it
    registers
      (without the former Jersey silently ignores `@RolesAllowed`)
    - the request-logging filter added to the application context
    
    The existing role-annotation assertion is kept.
    
    Per the issue's scope note, only `run()` is covered — `initialize()`,
    `main()`
    and the config/connection helpers are left alone since #5983 moves that
    boilerplate into a shared `ServiceBootstrap`.
    
    One thing worth noting for reviewers: `run()` calls
    `SqlServer.initConnection`,
    which is safe here because it only constructs the `SqlServer` (the pool
    connects
    lazily) — the same call is made by `AccessControlService.run`, whose
    spec already
    runs this way in CI.
    
    ### Any related issues, documentation, discussions?
    
    Closes #7557
    
    ### How was this PR tested?
    
    Unit tests, run locally. All pass, and the failure path was verified by
    breaking
    an assertion to confirm the suite goes red:
    
    ```
    sbt "WorkflowCompilingService/testOnly *WorkflowCompilingServiceRunSpec"
    # Tests: succeeded 5, failed 0
    sbt "WorkflowCompilingService/Test/scalafmtCheck"      # clean
    sbt "WorkflowCompilingService/Test/scalafix --check"   # clean
    ```
    
    ### Was this PR authored or co-authored using generative AI tooling?
    
    Generated-by: Claude Code (Opus 4.8 [1M context])
---
 .../service/WorkflowCompilingServiceRunSpec.scala  | 55 +++++++++++++++++++++-
 1 file changed, 54 insertions(+), 1 deletion(-)

diff --git a/workflow-compiling-service/src/test/scala/org/apache/texera/service/WorkflowCompilingServiceRunSpec.scala b/workflow-compiling-service/src/test/scala/org/apache/texera/service/WorkflowCompilingServiceRunSpec.scala
index 898d32a9b4..f9b4162247 100644
--- a/workflow-compiling-service/src/test/scala/org/apache/texera/service/WorkflowCompilingServiceRunSpec.scala
+++ b/workflow-compiling-service/src/test/scala/org/apache/texera/service/WorkflowCompilingServiceRunSpec.scala
@@ -19,13 +19,66 @@
 
 package org.apache.texera.service
 
-import org.apache.texera.auth.RoleAnnotationEnforcer
+import io.dropwizard.core.setup.Environment
+import io.dropwizard.jersey.DropwizardResourceConfig
+import io.dropwizard.jersey.setup.JerseyEnvironment
+import io.dropwizard.jetty.MutableServletContextHandler
+import io.dropwizard.jetty.setup.ServletEnvironment
+import org.apache.texera.auth.{RoleAnnotationEnforcer, UnauthorizedExceptionMapper}
 import org.apache.texera.service.resource.{HealthCheckResource, WorkflowCompilationResource}
+import org.eclipse.jetty.servlet.FilterHolder
+import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature
+import org.mockito.ArgumentMatchers.{any, eq => eqTo, isA}
+import org.mockito.Mockito.{mock, verify, when}
 import org.scalatest.flatspec.AnyFlatSpec
 import org.scalatest.matchers.should.Matchers
 
 class WorkflowCompilingServiceRunSpec extends AnyFlatSpec with Matchers {
 
+  // Mirrors AccessControlServiceRunSpec: run() is driven against a mocked Dropwizard
+  // environment so the wiring it installs can be asserted without starting a server.
+  // run() starts an operator-metadata warmup thread and swaps the global SqlServer
+  // instance, so it is executed once for the whole suite and the resulting mocks are
+  // shared; the assertions below only read recorded interactions.
+  private lazy val ranService: (JerseyEnvironment, MutableServletContextHandler) = {
+    val jersey = mock(classOf[JerseyEnvironment])
+    val servlets = mock(classOf[ServletEnvironment])
+    val context = mock(classOf[MutableServletContextHandler])
+    val env = mock(classOf[Environment])
+    when(env.jersey).thenReturn(jersey)
+    when(env.servlets).thenReturn(servlets)
+    when(env.getApplicationContext).thenReturn(context)
+    when(jersey.getResourceConfig).thenReturn(DropwizardResourceConfig.forTesting())
+
+    val service = new WorkflowCompilingService
+    service.run(mock(classOf[WorkflowCompilingServiceConfiguration]), env)
+
+    (jersey, context)
+  }
+
+  "WorkflowCompilingService.run" should "serve the API under /api/*" in {
+    val (jersey, _) = ranService
+    verify(jersey).setUrlPattern("/api/*")
+  }
+
+  it should "register the health check and compilation endpoints" in {
+    val (jersey, _) = ranService
+    verify(jersey).register(classOf[HealthCheckResource])
+    verify(jersey).register(classOf[WorkflowCompilationResource])
+  }
+
+  it should "install the auth stack" in {
+    val (jersey, _) = ranService
+    // AuthFeatures.register: without RolesAllowedDynamicFeature Jersey ignores @RolesAllowed
+    verify(jersey).register(classOf[RolesAllowedDynamicFeature])
+    verify(jersey).register(classOf[UnauthorizedExceptionMapper])
+  }
+
+  it should "add the request-logging filter to the application context" in {
+    val (_, context) = ranService
+    verify(context).addFilter(isA(classOf[FilterHolder]), eqTo("/*"), any())
+  }
+
   // Every endpoint this service registers declares @RolesAllowed/@PermitAll/@DenyAll.
   "WorkflowCompilingService's registered resources" should "all declare access control" in {
     RoleAnnotationEnforcer.findUnannotatedEndpoints(