| Index: chrome_frame/urlmon_upload_data_stream_unittest.cc
|
| ===================================================================
|
| --- chrome_frame/urlmon_upload_data_stream_unittest.cc (revision 0)
|
| +++ chrome_frame/urlmon_upload_data_stream_unittest.cc (revision 0)
|
| @@ -0,0 +1,162 @@
|
| +// Copyright (c) 2009 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 "gtest/gtest.h"
|
| +
|
| +#include "base/ref_counted.h"
|
| +#include "base/scoped_comptr_win.h"
|
| +#include "chrome_frame/urlmon_upload_data_stream.h"
|
| +
|
| +TEST(UrlmonUploadDataStreamTest, TestBasicRead) {
|
| + char random_string[] = "some random data, no really this totally random";
|
| + int random_string_length = strlen(random_string);
|
| + scoped_refptr<net::UploadData> upload_data = new net::UploadData();
|
| + upload_data->AppendBytes(random_string, random_string_length);
|
| +
|
| + CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
|
| + HRESULT hr =
|
| + CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
|
| + ASSERT_TRUE(SUCCEEDED(hr));
|
| +
|
| + upload_stream->Initialize(upload_data.get());
|
| + ScopedComPtr<IStream> upload_istream(upload_stream);
|
| +
|
| + char buffer[500];
|
| + memset(buffer, 0, 500);
|
| + ULONG bytes_read = 0;
|
| + hr = upload_istream->Read(buffer, 500, &bytes_read);
|
| +
|
| + EXPECT_TRUE(SUCCEEDED(hr));
|
| + EXPECT_EQ(bytes_read, random_string_length);
|
| + EXPECT_TRUE(strcmp(buffer, random_string) == 0);
|
| +
|
| + char buffer2[500];
|
| + memset(buffer2, 0, 500);
|
| + ULONG bytes_read2 = 0;
|
| + hr = upload_istream->Read(buffer2, 500, &bytes_read2);
|
| +
|
| + EXPECT_EQ(S_FALSE, hr);
|
| + EXPECT_EQ(bytes_read2, 0);
|
| + EXPECT_FALSE(strcmp(buffer2, random_string) == 0);
|
| +}
|
| +
|
| +TEST(UrlmonUploadDataStreamTest, TestBigRead) {
|
| + const size_t kBigBufferLength = 100000;
|
| + char big_buffer[kBigBufferLength];
|
| + memset(big_buffer, 'a', kBigBufferLength);
|
| +
|
| + scoped_refptr<net::UploadData> upload_data = new net::UploadData();
|
| + upload_data->AppendBytes(big_buffer, kBigBufferLength);
|
| +
|
| + CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
|
| + HRESULT hr =
|
| + CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
|
| + ASSERT_TRUE(SUCCEEDED(hr));
|
| +
|
| + upload_stream->Initialize(upload_data.get());
|
| + ScopedComPtr<IStream> upload_istream(upload_stream);
|
| +
|
| + char big_rcv_buffer[kBigBufferLength];
|
| + int write_pos = 0;
|
| + ULONG bytes_read = 0;
|
| + hr = E_UNEXPECTED;
|
| +
|
| + while ((hr = upload_istream->Read(&big_rcv_buffer[write_pos],
|
| + kBigBufferLength,
|
| + &bytes_read)) != S_FALSE) {
|
| + EXPECT_TRUE(SUCCEEDED(hr));
|
| + EXPECT_GT(bytes_read, static_cast<ULONG>(0));
|
| +
|
| + write_pos += bytes_read;
|
| + bytes_read = 0;
|
| + }
|
| +
|
| + EXPECT_EQ(S_FALSE, hr);
|
| + EXPECT_TRUE((write_pos + bytes_read) == kBigBufferLength);
|
| + EXPECT_EQ(0, memcmp(big_buffer, big_rcv_buffer, kBigBufferLength));
|
| +}
|
| +
|
| +TEST(UrlmonUploadDataStreamTest, TestStat) {
|
| + char random_string[] = "some random data, no really this totally random";
|
| + int random_string_length = strlen(random_string);
|
| + scoped_refptr<net::UploadData> upload_data = new net::UploadData();
|
| + upload_data->AppendBytes(random_string, random_string_length);
|
| +
|
| + CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
|
| + HRESULT hr =
|
| + CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
|
| + ASSERT_TRUE(SUCCEEDED(hr));
|
| +
|
| + upload_stream->Initialize(upload_data.get());
|
| + ScopedComPtr<IStream> upload_istream(upload_stream);
|
| +
|
| + STATSTG statstg;
|
| + hr = upload_stream->Stat(&statstg, STATFLAG_NONAME);
|
| + EXPECT_TRUE(SUCCEEDED(hr));
|
| + EXPECT_EQ(static_cast<LONGLONG>(random_string_length),
|
| + statstg.cbSize.QuadPart);
|
| +}
|
| +
|
| +TEST(UrlmonUploadDataStreamTest, TestRepeatedRead) {
|
| + char random_string[] = "some random data, no really this totally random";
|
| + int random_string_length = strlen(random_string);
|
| + scoped_refptr<net::UploadData> upload_data = new net::UploadData();
|
| + upload_data->AppendBytes(random_string, random_string_length);
|
| +
|
| + CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
|
| + HRESULT hr =
|
| + CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
|
| + ASSERT_TRUE(SUCCEEDED(hr));
|
| +
|
| + upload_stream->Initialize(upload_data.get());
|
| + ScopedComPtr<IStream> upload_istream(upload_stream);
|
| +
|
| + char buffer[500];
|
| + memset(buffer, 0, 500);
|
| + ULONG bytes_read = 0;
|
| + hr = upload_istream->Read(buffer, 500, &bytes_read);
|
| +
|
| + EXPECT_TRUE(SUCCEEDED(hr));
|
| + EXPECT_EQ(bytes_read, random_string_length);
|
| + EXPECT_EQ(0, strcmp(buffer, random_string));
|
| +
|
| + char buffer2[500];
|
| + memset(buffer2, 0, 500);
|
| + ULONG bytes_read2 = 0;
|
| +
|
| + for (int i = 0; i < 10; i++) {
|
| + hr = upload_istream->Read(buffer2, 500, &bytes_read2);
|
| + EXPECT_EQ(S_FALSE, hr);
|
| + EXPECT_EQ(bytes_read2, 0);
|
| + EXPECT_NE(0, strcmp(buffer2, random_string));
|
| + }
|
| +}
|
| +
|
| +TEST(UrlmonUploadDataStreamTest, TestZeroRead) {
|
| + char random_string[] = "some random data, no really this totally random";
|
| + int random_string_length = strlen(random_string);
|
| + scoped_refptr<net::UploadData> upload_data = new net::UploadData();
|
| + upload_data->AppendBytes(random_string, random_string_length);
|
| +
|
| + CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
|
| + HRESULT hr =
|
| + CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
|
| + ASSERT_TRUE(SUCCEEDED(hr));
|
| +
|
| + upload_stream->Initialize(upload_data.get());
|
| + ScopedComPtr<IStream> upload_istream(upload_stream);
|
| +
|
| + char buffer[500];
|
| + memset(buffer, 0, 500);
|
| + ULONG bytes_read = 42;
|
| + hr = upload_istream->Read(&buffer[0], 0, &bytes_read);
|
| +
|
| + EXPECT_EQ(S_OK, hr);
|
| + EXPECT_EQ(0, bytes_read);
|
| +
|
| + char buffer2[500];
|
| + memset(&buffer2[0], 0, 500);
|
| + EXPECT_EQ(0, memcmp(buffer, buffer2, 500));
|
| +}
|
| +
|
|
|