| 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 |