summaryrefslogtreecommitdiff
path: root/src/webassets_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webassets_test.cpp')
-rw-r--r--src/webassets_test.cpp234
1 files changed, 122 insertions, 112 deletions
diff --git a/src/webassets_test.cpp b/src/webassets_test.cpp
index 2633c9b65b..a3106f2796 100644
--- a/src/webassets_test.cpp
+++ b/src/webassets_test.cpp
@@ -1,135 +1,145 @@
#include <crow/app.h>
-#include <gmock/gmock.h>
-#include <gzip_helper.hpp>
-#include <webassets.hpp>
-#include <sstream>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/lexical_cast.hpp>
+#include <gzip_helper.hpp>
+#include <sstream>
+#include <webassets.hpp>
+
#include "gtest/gtest.h"
+#include <gmock/gmock.h>
using namespace crow;
using namespace std;
using namespace testing;
// Tests static files are loaded correctly
-TEST(Webassets, StaticFilesFixedRoutes) {
- std::array<char, 2048> buf;
- SimpleApp app;
- webassets::requestRoutes(app);
- Server<SimpleApp> server(&app, "127.0.0.1", 45451);
- auto _ = async(launch::async, [&] { server.run(); });
-
- // get the homepage
- std::string sendmsg = "GET /\r\n\r\n";
-
- asio::io_service is;
-
- asio::ip::tcp::socket c(is);
- c.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string("127.0.0.1"),
- 45451));
-
- c.send(asio::buffer(sendmsg));
-
- c.receive(asio::buffer(buf, 2048));
- c.close();
-
- std::string response(std::begin(buf), std::end(buf));
- // This is a routine to split strings until a newline is hit
- // TODO(ed) this should really use the HTTP parser
- std::vector<std::string> headers;
- std::string::size_type pos = 0;
- std::string::size_type prev = 0;
- int content_length = 0;
- std::string content_encoding("");
- while ((pos = response.find("\r\n", prev)) != std::string::npos) {
- auto this_string = response.substr(prev, pos - prev);
- if (this_string == "") {
- prev = pos + 2;
- break;
+TEST(Webassets, StaticFilesFixedRoutes)
+{
+ std::array<char, 2048> buf;
+ SimpleApp app;
+ webassets::requestRoutes(app);
+ Server<SimpleApp> server(&app, "127.0.0.1", 45451);
+ auto _ = async(launch::async, [&] { server.run(); });
+
+ // get the homepage
+ std::string sendmsg = "GET /\r\n\r\n";
+
+ asio::io_service is;
+
+ asio::ip::tcp::socket c(is);
+ c.connect(asio::ip::tcp::endpoint(
+ asio::ip::address::from_string("127.0.0.1"), 45451));
+
+ c.send(asio::buffer(sendmsg));
+
+ c.receive(asio::buffer(buf, 2048));
+ c.close();
+
+ std::string response(std::begin(buf), std::end(buf));
+ // This is a routine to split strings until a newline is hit
+ // TODO(ed) this should really use the HTTP parser
+ std::vector<std::string> headers;
+ std::string::size_type pos = 0;
+ std::string::size_type prev = 0;
+ int content_length = 0;
+ std::string content_encoding("");
+ while ((pos = response.find("\r\n", prev)) != std::string::npos)
+ {
+ auto this_string = response.substr(prev, pos - prev);
+ if (this_string == "")
+ {
+ prev = pos + 2;
+ break;
+ }
+
+ if (boost::starts_with(this_string, "Content-Length: "))
+ {
+ content_length = boost::lexical_cast<int>(this_string.substr(16));
+ // TODO(ed) This is an unfortunate test, but it's all we have at
+ // this point Realistically, the index.html will be more than 500
+ // bytes. This test will need to be improved at some point
+ EXPECT_GT(content_length, 500);
+ }
+ if (boost::starts_with(this_string, "Content-Encoding: "))
+ {
+ content_encoding = this_string.substr(18);
+ }
+
+ headers.push_back(this_string);
+ prev = pos + 2;
}
- if (boost::starts_with(this_string, "Content-Length: ")) {
- content_length = boost::lexical_cast<int>(this_string.substr(16));
- // TODO(ed) This is an unfortunate test, but it's all we have at this
- // point
- // Realistically, the index.html will be more than 500 bytes. This
- // test will need to be improved at some point
- EXPECT_GT(content_length, 500);
- }
- if (boost::starts_with(this_string, "Content-Encoding: ")) {
- content_encoding = this_string.substr(18);
+ auto http_content = response.substr(prev);
+ // TODO(ed) ideally the server should support non-compressed gzip assets.
+ // Once this occurs, this line will be obsolete
+ std::string ungziped_content = http_content;
+ if (content_encoding == "gzip")
+ {
+ EXPECT_TRUE(gzipInflate(http_content, ungziped_content));
}
- headers.push_back(this_string);
- prev = pos + 2;
- }
-
- auto http_content = response.substr(prev);
- // TODO(ed) ideally the server should support non-compressed gzip assets.
- // Once this occurs, this line will be obsolete
- std::string ungziped_content = http_content;
- if (content_encoding == "gzip") {
- EXPECT_TRUE(gzipInflate(http_content, ungziped_content));
- }
-
- EXPECT_EQ(headers[0], "HTTP/1.1 200 OK");
- EXPECT_THAT(headers,
- ::testing::Contains("Content-Type: text/html;charset=UTF-8"));
+ EXPECT_EQ(headers[0], "HTTP/1.1 200 OK");
+ EXPECT_THAT(headers,
+ ::testing::Contains("Content-Type: text/html;charset=UTF-8"));
- EXPECT_EQ(ungziped_content.substr(0, 21), "<!DOCTYPE html>\n<html");
+ EXPECT_EQ(ungziped_content.substr(0, 21), "<!DOCTYPE html>\n<html");
- server.stop();
+ server.stop();
}
// Tests static files are loaded correctly
-TEST(Webassets, EtagIsSane) {
- std::array<char, 2048> buf;
- SimpleApp app;
- webassets::requestRoutes(app);
- Server<SimpleApp> server(&app, "127.0.0.1", 45451);
- auto _ = async(launch::async, [&] { server.run(); });
-
- // get the homepage
- std::string sendmsg = "GET /\r\n\r\n";
-
- asio::io_service is;
-
- asio::ip::tcp::socket c(is);
- c.connect(asio::ip::tcp::endpoint(asio::ip::address::from_string("127.0.0.1"),
- 45451));
-
- c.send(asio::buffer(sendmsg));
-
- c.receive(asio::buffer(buf, 2048));
- c.close();
-
- std::string response(std::begin(buf), std::end(buf));
- // This is a routine to split strings until a newline is hit
- // TODO(ed) this should really use the HTTP parser
- std::vector<std::string> headers;
- std::string::size_type pos = 0;
- std::string::size_type prev = 0;
- int content_length = 0;
- std::string content_encoding("");
- while ((pos = response.find("\r\n", prev)) != std::string::npos) {
- auto this_string = response.substr(prev, pos - prev);
- if (this_string == "") {
- break;
+TEST(Webassets, EtagIsSane)
+{
+ std::array<char, 2048> buf;
+ SimpleApp app;
+ webassets::requestRoutes(app);
+ Server<SimpleApp> server(&app, "127.0.0.1", 45451);
+ auto _ = async(launch::async, [&] { server.run(); });
+
+ // get the homepage
+ std::string sendmsg = "GET /\r\n\r\n";
+
+ asio::io_service is;
+
+ asio::ip::tcp::socket c(is);
+ c.connect(asio::ip::tcp::endpoint(
+ asio::ip::address::from_string("127.0.0.1"), 45451));
+
+ c.send(asio::buffer(sendmsg));
+
+ c.receive(asio::buffer(buf, 2048));
+ c.close();
+
+ std::string response(std::begin(buf), std::end(buf));
+ // This is a routine to split strings until a newline is hit
+ // TODO(ed) this should really use the HTTP parser
+ std::vector<std::string> headers;
+ std::string::size_type pos = 0;
+ std::string::size_type prev = 0;
+ int content_length = 0;
+ std::string content_encoding("");
+ while ((pos = response.find("\r\n", prev)) != std::string::npos)
+ {
+ auto this_string = response.substr(prev, pos - prev);
+ if (this_string == "")
+ {
+ break;
+ }
+
+ if (boost::starts_with(this_string, "ETag: "))
+ {
+ auto etag = this_string.substr(6);
+ // ETAG should not be blank
+ EXPECT_NE(etag, "");
+ // SHa1 is 20 characters long
+ EXPECT_EQ(etag.size(), 40);
+ EXPECT_THAT(etag, MatchesRegex("^[a-f0-9]+$"));
+ }
+
+ headers.push_back(this_string);
+ prev = pos + 2;
}
- if (boost::starts_with(this_string, "ETag: ")) {
- auto etag = this_string.substr(6);
- // ETAG should not be blank
- EXPECT_NE(etag, "");
- // SHa1 is 20 characters long
- EXPECT_EQ(etag.size(), 40);
- EXPECT_THAT(etag, MatchesRegex("^[a-f0-9]+$"));
- }
-
- headers.push_back(this_string);
- prev = pos + 2;
- }
-
- server.stop();
+ server.stop();
}