@Test
void testAuthFailedWhenParameterError() {

    String service = "org.apache.dubbo.DemoService";
    String method = "test";
    Object[] originalParams = new Object[]{"dubbo1", "dubbo2"};
    long currentTimeMillis = System.currentTimeMillis();
    URL url = URL.valueOf("dubbo://10.10.10.10:2181")
            .setServiceInterface(service)
            .addParameter(Constants.ACCESS_KEY_ID_KEY, "ak")
            .addParameter(Constants.SECRET_ACCESS_KEY_KEY, "sk")
            .addParameter(CommonConstants.APPLICATION_KEY, "test-provider")
            .addParameter(Constants.PARAMETER_SIGNATURE_ENABLE_KEY, true)
            .addParameter(Constants.SERVICE_AUTH, true);
    Invoker invoker = mock(Invoker.class);
    Invocation invocation = mock(Invocation.class);
    when(invocation.getObjectAttachment(Constants.AK_KEY)).thenReturn("ak");
    when(invocation.getObjectAttachment(CommonConstants.CONSUMER)).thenReturn("test-consumer");
    when(invocation.getObjectAttachment(Constants.REQUEST_TIMESTAMP_KEY)).thenReturn(currentTimeMillis);
    when(invocation.getMethodName()).thenReturn(method);
    Object[] fakeParams = new Object[]{"dubbo1", "dubbo3"};
    when(invocation.getArguments()).thenReturn(fakeParams);
    when(invoker.getUrl()).thenReturn(url);
    String requestString = String.format(Constants.SIGNATURE_STRING_FORMAT,
            url.getColonSeparatedKey(), invocation.getMethodName(), "sk", currentTimeMillis);
    String sign = SignatureUtils.sign(originalParams, requestString, "sk");
    when(invocation.getObjectAttachment(Constants.REQUEST_SIGNATURE_KEY)).thenReturn(sign);
    ProviderAuthFilter providerAuthFilter = new ProviderAuthFilter();
    Result result = providerAuthFilter.invoke(invoker, invocation);
    assertTrue(result.hasException());
    assertTrue(result.getException() instanceof RpcAuthenticationException);
}