/**
   * Verify that a remote answering with '403 Forbidden' will not be auto-blocked with and without a
   * local artifact cached.
   */
  @Test
  public void testNoAutoblockOn403() throws Exception {
    stopProxy();

    server = Server.withPort(proxyPort).start();

    server.serve("/").withBehaviours(content("ok"));
    server.serve("/remote/release-proxy-repo-1/nexus4593/*").withBehaviours(get(getTestFile("/")));

    downloadArtifact(GavUtil.newGav("nexus4593", "artifact", "1.0.0"), "target");

    assertThat(ProxyMode.valueOf(getStatus().getProxyMode()), is(ProxyMode.ALLOW));

    server.serve("/*").withBehaviours(error(403));

    // download will not fail because we have a local copy cached, but the remote will be hit b/c
    // maxAge is set to 0
    downloadArtifact(GavUtil.newGav("nexus4593", "artifact", "1.0.0"), "target");

    assertThat(ProxyMode.valueOf(getStatus().getProxyMode()), is(ProxyMode.ALLOW));

    try {
      downloadArtifact(GavUtil.newGav("g", "a", "403"), "target");
      assertThat("should fail b/c of 403", false);
    } catch (IOException e) {
      // expected, remote will answer with 403
    }

    assertThat(ProxyMode.valueOf(getStatus().getProxyMode()), is(ProxyMode.ALLOW));
  }
  /** Verify that un-autoblocking a repo works when 'HEAD /' is giving 403. */
  @Test(dependsOnMethods = "testAutoblockOn401")
  public void testUnAutoblockFor403() throws Exception {
    startErrorServer(403);
    assertThat(ProxyMode.valueOf(getStatus().getProxyMode()), is(ProxyMode.BLOCKED_AUTO));

    for (int i = 0; i < 10; i++) {
      if (!ProxyMode.valueOf(getStatus().getProxyMode()).equals(ProxyMode.BLOCKED_AUTO)) {
        break;
      }
      Thread.sleep(1000);
    }

    assertThat(
        "No UnAutoblock in 10s",
        ProxyMode.valueOf(getStatus().getProxyMode()),
        is(ProxyMode.ALLOW));
  }
  /**
   * Verify that a remote answering with '401' will still be auto-blocked.
   *
   * <p>This test will change repo status to auto blocked.
   */
  @Test(dependsOnMethods = "testNoAutoblockOn403")
  public void testAutoblockOn401() throws Exception {
    startErrorServer(401);

    try {
      downloadArtifact(GavUtil.newGav("g", "a", "401"), "target");
    } catch (IOException e) {
      // expected, remote will answer with 401
    }

    RepositoryStatusResource status = getStatus();

    assertThat(ProxyMode.valueOf(status.getProxyMode()), is(ProxyMode.BLOCKED_AUTO));
  }