public static void assertWagonExceptionMessage()

in wagon-tcks/wagon-tck-http/src/main/java/org/apache/maven/wagon/tck/http/Assertions.java [90:205]


    public static void assertWagonExceptionMessage(
            Exception e, int forStatusCode, String forUrl, String forReasonPhrase, ProxyInfo proxyInfo) {
        // TODO: handle AuthenticationException for Wagon.connect() calls
        assertNotNull(e);
        try {
            assertTrue("only verify instances of WagonException", e instanceof WagonException);

            String reasonPhrase;
            String assertMessageForBadMessage = "exception message not described properly";

            if (proxyInfo != null) {
                assertTrue(
                        "message should end with proxy information if proxy was used",
                        e.getMessage().endsWith(proxyInfo.toString()));
            }

            switch (forStatusCode) {
                case HttpServletResponse.SC_NOT_FOUND:
                    // TODO: add test for 410: Gone?
                    assertTrue(
                            "404 not found response should throw ResourceDoesNotExistException",
                            e instanceof ResourceDoesNotExistException);
                    reasonPhrase = (forReasonPhrase == null || forReasonPhrase.isEmpty())
                            ? " Not Found"
                            : (" " + forReasonPhrase);
                    assertEquals(
                            assertMessageForBadMessage,
                            "resource missing at " + forUrl + ", status: 404" + reasonPhrase,
                            e.getMessage());
                    break;

                case HttpServletResponse.SC_UNAUTHORIZED:
                    // FIXME assumes Wagon.get()/put() returning 401 instead of Wagon.connect()
                    assertTrue(
                            "401 Unauthorized should throw AuthorizationException since "
                                    + " AuthenticationException is not explicitly declared as thrown from wagon "
                                    + "methods",
                            e instanceof AuthorizationException);
                    reasonPhrase = (forReasonPhrase == null || forReasonPhrase.isEmpty())
                            ? " Unauthorized"
                            : (" " + forReasonPhrase);
                    assertEquals(
                            assertMessageForBadMessage,
                            "authentication failed for " + forUrl + ", status: 401" + reasonPhrase,
                            e.getMessage());
                    break;

                case HttpServletResponse.SC_PROXY_AUTHENTICATION_REQUIRED:
                    assertTrue(
                            "407 Proxy authentication required should throw AuthorizationException",
                            e instanceof AuthorizationException);
                    reasonPhrase = (forReasonPhrase == null || forReasonPhrase.isEmpty())
                            ? " Proxy Authentication Required"
                            : (" " + forReasonPhrase);
                    assertEquals(
                            assertMessageForBadMessage,
                            "proxy authentication failed for " + forUrl + ", status: 407" + reasonPhrase,
                            e.getMessage());
                    break;

                case HttpServletResponse.SC_FORBIDDEN:
                    assertTrue(
                            "403 Forbidden should throw AuthorizationException", e instanceof AuthorizationException);
                    reasonPhrase = (forReasonPhrase == null || forReasonPhrase.isEmpty())
                            ? " Forbidden"
                            : (" " + forReasonPhrase);
                    assertEquals(
                            assertMessageForBadMessage,
                            "authorization failed for " + forUrl + ", status: 403" + reasonPhrase,
                            e.getMessage());
                    break;

                default:
                    assertTrue(
                            "transfer failures should at least be wrapped in a TransferFailedException",
                            e instanceof TransferFailedException);

                    // the status code and reason phrase cannot always be learned due to implementation limitations
                    // so the message may not include them, but the implementation should use a consistent format
                    assertTrue(
                            "message should always include url tried: " + e.getMessage(),
                            e.getMessage().startsWith("transfer failed for " + forUrl));

                    String statusCodeStr = forStatusCode == NO_RESPONSE_STATUS_CODE ? "" : ", status: " + forStatusCode;
                    if (forStatusCode != NO_RESPONSE_STATUS_CODE) {

                        assertTrue(
                                "if there was a response status line, the status code should be >= 400",
                                forStatusCode >= HttpServletResponse.SC_BAD_REQUEST);

                        if (e.getMessage().length() > ("transfer failed for " + forUrl).length()) {
                            assertTrue(
                                    "message should include url and status code: " + e.getMessage(),
                                    e.getMessage().startsWith("transfer failed for " + forUrl + statusCodeStr));
                        }

                        reasonPhrase = forReasonPhrase == null ? "" : " " + forReasonPhrase;

                        if (reasonPhrase.length() > 0
                                && e.getMessage().length()
                                        > ("transfer failed for " + forUrl + statusCodeStr).length()) {
                            assertTrue(
                                    "message should include url and status code and reason phrase: " + e.getMessage(),
                                    e.getMessage()
                                            .startsWith(
                                                    "transfer failed for " + forUrl + statusCodeStr + reasonPhrase));
                        }
                    }

                    break;
            }
        } catch (AssertionError assertionError) {
            LOGGER.error("Exception which failed assertions: ", e);
            throw assertionError;
        }
    }