@Override
    String getInterfaceName(Invoker invoker, String prefix) {
        return DubboUtils.getInterfaceName(invoker, prefix);
    }
@Test
    public void testDegradeSync() {
        try (MockedStatic<TimeUtil> mocked = super.mockTimeUtil()) {
            setCurrentMillis(mocked, 1740000000000L);

            Invocation invocation = DubboTestUtil.getDefaultMockInvocationOne();
            Invoker invoker = DubboTestUtil.getDefaultMockInvoker();
            initDegradeRule(DubboUtils.getInterfaceName(invoker));

            Result result = invokeDubboRpc(false, invoker, invocation);
            verifyInvocationStructureForCallFinish(invoker, invocation);
            assertEquals("normal", result.getValue());

            // inc the clusterNode's exception to trigger the fallback
            for (int i = 0; i < 5; i++) {
                invokeDubboRpc(true, invoker, invocation);
                verifyInvocationStructureForCallFinish(invoker, invocation);
            }

            Result result2 = invokeDubboRpc(false, invoker, invocation);
            assertEquals("fallback", result2.getValue());

            // sleeping 1000 ms to reset exception
            sleep(mocked, 1000);
            Result result3 = invokeDubboRpc(false, invoker, invocation);
            assertEquals("normal", result3.getValue());

            Context context = ContextUtil.getContext();
            assertNull(context);
        }
    }