Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Unified Diff: net/http/http_stream_parser_unittest.cc

Issue 2330983002: Removes get upload progress plumbing. URLRequest queries the UploadDataStream directly. (Closed)
Patch Set: Feedback incorporated. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_stream_parser.cc ('k') | net/http/http_transaction.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_stream_parser_unittest.cc
diff --git a/net/http/http_stream_parser_unittest.cc b/net/http/http_stream_parser_unittest.cc
index e264f86f6c5316faeca70b0f9149ee0dff1c9010..c53ec8d16e2544e513409658d36e668dbd83cf5c 100644
--- a/net/http/http_stream_parser_unittest.cc
+++ b/net/http/http_stream_parser_unittest.cc
@@ -112,10 +112,21 @@ TEST(HttpStreamParser, DataReadErrorSynchronous) {
ReadErrorUploadDataStream upload_data_stream(
ReadErrorUploadDataStream::FailureMode::SYNC);
+
+ // Test upload progress before init.
+ UploadProgress progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+
ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(),
BoundNetLog()),
IsOk());
+ // Test upload progress after init.
+ progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+
HttpRequestInfo request;
request.method = "POST";
request.url = GURL("http://localhost");
@@ -134,6 +145,10 @@ TEST(HttpStreamParser, DataReadErrorSynchronous) {
callback.callback());
EXPECT_THAT(callback.GetResult(result), IsError(ERR_FAILED));
+ progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+
EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes());
}
@@ -171,10 +186,96 @@ TEST(HttpStreamParser, DataReadErrorAsynchronous) {
callback.callback());
EXPECT_THAT(result, IsError(ERR_IO_PENDING));
+ UploadProgress progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+
EXPECT_THAT(callback.GetResult(result), IsError(ERR_FAILED));
+
EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes());
}
+class InitAsyncUploadDataStream : public ChunkedUploadDataStream {
+ public:
+ explicit InitAsyncUploadDataStream(int64_t identifier)
+ : ChunkedUploadDataStream(identifier), weak_factory_(this) {}
+
+ private:
+ void CompleteInit() { UploadDataStream::OnInitCompleted(OK); }
+
+ int InitInternal(const BoundNetLog& net_log) override {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&InitAsyncUploadDataStream::CompleteInit,
+ weak_factory_.GetWeakPtr()));
+ return ERR_IO_PENDING;
+ }
+
+ base::WeakPtrFactory<InitAsyncUploadDataStream> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(InitAsyncUploadDataStream);
+};
+
+TEST(HttpStreamParser, InitAsynchronousUploadDataStream) {
+ InitAsyncUploadDataStream upload_data_stream(0);
+
+ TestCompletionCallback callback;
+ int result = upload_data_stream.Init(callback.callback(), BoundNetLog());
+ ASSERT_THAT(result, IsError(ERR_IO_PENDING));
+
+ // Should be empty progress while initialization is in progress.
+ UploadProgress progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+ EXPECT_THAT(callback.GetResult(result), IsOk());
+
+ // Initialization complete.
+ progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+
+ HttpRequestInfo request;
+ request.method = "POST";
+ request.url = GURL("http://localhost");
+ request.upload_data_stream = &upload_data_stream;
+
+ static const char kChunk[] = "Chunk 1";
+ MockWrite writes[] = {
+ MockWrite(ASYNC, 0, "POST / HTTP/1.1\r\n"),
+ MockWrite(ASYNC, 1, "Transfer-Encoding: chunked\r\n\r\n"),
+ MockWrite(ASYNC, 2, "7\r\nChunk 1\r\n"),
+ };
+
+ SequencedSocketData data(nullptr, 0, writes, arraysize(writes));
+ std::unique_ptr<ClientSocketHandle> socket_handle =
+ CreateConnectedSocketHandle(&data);
+
+ scoped_refptr<GrowableIOBuffer> read_buffer(new GrowableIOBuffer);
+ HttpStreamParser parser(socket_handle.get(), &request, read_buffer.get(),
+ BoundNetLog());
+
+ HttpRequestHeaders headers;
+ headers.SetHeader("Transfer-Encoding", "chunked");
+
+ HttpResponseInfo response;
+ TestCompletionCallback callback1;
+ int result1 = parser.SendRequest("POST / HTTP/1.1\r\n", headers, &response,
+ callback1.callback());
+ EXPECT_EQ(ERR_IO_PENDING, result1);
+ base::RunLoop().RunUntilIdle();
+ upload_data_stream.AppendData(kChunk, arraysize(kChunk) - 1, true);
+
+ // Check progress after read completes.
+ progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(7u, progress.position());
+
+ // Check progress after reset.
+ upload_data_stream.Reset();
+ progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(0u, progress.position());
+}
+
// The empty payload is how the last chunk is encoded.
TEST(HttpStreamParser, EncodeChunk_EmptyPayload) {
char output[kOutputSize];
@@ -477,6 +578,10 @@ TEST(HttpStreamParser, SentBytesPost) {
callback.callback()));
EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes());
+
+ UploadProgress progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(12u, progress.size());
+ EXPECT_EQ(12u, progress.position());
}
TEST(HttpStreamParser, SentBytesChunkedPostError) {
@@ -524,6 +629,10 @@ TEST(HttpStreamParser, SentBytesChunkedPostError) {
EXPECT_THAT(callback.WaitForResult(), IsError(ERR_FAILED));
EXPECT_EQ(CountWriteBytes(writes, arraysize(writes)), parser.sent_bytes());
+
+ UploadProgress progress = upload_data_stream.GetUploadProgress();
+ EXPECT_EQ(0u, progress.size());
+ EXPECT_EQ(14u, progress.position());
}
// Test to ensure the HttpStreamParser state machine does not get confused
« no previous file with comments | « net/http/http_stream_parser.cc ('k') | net/http/http_transaction.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698