{
  "_class" : "hudson.tasks.junit.TestResult",
  "testActions" : [
    
  ],
  "duration" : 4.7279997,
  "empty" : False,
  "failCount" : 0,
  "passCount" : 74,
  "skipCount" : 0,
  "suites" : [
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.InsertDefaultSiteCallbackTest",
          "duration" : 0.301,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenDatabaseCreated_thenWhenOpened_itShouldBloodyWellBeThereFfs",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "16:38:14,807 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.6\u000a16:38:14,808 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - No custom configurators were discovered as a service.\u000a16:38:14,808 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator\u000a16:38:14,809 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - Constructed \u000a...[truncated 3442 chars]...\u000alevel of logger [io.netty] to INFO\u000a16:38:14,900 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@3c9bfddc - End of configuration.\u000a16:38:14,900 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1a9c38eb - Registering current configuration as safe fallback point\u000a16:38:14,900 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 86 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY\u000a\u000a"
        }
      ],
      "duration" : 0.301,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.rest.InsertDefaultSiteCallbackTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "16:38:14,807 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.6\u000a16:38:14,808 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - No custom configurators were discovered as a service.\u000a16:38:14,808 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator\u000a16:38:14,809 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - Constructed \u000a...[truncated 3442 chars]...\u000alevel of logger [io.netty] to INFO\u000a16:38:14,900 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@3c9bfddc - End of configuration.\u000a16:38:14,900 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1a9c38eb - Registering current configuration as safe fallback point\u000a16:38:14,900 |-INFO in ch.qos.logback.classic.util.ContextInitializer@58ffcbd7 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 86 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY\u000a\u000a",
      "timestamp" : "2025-06-27T14:38:14.764Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.PersonAuthRegisterRouteTest",
          "duration" : 1.052,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidCredentials_whenLoginCalled_thenShouldReturnAccount",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] : created tables\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: table\u000a...[truncated 34289 chars]...\u000a27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare \"\u000a         SELECT PersonAuth2.* FROM PersonAuth2 where PersonAuth2.pauthUid = ?\u000a    \"\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.PersonAuthRegisterRouteTest",
          "duration" : 0.122,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenInvalidCredentials_whenLoginCalled_thenShouldRespondForbidden",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] : created tables\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: table\u000a...[truncated 34289 chars]...\u000a27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare \"\u000a         SELECT PersonAuth2.* FROM PersonAuth2 where PersonAuth2.pauthUid = ?\u000a    \"\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.PersonAuthRegisterRouteTest",
          "duration" : 0.107,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRegisterPersonWithAuth_whenRegisterCalled_thenShouldGenerateAuth",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] : created tables\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: table\u000a...[truncated 34289 chars]...\u000a27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare \"\u000a         SELECT PersonAuth2.* FROM PersonAuth2 where PersonAuth2.pauthUid = ?\u000a    \"\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4\u000a",
          "stdout" : ""
        }
      ],
      "duration" : 1.281,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.rest.PersonAuthRegisterRouteTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "Jun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] : created tables\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete\u000aJun 27, 2025 4:38:15 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: table\u000a...[truncated 34289 chars]...\u000a27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [prepareAndUseStatementAsync - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - prepare \"\u000a         SELECT PersonAuth2.* FROM PersonAuth2 where PersonAuth2.pauthUid = ?\u000a    \"\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4\u000a",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:38:15.068Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.TestContentEntryVersionRoute",
          "duration" : 0.019,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryNotCached_whenRequested_thenShouldReturn404",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.TestContentEntryVersionRoute",
          "duration" : 0.067,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryIsCached_whenRequested_thenResponseShouldMatch",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry\u000a",
          "stdout" : ""
        }
      ],
      "duration" : 0.086,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.rest.TestContentEntryVersionRoute",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "Jun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry\u000a",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:38:16.351Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.TestSiteRoute",
          "duration" : 0.025,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenAvailableWorkSpace_whenRequested_thenShouldReturnWorkSpaceObject",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SyncNode, Site, PersonAuth2, SystemPermission\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site\u000a",
          "stdout" : ""
        }
      ],
      "duration" : 0.025,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.rest.TestSiteRoute",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "Jun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aINFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SyncNode, Site, PersonAuth2, SystemPermission\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode\u000aJun 27, 2025 4:38:16 PM io.github.aakira.napier.DebugAntilog performLog\u000aFINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site\u000a",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:38:16.437Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.VerifySignInWithPasskeyTest",
          "duration" : 0.154,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "verifyPasskeySignInWithValidData",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.VerifySignInWithPasskeyTest",
          "duration" : 0.008,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "verifyPasskeySignInWithWrongSignature",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.rest.VerifySignInWithPasskeyTest",
          "duration" : 0.006,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "verifyPasskeySignInWithWrongChallenge",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.168,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.rest.VerifySignInWithPasskeyTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:38:16.463Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.jsmodules.JsIntlWrapperTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidLocale_whenFormatCalled_thenShouldFormatDate[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "[log] Now: 6/27/2025\u000a"
        }
      ],
      "duration" : 0.0,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.jsmodules.JsIntlWrapperTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "[log] Now: 6/27/2025\u000a",
      "timestamp" : "2025-06-27T14:37:56.101Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.util.WebEndpointResolverTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenApiUrlInSearchParams_whenEndpointResolved_thenShouldReturnSearchParam[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.util.WebEndpointResolverTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRootHref_whenEndpointIsResolved_thenShouldReturnHref[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.util.WebEndpointResolverTest",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenHrefWithDevelopmentLink_whenEndpointIsResolved_thenShouldReturnHref[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.util.WebEndpointResolverTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenHrefWithProductionLink_whenEndpointIsResolved_thenShouldReturnHref[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.001,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.util.WebEndpointResolverTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:37:56.101Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.core.navigation.SavedStateHandle2Test",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenStateSavedToHistory_whenNewHandleCreated_thenValueShouldBeRestored[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.001,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.core.navigation.SavedStateHandle2Test",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:36:42.194Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.463,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponseIsUpdated_whenRetrieved_thenLatestResponseWillBeReturned[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.026,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEmptyFileStored_whenRequestMade_thenWillBeRetrievedAsCacheHit[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.005,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryNotStored_whenRetrieved_thenWillReturnNull[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.072,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryNotLocked_whenLockAdded_thenWillBeMovedToPersistentDir[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.022,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenNonCompressableFileStored_whenRequestMade_thenWillBeRetrievedAsCacheHitAndNotCompressed[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.016,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryLocked_whenLockRemoved_thenWillBeMovedToCacheDir[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.015,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponseIsNotUpdated_whenStored_thenWillUpdateLastAccessAndValidationTime[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.013,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCompressableFileStored_whenRequestMadeWithoutAcceptEncoding_thenWillBeRetrievedAsCacheHitAndBeCompressed[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.014,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCompressableFileStored_whenRequestMade_thenWillBeRetrievedAsCacheHitAndBeCompressed[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.015,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenFileCachedAndStored_whenPartialRequestMadeIfRangeNotMatched_thenWillReceiveFullResponse[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.013,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenLockedEntryStored_whenRequestMade_thenWillBeRetrievedAsCacheHitAndSavedInPersistentPath[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheJvmTest",
          "duration" : 0.035,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenFileCachedAndStored_whenPartialRequestMade_thenWillReceivePartialData[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
          "stdout" : ""
        }
      ],
      "duration" : 0.711,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.UstadCacheJvmTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "SLF4J: No SLF4J providers were found.\u000aSLF4J: Defaulting to no-operation (NOP) logger implementation\u000aSLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.\u000a",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:31.547Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.UstadCacheTrimmerTest",
          "duration" : 0.103,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntriesExceedSize_whenTrimRun_thenWillEvictRequiredEntries[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.103,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.UstadCacheTrimmerTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:32.260Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.CacheControlFreshnessCheckerImplTest",
          "duration" : 0.002,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponseWithinMaxAge_whenChecked_isFresh[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.CacheControlFreshnessCheckerImplTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponseHasMustRevalidate_whenChecked_isStale[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.CacheControlFreshnessCheckerImplTest",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponseIsImmutable_whenChecked_isFresh[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.CacheControlFreshnessCheckerImplTest",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRequestHasNoCacheDirective_whenChecked_isStale[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.004,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.cachecontrol.CacheControlFreshnessCheckerImplTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:32.366Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.ResponseCacheabilityCheckerImplTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenPartialResponse_whenChecked_notCacheable[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.ResponseCacheabilityCheckerImplTest",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "given200OkResponse_whenChecked_isCacheable[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.cachecontrol.ResponseCacheabilityCheckerImplTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenNoStoreInHeader_whenChecked_notCacheable[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.002,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.cachecontrol.ResponseCacheabilityCheckerImplTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:32.372Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.io.RangeInputStreamTest",
          "duration" : 0.002,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidRange_whenReadInSameIncrementAsBuffer_thenWillMatch[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.io.RangeInputStreamTest",
          "duration" : 0.002,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidRange_whenRead_thenWillMatch[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.004,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.io.RangeInputStreamTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:32.375Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 1.245,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenImmutableEntryWasCached_whenRequested_thenCacheWillHit[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.017,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCompressableEntryNotYetCachedAlreadyEncoded_whenRequested_thenWillRespondAndCacheIt[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.011,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponseHasNoStoreHeader_whenRequested_thenIsNotStored[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.086,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenResponsePartiallyStored_whenRequestedWithResumeUuid_thenWillResume[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.024,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryNotYetCached_whenRequested_thenWillRespondAndCacheIt[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.026,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEntryIsStaleAndValidatable_whenRequested_thenIsValidated[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.013,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCompressableEntryNotYetCachedNotEncoded_whenRequested_thenWillRespondAndCacheIt[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
          "duration" : 0.006,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRequestNotStorable_whenRequested_thenIsNotStored[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
          "stdout" : ""
        }
      ],
      "duration" : 1.429,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.okhttp.UstadCacheInterceptorTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "Jun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localh\u000a...[truncated 19531 chars]...\u000aile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aINFO: INFO DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete\u000aJun 27, 2025 4:34:33 PM com.ustadmobile.core.util.NapierAntilogJvm performLog\u000aFINEST: FINEST UstadCache - OKHttp-CacheInterceptor:  intercept: GET http://localhost.localdomain:36677/testfile1.png\u000a",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:32.383Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.partial.ContentRangeTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRangeWithStartToEnd_whenParsed_thenMatches[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.partial.ContentRangeTest",
          "duration" : 0.002,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRangeWhereLastByteAfterTotalBytes_whenParsed_thenThrowsRangeNotSatisfiableException[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.partial.ContentRangeTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenRangeWhereStartIsAfterLast_whenParsed_thenThrowsRangeNotSatisfiableException[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.partial.ContentRangeTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenBlankStart_whenParsed_thenMatches[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.libcache.partial.ContentRangeTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidRange_whenParsed_thenMatches[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.002,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.libcache.partial.ContentRangeTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:34:33.814Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestAcceptEncodingUtil",
          "duration" : 0.008,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEncodingNotSupported_whenIsEncodingAcceptableCalled_thenShouldBeFalse[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestAcceptEncodingUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEncodingSupportedByStar_whenIsEncodingAcceptableCalled_thenShouldBeTrue[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestAcceptEncodingUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEncodingDirectlySupported_whenIsEncodingAcceptableCalled_thenShouldBeTrue[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestAcceptEncodingUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEncodingWithQualityValue_whenParsed_thenShouldBeInMap[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestAcceptEncodingUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenEncodingWithoutQualityValue_whenParsed_thenShouldBeInMap[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.009,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.util.TestAcceptEncodingUtil",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:33:10.614Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestRangeUtil",
          "duration" : 0.008,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenZeroToEndRangeHeader_whenParseRangeRequestHeaderCalled_thenShouldReturnWholeFileRange[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestRangeUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenUnsatisfiableRangeHeader_whenParseRangeRequestHeaderCalled_tehnShouldReturnRangeNotSatisfiable[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestRangeUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidRangeHeader_whenParseRangeRequestHeaderCalled_thenShouldReturnRange[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestRangeUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenInvalidHeader_whenParseRangeRequestCalled_thenShouldReturnBadRequest[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.008,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.util.TestRangeUtil",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:33:10.624Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestSysPathUtil",
          "duration" : 0.006,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCommandInPathOnWindows_whenCommandInPathCalled_thenReturnsFile[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestSysPathUtil",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCommandNotInPathOnWindows_whenCommandInPathCalled_thenReturnsNull[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestSysPathUtil",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCommandNotInPathOnUnix_whenFindCommandInPathCalled_thenReturnNull[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.lib.util.TestSysPathUtil",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenCommandInPathOnUnix_whenFindCommandInPathCalled_thenReturnsFile[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.008,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.lib.util.TestSysPathUtil",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:33:10.635Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.xxhashkmp.commonjvmimpl.XXHashJvmTest",
          "duration" : 0.012,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenString_whenInvoked_willHash[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "a96086d5c2cb52a9\u000a"
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.xxhashkmp.commonjvmimpl.XXHashJvmTest",
          "duration" : 0.008,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenLongArray_whenInvoked_thenWillHash[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "a96086d5c2cb52a9\u000a"
        }
      ],
      "duration" : 0.02,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.xxhashkmp.commonjvmimpl.XXHashJvmTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "a96086d5c2cb52a9\u000a",
      "timestamp" : "2025-06-27T14:33:10.876Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.xxhashkmp.jsimpl.XXHashJsTest",
          "duration" : 0.0,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "test[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.xxhashkmp.jsimpl.XXHashJsTest",
          "duration" : 0.001,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenLongArray_whenInvoked_thenWillHash[js, browser, ChromeHeadless137.0.0.0, Linuxx86_64]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.001,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.xxhashkmp.jsimpl.XXHashJsTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:33:18.132Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.sharedse.impl.http.IHTTPSessionExtTest",
          "duration" : 0.429,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenPutRequestWithBody_whenParseRequestBodyCalled_thenShouldReturnContent[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "16:38:13,993 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.6\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - No custom configurators were discovered as a service.\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Constructed con\u000a...[truncated 3708 chars]...\u000a level of logger [io.netty] to INFO\u000a16:38:14,083 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@24b6b8f6 - End of configuration.\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@72cf2de5 - Registering current configuration as safe fallback point\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 84 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY\u000a\u000a"
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.sharedse.impl.http.IHTTPSessionExtTest",
          "duration" : 0.016,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenLargerPostRequestWithBody_whenParseRequestCalled_thenShouldReturnContent[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "16:38:13,993 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.6\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - No custom configurators were discovered as a service.\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Constructed con\u000a...[truncated 3708 chars]...\u000a level of logger [io.netty] to INFO\u000a16:38:14,083 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@24b6b8f6 - End of configuration.\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@72cf2de5 - Registering current configuration as safe fallback point\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 84 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY\u000a\u000a"
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.sharedse.impl.http.IHTTPSessionExtTest",
          "duration" : 0.015,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenSmallPostRequestWithBody_whenParseRequestCalled_thenShouldReturnContent[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : "16:38:13,993 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.6\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - No custom configurators were discovered as a service.\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Constructed con\u000a...[truncated 3708 chars]...\u000a level of logger [io.netty] to INFO\u000a16:38:14,083 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@24b6b8f6 - End of configuration.\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@72cf2de5 - Registering current configuration as safe fallback point\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 84 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY\u000a\u000a"
        }
      ],
      "duration" : 0.461,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.sharedse.impl.http.IHTTPSessionExtTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "16:38:13,993 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.6\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - No custom configurators were discovered as a service.\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator\u000a16:38:13,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - Constructed con\u000a...[truncated 3708 chars]...\u000a level of logger [io.netty] to INFO\u000a16:38:14,083 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@24b6b8f6 - End of configuration.\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@72cf2de5 - Registering current configuration as safe fallback point\u000a16:38:14,084 |-INFO in ch.qos.logback.classic.util.ContextInitializer@5af3a0f - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 84 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY\u000a\u000a",
      "timestamp" : "2025-06-27T14:38:13.929Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.sharedse.impl.http.TestHtmlFilterSerializer",
          "duration" : 0.042,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenXhtmlWithEntities_whenFiltered_thenShouldParseSuccessfully[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        },
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.sharedse.impl.http.TestHtmlFilterSerializer",
          "duration" : 0.008,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenValidXhtmlPage_whenFiltered_thenShouldParseSuccessfully[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.051,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.sharedse.impl.http.TestHtmlFilterSerializer",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:38:14.391Z"
    },
    {
      "cases" : [
        {
          "testActions" : [
            
          ],
          "age" : 0,
          "className" : "com.ustadmobile.sharedse.util.UmZipUtilTest",
          "duration" : 0.052,
          "errorDetails" : None,
          "errorStackTrace" : None,
          "failedSince" : 0,
          "name" : "givenAnEpubFile_whenUnzipped_thenAllFilesShouldBeAvailable[jvm]",
          "properties" : {
            
          },
          "skipped" : False,
          "skippedMessage" : None,
          "status" : "PASSED",
          "stderr" : "",
          "stdout" : ""
        }
      ],
      "duration" : 0.052,
      "enclosingBlockNames" : [
        
      ],
      "enclosingBlocks" : [
        
      ],
      "id" : None,
      "name" : "com.ustadmobile.sharedse.util.UmZipUtilTest",
      "nodeId" : None,
      "properties" : {
        
      },
      "stderr" : "",
      "stdout" : "",
      "timestamp" : "2025-06-27T14:38:14.443Z"
    }
  ]
}