roll skia to 5075
[chromium-blink-merge.git] / chrome_frame / urlmon_upload_data_stream_unittest.cc
blob8bab45a9d19aa1bf2c691c26926a65c9244aa8f3
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "gtest/gtest.h"
7 #include "base/memory/ref_counted.h"
8 #include "base/win/scoped_comptr.h"
9 #include "chrome_frame/urlmon_upload_data_stream.h"
11 TEST(UrlmonUploadDataStreamTest, TestBasicRead) {
12 char random_string[] = "some random data, no really this totally random";
13 int random_string_length = strlen(random_string);
14 scoped_refptr<net::UploadData> upload_data = new net::UploadData();
15 upload_data->AppendBytes(random_string, random_string_length);
17 CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
18 HRESULT hr =
19 CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
20 ASSERT_TRUE(SUCCEEDED(hr));
22 upload_stream->Initialize(upload_data.get());
23 base::win::ScopedComPtr<IStream> upload_istream(upload_stream);
25 char buffer[500];
26 memset(buffer, 0, 500);
27 ULONG bytes_read = 0;
28 hr = upload_istream->Read(buffer, 500, &bytes_read);
30 EXPECT_TRUE(SUCCEEDED(hr));
31 EXPECT_EQ(bytes_read, random_string_length);
32 EXPECT_TRUE(strcmp(buffer, random_string) == 0);
34 char buffer2[500];
35 memset(buffer2, 0, 500);
36 ULONG bytes_read2 = 0;
37 hr = upload_istream->Read(buffer2, 500, &bytes_read2);
39 EXPECT_EQ(S_FALSE, hr);
40 EXPECT_EQ(bytes_read2, 0);
41 EXPECT_FALSE(strcmp(buffer2, random_string) == 0);
44 TEST(UrlmonUploadDataStreamTest, TestBigRead) {
45 const size_t kBigBufferLength = 100000;
46 char big_buffer[kBigBufferLength];
47 memset(big_buffer, 'a', kBigBufferLength);
49 scoped_refptr<net::UploadData> upload_data = new net::UploadData();
50 upload_data->AppendBytes(big_buffer, kBigBufferLength);
52 CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
53 HRESULT hr =
54 CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
55 ASSERT_TRUE(SUCCEEDED(hr));
57 upload_stream->Initialize(upload_data.get());
58 base::win::ScopedComPtr<IStream> upload_istream(upload_stream);
60 char big_rcv_buffer[kBigBufferLength];
61 int write_pos = 0;
62 ULONG bytes_read = 0;
63 hr = E_UNEXPECTED;
65 while ((hr = upload_istream->Read(&big_rcv_buffer[write_pos],
66 kBigBufferLength,
67 &bytes_read)) != S_FALSE) {
68 EXPECT_TRUE(SUCCEEDED(hr));
69 EXPECT_GT(bytes_read, static_cast<ULONG>(0));
71 write_pos += bytes_read;
72 bytes_read = 0;
75 EXPECT_EQ(S_FALSE, hr);
76 EXPECT_TRUE((write_pos + bytes_read) == kBigBufferLength);
77 EXPECT_EQ(0, memcmp(big_buffer, big_rcv_buffer, kBigBufferLength));
80 TEST(UrlmonUploadDataStreamTest, TestStat) {
81 char random_string[] = "some random data, no really this totally random";
82 int random_string_length = strlen(random_string);
83 scoped_refptr<net::UploadData> upload_data = new net::UploadData();
84 upload_data->AppendBytes(random_string, random_string_length);
86 CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
87 HRESULT hr =
88 CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
89 ASSERT_TRUE(SUCCEEDED(hr));
91 upload_stream->Initialize(upload_data.get());
92 base::win::ScopedComPtr<IStream> upload_istream(upload_stream);
94 STATSTG statstg;
95 hr = upload_stream->Stat(&statstg, STATFLAG_NONAME);
96 EXPECT_TRUE(SUCCEEDED(hr));
97 EXPECT_EQ(static_cast<LONGLONG>(random_string_length),
98 statstg.cbSize.QuadPart);
101 TEST(UrlmonUploadDataStreamTest, TestRepeatedRead) {
102 char random_string[] = "some random data, no really this totally random";
103 int random_string_length = strlen(random_string);
104 scoped_refptr<net::UploadData> upload_data = new net::UploadData();
105 upload_data->AppendBytes(random_string, random_string_length);
107 CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
108 HRESULT hr =
109 CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
110 ASSERT_TRUE(SUCCEEDED(hr));
112 upload_stream->Initialize(upload_data.get());
113 base::win::ScopedComPtr<IStream> upload_istream(upload_stream);
115 char buffer[500];
116 memset(buffer, 0, 500);
117 ULONG bytes_read = 0;
118 hr = upload_istream->Read(buffer, 500, &bytes_read);
120 EXPECT_TRUE(SUCCEEDED(hr));
121 EXPECT_EQ(bytes_read, random_string_length);
122 EXPECT_EQ(0, strcmp(buffer, random_string));
124 char buffer2[500];
125 memset(buffer2, 0, 500);
126 ULONG bytes_read2 = 0;
128 for (int i = 0; i < 10; i++) {
129 hr = upload_istream->Read(buffer2, 500, &bytes_read2);
130 EXPECT_EQ(S_FALSE, hr);
131 EXPECT_EQ(bytes_read2, 0);
132 EXPECT_NE(0, strcmp(buffer2, random_string));
136 TEST(UrlmonUploadDataStreamTest, TestZeroRead) {
137 char random_string[] = "some random data, no really this totally random";
138 int random_string_length = strlen(random_string);
139 scoped_refptr<net::UploadData> upload_data = new net::UploadData();
140 upload_data->AppendBytes(random_string, random_string_length);
142 CComObject<UrlmonUploadDataStream>* upload_stream = NULL;
143 HRESULT hr =
144 CComObject<UrlmonUploadDataStream>::CreateInstance(&upload_stream);
145 ASSERT_TRUE(SUCCEEDED(hr));
147 upload_stream->Initialize(upload_data.get());
148 base::win::ScopedComPtr<IStream> upload_istream(upload_stream);
150 char buffer[500];
151 memset(buffer, 0, 500);
152 ULONG bytes_read = 42;
153 hr = upload_istream->Read(&buffer[0], 0, &bytes_read);
155 EXPECT_EQ(S_OK, hr);
156 EXPECT_EQ(0, bytes_read);
158 char buffer2[500];
159 memset(&buffer2[0], 0, 500);
160 EXPECT_EQ(0, memcmp(buffer, buffer2, 500));