/**
* Copyright (C) 2016 SignalFx, Inc. All rights reserved.
*/
package com.signalfx.metrics.connection;
import java.io.IOException;
import java.util.Collections;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpStatus;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.junit.Test;
import com.signalfx.connection.AbstractHttpReceiverConnection;
import com.signalfx.endpoint.SignalFxEndpoint;
import com.signalfx.metrics.protobuf.SignalFxProtocolBuffers;
public class HttpDataPointProtobufReceiverConnectionTest {
public static final String AUTH_TOKEN = "AUTH_TOKEN";
@Test
public void testHttpConnection() throws Exception {
Server server = new Server(0);
server.setHandler(new MyHandler());
server.start();
final int port = server.getConnectors()[0].getLocalPort();
DataPointReceiver dpr = new HttpDataPointProtobufReceiverFactory(
new SignalFxEndpoint("http", "localhost", port)).createDataPointReceiver();
dpr.addDataPoints(AUTH_TOKEN, Collections.singletonList(
SignalFxProtocolBuffers.DataPoint.newBuilder().setSource("source").build()));
server.stop();
}
private class MyHandler extends AbstractHandler {
@Override public void handle(String target, Request baseRequest, HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
if (!request.getHeader("X-SF-TOKEN").equals(AUTH_TOKEN)) {
error("Invalid auth token", response, baseRequest);
return;
}
if (!request.getHeader("User-Agent")
.equals(AbstractHttpReceiverConnection.USER_AGENT)) {
error("Invalid User agent: " + request.getHeader("User-Agent") + " vs " + AbstractHttpReceiverConnection.USER_AGENT, response, baseRequest);
return;
}
SignalFxProtocolBuffers.DataPointUploadMessage all_datapoints =
SignalFxProtocolBuffers.DataPointUploadMessage.parseFrom(
baseRequest.getInputStream());
if (!all_datapoints.getDatapoints(0).getSource().equals("source")) {
error("Invalid datapoint source", response, baseRequest);
return;
}
response.setStatus(HttpStatus.SC_OK);
response.getWriter().write("\"OK\"");
baseRequest.setHandled(true);
}
private void error(String message, HttpServletResponse response, Request baseRequest)
throws IOException {
response.setStatus(HttpStatus.SC_BAD_REQUEST);
response.getWriter().write(message);
baseRequest.setHandled(true);
}
}
}