OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 | 6 |
7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
8 #include "breakpad/src/common/linux/libcurl_wrapper.h" | 8 #include "breakpad/src/common/linux/libcurl_wrapper.h" |
| 9 #include "chromecast/base/scoped_temp_file.h" |
9 #include "chromecast/crash/cast_crashdump_uploader.h" | 10 #include "chromecast/crash/cast_crashdump_uploader.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 11 #include "testing/gmock/include/gmock/gmock.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
12 | 13 |
13 namespace chromecast { | 14 namespace chromecast { |
14 | 15 |
15 class MockLibcurlWrapper : public google_breakpad::LibcurlWrapper { | 16 class MockLibcurlWrapper : public google_breakpad::LibcurlWrapper { |
16 public: | 17 public: |
17 MOCK_METHOD0(Init, bool()); | 18 MOCK_METHOD0(Init, bool()); |
18 MOCK_METHOD2(SetProxy, | 19 MOCK_METHOD2(SetProxy, |
(...skipping 28 matching lines...) Expand all Loading... |
47 data.crash_server = "http://foo.com"; | 48 data.crash_server = "http://foo.com"; |
48 CastCrashdumpUploader uploader(data, &m); | 49 CastCrashdumpUploader uploader(data, &m); |
49 | 50 |
50 ASSERT_FALSE(uploader.Upload(nullptr)); | 51 ASSERT_FALSE(uploader.Upload(nullptr)); |
51 } | 52 } |
52 | 53 |
53 TEST(CastCrashdumpUploaderTest, UploadSucceedsWithValidParameters) { | 54 TEST(CastCrashdumpUploaderTest, UploadSucceedsWithValidParameters) { |
54 testing::StrictMock<MockLibcurlWrapper> m; | 55 testing::StrictMock<MockLibcurlWrapper> m; |
55 | 56 |
56 // Create a temporary file. | 57 // Create a temporary file. |
57 base::FilePath temp; | 58 ScopedTempFile minidump; |
58 ASSERT_TRUE(base::CreateTemporaryFile(&temp)); | |
59 | 59 |
60 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 60 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
61 EXPECT_CALL(m, AddFile(temp.value(), _)).WillOnce(Return(true)); | 61 EXPECT_CALL(m, AddFile(minidump.path().value(), _)).WillOnce(Return(true)); |
62 EXPECT_CALL(m, SendRequest("http://foo.com", _, _, _, _)).Times(1).WillOnce( | 62 EXPECT_CALL(m, SendRequest("http://foo.com", _, _, _, _)).Times(1).WillOnce( |
63 Return(true)); | 63 Return(true)); |
64 | 64 |
65 CastCrashdumpData data; | 65 CastCrashdumpData data; |
66 data.product = "foobar"; | 66 data.product = "foobar"; |
67 data.version = "1.0"; | 67 data.version = "1.0"; |
68 data.guid = "AAA-BBB"; | 68 data.guid = "AAA-BBB"; |
69 data.email = "test@test.com"; | 69 data.email = "test@test.com"; |
70 data.comments = "none"; | 70 data.comments = "none"; |
71 data.minidump_pathname = temp.value(); | 71 data.minidump_pathname = minidump.path().value(); |
72 data.crash_server = "http://foo.com"; | 72 data.crash_server = "http://foo.com"; |
73 CastCrashdumpUploader uploader(data, &m); | 73 CastCrashdumpUploader uploader(data, &m); |
74 | 74 |
75 ASSERT_TRUE(uploader.Upload(nullptr)); | 75 ASSERT_TRUE(uploader.Upload(nullptr)); |
76 } | 76 } |
77 | 77 |
78 TEST(CastCrashdumpUploaderTest, UploadFailsWithInvalidPathname) { | 78 TEST(CastCrashdumpUploaderTest, UploadFailsWithInvalidPathname) { |
79 testing::StrictMock<MockLibcurlWrapper> m; | 79 testing::StrictMock<MockLibcurlWrapper> m; |
80 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 80 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
81 EXPECT_CALL(m, SendRequest(_, _, _, _, _)).Times(0); | 81 EXPECT_CALL(m, SendRequest(_, _, _, _, _)).Times(0); |
82 | 82 |
83 CastCrashdumpData data; | 83 CastCrashdumpData data; |
84 data.product = "foobar"; | 84 data.product = "foobar"; |
85 data.version = "1.0"; | 85 data.version = "1.0"; |
86 data.guid = "AAA-BBB"; | 86 data.guid = "AAA-BBB"; |
87 data.email = "test@test.com"; | 87 data.email = "test@test.com"; |
88 data.comments = "none"; | 88 data.comments = "none"; |
89 data.minidump_pathname = "/invalid/file/path"; | 89 data.minidump_pathname = "/invalid/file/path"; |
90 data.crash_server = "http://foo.com"; | 90 data.crash_server = "http://foo.com"; |
91 CastCrashdumpUploader uploader(data, &m); | 91 CastCrashdumpUploader uploader(data, &m); |
92 | 92 |
93 ASSERT_FALSE(uploader.Upload(nullptr)); | 93 ASSERT_FALSE(uploader.Upload(nullptr)); |
94 } | 94 } |
95 | 95 |
96 TEST(CastCrashdumpUploaderTest, UploadFailsWithoutAllRequiredParameters) { | 96 TEST(CastCrashdumpUploaderTest, UploadFailsWithoutAllRequiredParameters) { |
97 testing::StrictMock<MockLibcurlWrapper> m; | 97 testing::StrictMock<MockLibcurlWrapper> m; |
98 | 98 |
99 // Create a temporary file. | 99 // Create a temporary file. |
100 base::FilePath temp; | 100 ScopedTempFile minidump; |
101 ASSERT_TRUE(base::CreateTemporaryFile(&temp)); | |
102 | 101 |
103 // Has all the require fields for a crashdump. | 102 // Has all the require fields for a crashdump. |
104 CastCrashdumpData data; | 103 CastCrashdumpData data; |
105 data.product = "foobar"; | 104 data.product = "foobar"; |
106 data.version = "1.0"; | 105 data.version = "1.0"; |
107 data.guid = "AAA-BBB"; | 106 data.guid = "AAA-BBB"; |
108 data.email = "test@test.com"; | 107 data.email = "test@test.com"; |
109 data.comments = "none"; | 108 data.comments = "none"; |
110 data.minidump_pathname = temp.value(); | 109 data.minidump_pathname = minidump.path().value(); |
111 data.crash_server = "http://foo.com"; | 110 data.crash_server = "http://foo.com"; |
112 | 111 |
113 // Test with empty product name. | 112 // Test with empty product name. |
114 data.product = ""; | 113 data.product = ""; |
115 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 114 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
116 CastCrashdumpUploader uploader_no_product(data, &m); | 115 CastCrashdumpUploader uploader_no_product(data, &m); |
117 ASSERT_FALSE(uploader_no_product.Upload(nullptr)); | 116 ASSERT_FALSE(uploader_no_product.Upload(nullptr)); |
118 data.product = "foobar"; | 117 data.product = "foobar"; |
119 | 118 |
120 // Test with empty product version. | 119 // Test with empty product version. |
121 data.version = ""; | 120 data.version = ""; |
122 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 121 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
123 CastCrashdumpUploader uploader_no_version(data, &m); | 122 CastCrashdumpUploader uploader_no_version(data, &m); |
124 ASSERT_FALSE(uploader_no_version.Upload(nullptr)); | 123 ASSERT_FALSE(uploader_no_version.Upload(nullptr)); |
125 data.version = "1.0"; | 124 data.version = "1.0"; |
126 | 125 |
127 // Test with empty client GUID. | 126 // Test with empty client GUID. |
128 data.guid = ""; | 127 data.guid = ""; |
129 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 128 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
130 CastCrashdumpUploader uploader_no_guid(data, &m); | 129 CastCrashdumpUploader uploader_no_guid(data, &m); |
131 ASSERT_FALSE(uploader_no_guid.Upload(nullptr)); | 130 ASSERT_FALSE(uploader_no_guid.Upload(nullptr)); |
132 } | 131 } |
133 | 132 |
134 TEST(CastCrashdumpUploaderTest, UploadFailsWithInvalidAttachment) { | 133 TEST(CastCrashdumpUploaderTest, UploadFailsWithInvalidAttachment) { |
135 testing::StrictMock<MockLibcurlWrapper> m; | 134 testing::StrictMock<MockLibcurlWrapper> m; |
136 | 135 |
137 // Create a temporary file. | 136 // Create a temporary file. |
138 base::FilePath minidump; | 137 ScopedTempFile minidump; |
139 ASSERT_TRUE(base::CreateTemporaryFile(&minidump)); | |
140 | 138 |
141 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 139 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
142 EXPECT_CALL(m, AddFile(minidump.value(), _)).WillOnce(Return(true)); | 140 EXPECT_CALL(m, AddFile(minidump.path().value(), _)).WillOnce(Return(true)); |
143 | 141 |
144 CastCrashdumpData data; | 142 CastCrashdumpData data; |
145 data.product = "foobar"; | 143 data.product = "foobar"; |
146 data.version = "1.0"; | 144 data.version = "1.0"; |
147 data.guid = "AAA-BBB"; | 145 data.guid = "AAA-BBB"; |
148 data.email = "test@test.com"; | 146 data.email = "test@test.com"; |
149 data.comments = "none"; | 147 data.comments = "none"; |
150 data.minidump_pathname = minidump.value(); | 148 data.minidump_pathname = minidump.path().value(); |
151 data.crash_server = "http://foo.com"; | 149 data.crash_server = "http://foo.com"; |
152 CastCrashdumpUploader uploader(data, &m); | 150 CastCrashdumpUploader uploader(data, &m); |
153 | 151 |
154 // Add a file that does not exist as an attachment. | 152 // Add a file that does not exist as an attachment. |
155 uploader.AddAttachment("label", "/path/does/not/exist"); | 153 uploader.AddAttachment("label", "/path/does/not/exist"); |
156 ASSERT_FALSE(uploader.Upload(nullptr)); | 154 ASSERT_FALSE(uploader.Upload(nullptr)); |
157 } | 155 } |
158 | 156 |
159 TEST(CastCrashdumpUploaderTest, UploadSucceedsWithValidAttachment) { | 157 TEST(CastCrashdumpUploaderTest, UploadSucceedsWithValidAttachment) { |
160 testing::StrictMock<MockLibcurlWrapper> m; | 158 testing::StrictMock<MockLibcurlWrapper> m; |
161 | 159 |
162 // Create a temporary file. | 160 // Create a temporary file. |
163 base::FilePath minidump; | 161 ScopedTempFile minidump; |
164 ASSERT_TRUE(base::CreateTemporaryFile(&minidump)); | |
165 | 162 |
166 // Create a valid attachment. | 163 // Create a valid attachment. |
167 base::FilePath attachment; | 164 ScopedTempFile attachment; |
168 ASSERT_TRUE(base::CreateTemporaryFile(&attachment)); | |
169 | 165 |
170 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); | 166 EXPECT_CALL(m, Init()).Times(1).WillOnce(Return(true)); |
171 EXPECT_CALL(m, AddFile(minidump.value(), _)).WillOnce(Return(true)); | 167 EXPECT_CALL(m, AddFile(minidump.path().value(), _)).WillOnce(Return(true)); |
172 EXPECT_CALL(m, AddFile(attachment.value(), _)).WillOnce(Return(true)); | 168 EXPECT_CALL(m, AddFile(attachment.path().value(), _)).WillOnce(Return(true)); |
173 EXPECT_CALL(m, SendRequest(_, _, _, _, _)).Times(1).WillOnce(Return(true)); | 169 EXPECT_CALL(m, SendRequest(_, _, _, _, _)).Times(1).WillOnce(Return(true)); |
174 | 170 |
175 CastCrashdumpData data; | 171 CastCrashdumpData data; |
176 data.product = "foobar"; | 172 data.product = "foobar"; |
177 data.version = "1.0"; | 173 data.version = "1.0"; |
178 data.guid = "AAA-BBB"; | 174 data.guid = "AAA-BBB"; |
179 data.email = "test@test.com"; | 175 data.email = "test@test.com"; |
180 data.comments = "none"; | 176 data.comments = "none"; |
181 data.minidump_pathname = minidump.value(); | 177 data.minidump_pathname = minidump.path().value(); |
182 data.crash_server = "http://foo.com"; | 178 data.crash_server = "http://foo.com"; |
183 CastCrashdumpUploader uploader(data, &m); | 179 CastCrashdumpUploader uploader(data, &m); |
184 | 180 |
185 // Add a file that does not exist as an attachment. | 181 // Add a valid file as an attachment. |
186 uploader.AddAttachment("label", attachment.value()); | 182 uploader.AddAttachment("label", attachment.path().value()); |
187 ASSERT_TRUE(uploader.Upload(nullptr)); | 183 ASSERT_TRUE(uploader.Upload(nullptr)); |
188 } | 184 } |
189 | 185 |
190 } // namespace chromeceast | 186 } // namespace chromeceast |
OLD | NEW |