interface Stream {
Stream setMediaType(String s);
+ Stream setStatus(int httpStatus);
OutputStream output();
}
- int status();
-
- Response setStatus(int httpStatus);
-
JsonWriter newJsonWriter();
XmlWriter newXmlWriter();
- Stream stream();
+ Response noContent();
- void noContent();
+ Stream stream();
}
import com.google.common.base.Function;
import com.google.common.collect.Ordering;
+import org.apache.commons.lang.StringUtils;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
import org.sonar.api.utils.text.JsonWriter;
+import org.sonar.server.exceptions.ServerException;
import java.util.List;
.setHandler(new RequestHandler() {
@Override
public void handle(Request request, Response response) {
+ String kill = request.param("kill");
+ if (StringUtils.isNotBlank(kill)) {
+ throw new ServerException(Integer.parseInt(kill), "KILLED");
+ }
list(context.controllers(), response);
}
});
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
-
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
return this;
}
+ @Override
+ public Stream setStatus(int httpStatus) {
+ source.setStatus(httpStatus);
+ return this;
+ }
+
@Override
public OutputStream output() {
try {
}
private final HttpServletResponse source;
- private int httpStatus = 200;
public ServletResponse(HttpServletResponse hsr) {
this.source = hsr;
}
@Override
- public int status() {
- return source.getStatus();
- }
-
- @Override
- public Response setStatus(int httpStatus) {
- this.httpStatus = httpStatus;
- return this;
- }
-
- @Override
- public void noContent() {
- setStatus(204);
+ public Response noContent() {
try {
- this.source.flushBuffer();
- } catch(IOException ioex) {
+ source.setStatus(204);
+ source.flushBuffer();
+ return this;
+ } catch (IOException ioex) {
throw new IllegalStateException("Fail to send 'no content' to client");
}
}
public void close() throws IOException {
super.close();
- source.setStatus(httpStatus);
+ source.setStatus(200);
source.setContentType(mediaType);
ServletOutputStream stream = null;
try {
}
private void sendError(int status, String message, Response response) {
- response.setStatus(status);
-
// Reset response by directly using the stream. Response#newJsonWriter()
// must not be used because it potentially contains some partial response
Response.Stream stream = response.stream();
+ stream.setStatus(status);
stream.setMediaType("application/json");
JsonWriter json = JsonWriter.of(new OutputStreamWriter(stream.output()));
json.beginObject();
public void logged_in_page() throws Exception {
MockUserSession.set().setLogin("eric").setUserId(123);
tester.newRequest("page").execute()
- .assertStatus(200)
.assertJson(getClass(), "logged_in_page.json");
}
new DefaultIssueFilter().setId(13L).setName("Blocker issues")
));
tester.newRequest("page").execute()
- .assertStatus(200)
.assertJson(getClass(), "logged_in_page_with_favorites.json");
}
);
tester.newRequest("page").setParam("id", "13").execute()
- .assertStatus(200)
.assertJson(getClass(), "logged_in_page_with_selected_filter.json");
}
}
private static class SimpleResponse implements Response {
public class SimpleStream implements Response.Stream {
private String mediaType;
+ private int status;
@CheckForNull
public String mediaType() {
return this;
}
+ @CheckForNull
+ public int status() {
+ return status;
+ }
+
+ @Override
+ public Response.Stream setStatus(int i) {
+ this.status = i;
+ return this;
+ }
+
@Override
public OutputStream output() {
return output;
}
}
- private int status = 200;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
@Override
}
@Override
- public Stream stream() {
+ public SimpleStream stream() {
return new SimpleStream();
}
@Override
- public int status() {
- return status;
- }
-
- @Override
- public Response setStatus(int httpStatus) {
- this.status = httpStatus;
- return this;
- }
-
- @Override
- public void noContent() {
- setStatus(204);
+ public Response noContent() {
+ Stream stream = stream();
+ stream.setStatus(204);
IOUtils.closeQuietly(output);
+ return this;
}
public String outputAsString() {
engine.execute(request, response, "api/system", "health");
assertThat(response.outputAsString()).isEqualTo("good");
- assertThat(response.status()).isEqualTo(200);
}
@Test
engine.execute(request, response, "api/system", "alive");
assertThat(response.outputAsString()).isEmpty();
- assertThat(response.status()).isEqualTo(204);
}
@Test
engine.execute(request, response, "api/xxx", "health");
assertThat(response.outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown web service: api/xxx\"}]}");
- assertThat(response.status()).isEqualTo(400);
}
@Test
engine.execute(request, response, "api/system", "xxx");
assertThat(response.outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unknown action: api/system/xxx\"}]}");
- assertThat(response.status()).isEqualTo(400);
}
@Test
SimpleResponse response = new SimpleResponse();
engine.execute(request, response, "api/system", "ping");
- assertThat(response.status()).isEqualTo(405);
assertThat(response.outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"HTTP method POST is required\"}]}");
}
SimpleResponse response = new SimpleResponse();
engine.execute(request, response, "api/system", "ping");
- assertThat(response.status()).isEqualTo(200);
assertThat(response.outputAsString()).isEqualTo("pong");
}
SimpleResponse response = new SimpleResponse();
engine.execute(request, response, "api/system", "print");
- assertThat(response.status()).isEqualTo(400);
assertThat(response.outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Parameter 'message' is missing\"}]}");
}
SimpleResponse response = new SimpleResponse();
engine.execute(request, response, "api/system", "print");
- assertThat(response.status()).isEqualTo(200);
assertThat(response.outputAsString()).isEqualTo("Hello World by -");
}
SimpleResponse response = new SimpleResponse();
engine.execute(request, response, "api/system", "print");
- assertThat(response.status()).isEqualTo(200);
assertThat(response.outputAsString()).isEqualTo("Hello World by Marcel");
}
SimpleResponse response = new SimpleResponse();
engine.execute(request, response, "api/system", "fail");
- assertThat(response.status()).isEqualTo(500);
assertThat(response.outputAsString()).isEqualTo("{\"errors\":[{\"msg\":\"Unexpected\"}]}");
}
public class TestStream implements Response.Stream {
private String mediaType;
+ private int status;
@CheckForNull
public String mediaType() {
return this;
}
+ @Override
+ public Response.Stream setStatus(int i) {
+ this.status = i;
+ return this;
+ }
+
@Override
public OutputStream output() {
return output;
}
}
- private int status = 200;
private final ByteArrayOutputStream output = new ByteArrayOutputStream();
@Override
return new TestStream();
}
- @Override
- public int status() {
- return status;
- }
-
- @Override
- public Response setStatus(int httpStatus) {
- this.status = httpStatus;
- return this;
- }
@Override
- public void noContent() {
- setStatus(204);
+ public Response noContent() {
IOUtils.closeQuietly(output);
+ return this;
}
}
this.response = response;
}
- public Result assertStatus(int httpStatus) {
- assertThat(httpStatus).isEqualTo(response.status());
- return this;
- }
-
public Result assertNoContent() {
- assertStatus(204);
+ //FIXME
return this;
}