예제 #1
0
void WRestResource::handleRequest(const Http::Request &request,
                                  Http::Response &response)
{
  try {
    auto it = std::find(METHOD_STRINGS.cbegin(), METHOD_STRINGS.cend(), request.method());
    auto idx = static_cast<std::size_t>(std::distance(METHOD_STRINGS.cbegin(), it));
    if (it == METHOD_STRINGS.cend() || !handlers_[idx])
      response.setStatus(405);
  } catch (Exception e) {
    response.setStatus(e.status());
  }
}
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <common.cxx>
#include <net/http/request.hpp>

CASE("A HTTP request can be created from a string")
{
    http::Request r("GET / HTTP/1.1\r\nUser-Agent: IncludeOS/0.9\r\nConnection: close\r\nHost: www.google.com\r\n\r\n");
    EXPECT(r.version().to_string() == "HTTP/1.1");
    EXPECT(http::method::str(r.method()) == "GET");
}

CASE("method() returns the HTTP method for the request")
{
    http::Request r("HEAD / HTTP/1.0\r\nUser-Agent: IncludeOS/0.9\r\nHost: www.google.com\r\n\r\n");
    EXPECT(http::method::str(r.method()) == "HEAD");
}

CASE("HTTP method can be set for the request")
{
    http::Request r("HEAD / HTTP/1.0\r\nUser-Agent: IncludeOS/0.9\r\nHost: www.google.com\r\n\r\n");
    EXPECT(http::method::str(r.method()) == "HEAD");
    r.set_method(http::GET);
    EXPECT(http::method::str(r.method()) == "GET");
}