blob: 5081bef665d5311fadcc69d7b8dd5678fa8e3568 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "base/memory/ref_counted.h"
#include "net/base/net_errors.h"
#include "net/http/http_response_headers.h"
#include "net/http/http_version.h"
#include "net/url_request/url_request_data_job.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
namespace net {
TEST(BuildResponseTest, Simple) {
std::string mime_type;
std::string charset;
std::string data;
scoped_refptr<HttpResponseHeaders> headers(
new HttpResponseHeaders(std::string()));
ASSERT_EQ(OK,
URLRequestDataJob::BuildResponse(GURL("data:,Hello"), &mime_type,
&charset, &data, headers.get()));
EXPECT_EQ("text/plain", mime_type);
EXPECT_EQ("US-ASCII", charset);
EXPECT_EQ("Hello", data);
const HttpVersion& version = headers->GetHttpVersion();
EXPECT_EQ(1, version.major_value());
EXPECT_EQ(1, version.minor_value());
EXPECT_EQ("OK", headers->GetStatusText());
std::string value;
EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value));
EXPECT_EQ(value, "text/plain;charset=US-ASCII");
value.clear();
}
TEST(BuildResponseTest, InvalidInput) {
std::string mime_type;
std::string charset;
std::string data;
scoped_refptr<HttpResponseHeaders> headers(
new HttpResponseHeaders(std::string()));
EXPECT_EQ(ERR_INVALID_URL,
URLRequestDataJob::BuildResponse(GURL("bogus"), &mime_type,
&charset, &data, headers.get()));
}
TEST(BuildResponseTest, InvalidMimeType) {
std::string mime_type;
std::string charset;
std::string data;
scoped_refptr<HttpResponseHeaders> headers(
new HttpResponseHeaders(std::string()));
// MIME type contains delimiters. Must be accepted but Content-Type header
// should be generated as if the mediatype was text/plain.
EXPECT_EQ(OK, URLRequestDataJob::BuildResponse(GURL("data:f(o/b)r,test"),
&mime_type, &charset, &data,
headers.get()));
std::string value;
EXPECT_TRUE(headers->GetNormalizedHeader("Content-Type", &value));
EXPECT_EQ(value, "text/plain;charset=US-ASCII");
}
TEST(BuildResponseTest, InvalidCharset) {
std::string mime_type;
std::string charset;
std::string data;
scoped_refptr<HttpResponseHeaders> headers(
new HttpResponseHeaders(std::string()));
// MIME type contains delimiters. Must be rejected.
EXPECT_EQ(ERR_INVALID_URL, URLRequestDataJob::BuildResponse(
GURL("data:text/html;charset=(),test"),
&mime_type, &charset, &data, headers.get()));
}
} // namespace net