diff --git a/hoot-core-test/src/test/cpp/hoot/core/io/OsmApiWriterTestServer.cpp b/hoot-core-test/src/test/cpp/hoot/core/io/OsmApiWriterTestServer.cpp
index d2327dd..8f78d07 100644
--- a/hoot-core-test/src/test/cpp/hoot/core/io/OsmApiWriterTestServer.cpp
+++ b/hoot-core-test/src/test/cpp/hoot/core/io/OsmApiWriterTestServer.cpp
@@ -28,8 +28,9 @@
#include "OsmApiWriterTestServer.h"
// Hootenanny
-#include <hoot/core/io/OsmApiWriter.h>
+#include <hoot/core/util/HootNetworkUtils.h>
#include <hoot/core/util/Log.h>
+#include <hoot/core/util/OsmApiUtils.h>
namespace hoot
{
@@ -40,10 +41,10 @@ bool CapabilitiesTestServer::respond(HttpConnection::HttpConnectionPtr &connecti
std::string headers = read_request_headers(connection);
// Make sure that the capabilities were requested
HttpResponsePtr response;
- if (headers.find(OsmApiWriter::API_PATH_CAPABILITIES) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
+ if (headers.find(OsmApiEndpoints::API_PATH_CAPABILITIES) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
else
- response.reset(new HttpResponse(404));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_NOT_FOUND));
// Write out the response
write_response(connection, response->to_string());
// Only respond once to the client
@@ -56,10 +57,10 @@ bool PermissionsTestServer::respond(HttpConnection::HttpConnectionPtr &connectio
std::string headers = read_request_headers(connection);
// Make sure that the permissions were requested
HttpResponsePtr response;
- if (headers.find(OsmApiWriter::API_PATH_PERMISSIONS) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
+ if (headers.find(OsmApiEndpoints::API_PATH_PERMISSIONS) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
else
- response.reset(new HttpResponse(404));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_NOT_FOUND));
// Write out the response
write_response(connection, response->to_string());
// Only respond once to the client
@@ -74,26 +75,26 @@ bool RetryConflictsTestServer::respond(HttpConnection::HttpConnectionPtr& connec
std::string headers = read_request_headers(connection);
// Determine the response message's HTTP header
HttpResponsePtr response;
- if (headers.find(OsmApiWriter::API_PATH_CAPABILITIES) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
- else if (headers.find(OsmApiWriter::API_PATH_PERMISSIONS) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
- else if (headers.find(OsmApiWriter::API_PATH_CREATE_CHANGESET) != std::string::npos)
- response.reset(new HttpResponse(200, "1"));
+ if (headers.find(OsmApiEndpoints::API_PATH_CAPABILITIES) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
+ else if (headers.find(OsmApiEndpoints::API_PATH_PERMISSIONS) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
+ else if (headers.find(OsmApiEndpoints::API_PATH_CREATE_CHANGESET) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, "1"));
else if (headers.find("POST") != std::string::npos)
{
- response.reset(new HttpResponse(405));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_METHOD_NOT_ALLOWED));
response->add_header("Allow", "GET");
}
- else if (headers.find(QString(OsmApiWriter::API_PATH_CLOSE_CHANGESET).arg(1).toStdString()))
+ else if (headers.find(QString(OsmApiEndpoints::API_PATH_CLOSE_CHANGESET).arg(1).toStdString()))
{
- response.reset(new HttpResponse(200));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK));
continue_processing = false;
}
else
{
// Error out here
- response.reset(new HttpResponse(404));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_NOT_FOUND));
continue_processing = false;
}
// Write out the response
@@ -120,39 +121,79 @@ bool RetryVersionTestServer::respond(HttpConnection::HttpConnectionPtr &connecti
// Determine the response message's HTTP response
HttpResponsePtr response;
// Capabilities
- if (headers.find(OsmApiWriter::API_PATH_CAPABILITIES) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
+ if (headers.find(OsmApiEndpoints::API_PATH_CAPABILITIES) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
// Permissions
- else if (headers.find(OsmApiWriter::API_PATH_PERMISSIONS) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
+ else if (headers.find(OsmApiEndpoints::API_PATH_PERMISSIONS) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
// Create changeset
- else if (headers.find(OsmApiWriter::API_PATH_CREATE_CHANGESET) != std::string::npos)
- response.reset(new HttpResponse(200, "1"));
+ else if (headers.find(OsmApiEndpoints::API_PATH_CREATE_CHANGESET) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, "1"));
// Upload changeset 1
- else if (headers.find(QString(OsmApiWriter::API_PATH_UPLOAD_CHANGESET).arg(1).toStdString()) != std::string::npos)
+ else if (headers.find(QString(OsmApiEndpoints::API_PATH_UPLOAD_CHANGESET).arg(1).toStdString()) != std::string::npos)
{
// The first time through, the 'version' of element 1 should fail.
if (!_has_error)
{
- response.reset(new HttpResponse(409, "Changeset conflict: Version mismatch: Provided 2, server had: 1 of Way 1"));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_CONFLICT, "Changeset conflict: Version mismatch: Provided 2, server had: 1 of Way 1"));
_has_error = true;
}
else
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_CHANGESET_1_RESPONSE));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CHANGESET_1_RESPONSE));
}
// Get way 1's updated version
- else if (headers.find(QString(OsmApiWriter::API_PATH_GET_ELEMENT).arg("way").arg(1).toStdString()) != std::string::npos)
- response.reset(new HttpResponse(200, OsmApiSampleRequestResponse::SAMPLE_ELEMENT_1_GET_RESPONSE));
+ else if (headers.find(QString(OsmApiEndpoints::API_PATH_GET_ELEMENT).arg("way").arg(1).toStdString()) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_ELEMENT_1_GET_RESPONSE));
// Close changeset
- else if (headers.find(QString(OsmApiWriter::API_PATH_CLOSE_CHANGESET).arg(1).toStdString()))
+ else if (headers.find(QString(OsmApiEndpoints::API_PATH_CLOSE_CHANGESET).arg(1).toStdString()))
{
- response.reset(new HttpResponse(200));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK));
continue_processing = false;
}
else
{
// Error out here
- response.reset(new HttpResponse(404));
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_NOT_FOUND));
+ continue_processing = false;
+ }
+ // Write out the response
+ write_response(connection, response->to_string());
+ // Return true if we should continue listening and processing requests
+ return continue_processing && !get_interupt();
+}
+
+bool ChangesetOutputTestServer::respond(HttpConnection::HttpConnectionPtr& connection)
+{
+ // Stop processing by setting this to false
+ bool continue_processing = true;
+ // Read the HTTP request headers
+ std::string headers = read_request_headers(connection);
+ // Determine the response message's HTTP header
+ HttpResponsePtr response;
+ if (headers.find(OsmApiEndpoints::API_PATH_CAPABILITIES) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CAPABILITIES_RESPONSE));
+ else if (headers.find(OsmApiEndpoints::API_PATH_PERMISSIONS) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_PERMISSIONS_RESPONSE));
+ else if (headers.find(OsmApiEndpoints::API_PATH_CREATE_CHANGESET) != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, "1"));
+ else if (headers.find("POST") != std::string::npos)
+ {
+ // Read the HTTP request body to figure out which response to send back
+ std::string body = read_request_body(headers, connection);
+ if (body.find("way id=\"1\"") != std::string::npos)
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CHANGESET_SUCCESS_1_RESPONSE));
+ else
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK, OsmApiSampleRequestResponse::SAMPLE_CHANGESET_SUCCESS_2_RESPONSE));
+ }
+ else if (headers.find(QString(OsmApiEndpoints::API_PATH_CLOSE_CHANGESET).arg(1).toStdString()))
+ {
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_OK));
+ continue_processing = false;
+ }
+ else
+ {
+ // Error out here
+ response.reset(new HttpResponse(HttpResponseCode::HTTP_NOT_FOUND));
continue_processing = false;
}
// Write out the response
@@ -243,4 +284,14 @@ const char* OsmApiSampleRequestResponse::SAMPLE_ELEMENT_1_GET_RESPONSE =
" <tag k='highway' v='road'/>\n"
" </way>\n"
"</osm>";
+const char* OsmApiSampleRequestResponse::SAMPLE_CHANGESET_SUCCESS_1_RESPONSE =
+ "<diffResult generator='OpenStreetMap Server' version='0.6'>\n"
+ " <way old_id='1' new_id='1' new_version='2'/>\n"
+ " <way old_id='2' new_id='2' new_version='2'/>\n"
+ "</diffResult>";
+const char* OsmApiSampleRequestResponse::SAMPLE_CHANGESET_SUCCESS_2_RESPONSE =
+ "<diffResult generator='OpenStreetMap Server' version='0.6'>\n"
+ " <way old_id='3' new_id='3' new_version='2'/>\n"
+ " <way old_id='4' new_id='4' new_version='2'/>\n"
+ "</diffResult>";
}