| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 // Serialization warnings are only recorded when DLOG is enabled. | 5 // Serialization warnings are only recorded when DLOG is enabled. |
| 6 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) | 6 #if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON) |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 return array; | 40 return array; |
| 41 } | 41 } |
| 42 | 42 |
| 43 class SerializationWarningTest : public testing::Test { | 43 class SerializationWarningTest : public testing::Test { |
| 44 public: | 44 public: |
| 45 ~SerializationWarningTest() override {} | 45 ~SerializationWarningTest() override {} |
| 46 | 46 |
| 47 protected: | 47 protected: |
| 48 template <typename T> | 48 template <typename T> |
| 49 void TestWarning(T obj, mojo::internal::ValidationError expected_warning) { | 49 void TestWarning(T obj, mojo::internal::ValidationError expected_warning) { |
| 50 using MojomType = typename T::Struct::DataView; |
| 51 |
| 50 warning_observer_.set_last_warning(mojo::internal::VALIDATION_ERROR_NONE); | 52 warning_observer_.set_last_warning(mojo::internal::VALIDATION_ERROR_NONE); |
| 51 | 53 |
| 52 mojo::internal::SerializationContext context; | 54 mojo::internal::SerializationContext context; |
| 53 mojo::internal::FixedBufferForTesting buf( | 55 mojo::internal::FixedBufferForTesting buf( |
| 54 mojo::internal::PrepareToSerialize<T>(obj, &context)); | 56 mojo::internal::PrepareToSerialize<MojomType>(obj, &context)); |
| 55 typename mojo::internal::MojomTypeTraits<T>::Data* data; | 57 typename mojo::internal::MojomTypeTraits<MojomType>::Data* data; |
| 56 mojo::internal::Serialize<T>(obj, &buf, &data, &context); | 58 mojo::internal::Serialize<MojomType>(obj, &buf, &data, &context); |
| 57 | 59 |
| 58 EXPECT_EQ(expected_warning, warning_observer_.last_warning()); | 60 EXPECT_EQ(expected_warning, warning_observer_.last_warning()); |
| 59 } | 61 } |
| 60 | 62 |
| 61 template <typename T> | 63 template <typename MojomType, typename T> |
| 62 void TestArrayWarning(T obj, | 64 void TestArrayWarning(T obj, |
| 63 mojo::internal::ValidationError expected_warning, | 65 mojo::internal::ValidationError expected_warning, |
| 64 const ContainerValidateParams* validate_params) { | 66 const ContainerValidateParams* validate_params) { |
| 65 warning_observer_.set_last_warning(mojo::internal::VALIDATION_ERROR_NONE); | 67 warning_observer_.set_last_warning(mojo::internal::VALIDATION_ERROR_NONE); |
| 66 | 68 |
| 67 mojo::internal::SerializationContext context; | 69 mojo::internal::SerializationContext context; |
| 68 mojo::internal::FixedBufferForTesting buf( | 70 mojo::internal::FixedBufferForTesting buf( |
| 69 mojo::internal::PrepareToSerialize<T>(obj, &context)); | 71 mojo::internal::PrepareToSerialize<MojomType>(obj, &context)); |
| 70 typename mojo::internal::MojomTypeTraits<T>::Data* data; | 72 typename mojo::internal::MojomTypeTraits<MojomType>::Data* data; |
| 71 mojo::internal::Serialize<T>(obj, &buf, &data, validate_params, &context); | 73 mojo::internal::Serialize<MojomType>(obj, &buf, &data, validate_params, |
| 74 &context); |
| 72 | 75 |
| 73 EXPECT_EQ(expected_warning, warning_observer_.last_warning()); | 76 EXPECT_EQ(expected_warning, warning_observer_.last_warning()); |
| 74 } | 77 } |
| 75 | 78 |
| 76 template <typename T> | 79 template <typename T> |
| 77 void TestUnionWarning(T obj, | 80 void TestUnionWarning(T obj, |
| 78 mojo::internal::ValidationError expected_warning) { | 81 mojo::internal::ValidationError expected_warning) { |
| 82 using MojomType = typename T::Struct::DataView; |
| 83 |
| 79 warning_observer_.set_last_warning(mojo::internal::VALIDATION_ERROR_NONE); | 84 warning_observer_.set_last_warning(mojo::internal::VALIDATION_ERROR_NONE); |
| 80 | 85 |
| 81 mojo::internal::SerializationContext context; | 86 mojo::internal::SerializationContext context; |
| 82 mojo::internal::FixedBufferForTesting buf( | 87 mojo::internal::FixedBufferForTesting buf( |
| 83 mojo::internal::PrepareToSerialize<T>(obj, false, &context)); | 88 mojo::internal::PrepareToSerialize<MojomType>(obj, false, &context)); |
| 84 typename mojo::internal::MojomTypeTraits<T>::Data* data; | 89 typename mojo::internal::MojomTypeTraits<MojomType>::Data* data; |
| 85 mojo::internal::Serialize<T>(obj, &buf, &data, false, &context); | 90 mojo::internal::Serialize<MojomType>(obj, &buf, &data, false, &context); |
| 86 | 91 |
| 87 EXPECT_EQ(expected_warning, warning_observer_.last_warning()); | 92 EXPECT_EQ(expected_warning, warning_observer_.last_warning()); |
| 88 } | 93 } |
| 89 | 94 |
| 90 mojo::internal::SerializationWarningObserverForTesting warning_observer_; | 95 mojo::internal::SerializationWarningObserverForTesting warning_observer_; |
| 91 }; | 96 }; |
| 92 | 97 |
| 93 TEST_F(SerializationWarningTest, HandleInStruct) { | 98 TEST_F(SerializationWarningTest, HandleInStruct) { |
| 94 Struct2Ptr test_struct(Struct2::New()); | 99 Struct2Ptr test_struct(Struct2::New()); |
| 95 EXPECT_FALSE(test_struct->hdl.is_valid()); | 100 EXPECT_FALSE(test_struct->hdl.is_valid()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 | 151 |
| 147 test_struct = Struct5::New(); | 152 test_struct = Struct5::New(); |
| 148 test_struct->pair.resize(2); | 153 test_struct->pair.resize(2); |
| 149 test_struct->pair[0] = Struct1::New(); | 154 test_struct->pair[0] = Struct1::New(); |
| 150 test_struct->pair[1] = Struct1::New(); | 155 test_struct->pair[1] = Struct1::New(); |
| 151 | 156 |
| 152 TestWarning(std::move(test_struct), mojo::internal::VALIDATION_ERROR_NONE); | 157 TestWarning(std::move(test_struct), mojo::internal::VALIDATION_ERROR_NONE); |
| 153 } | 158 } |
| 154 | 159 |
| 155 TEST_F(SerializationWarningTest, ArrayOfArraysOfHandles) { | 160 TEST_F(SerializationWarningTest, ArrayOfArraysOfHandles) { |
| 161 using MojomType = ArrayDataView<ArrayDataView<ScopedHandle>>; |
| 156 Array<Array<ScopedHandle>> test_array = CreateTestNestedHandleArray(); | 162 Array<Array<ScopedHandle>> test_array = CreateTestNestedHandleArray(); |
| 157 test_array[0] = nullptr; | 163 test_array[0] = nullptr; |
| 158 test_array[1][0] = ScopedHandle(); | 164 test_array[1][0] = ScopedHandle(); |
| 159 | 165 |
| 160 ContainerValidateParams validate_params_0( | 166 ContainerValidateParams validate_params_0( |
| 161 0, true, new ContainerValidateParams(0, true, nullptr)); | 167 0, true, new ContainerValidateParams(0, true, nullptr)); |
| 162 TestArrayWarning(std::move(test_array), mojo::internal::VALIDATION_ERROR_NONE, | 168 TestArrayWarning<MojomType>(std::move(test_array), |
| 163 &validate_params_0); | 169 mojo::internal::VALIDATION_ERROR_NONE, |
| 170 &validate_params_0); |
| 164 | 171 |
| 165 test_array = CreateTestNestedHandleArray(); | 172 test_array = CreateTestNestedHandleArray(); |
| 166 test_array[0] = nullptr; | 173 test_array[0] = nullptr; |
| 167 ContainerValidateParams validate_params_1( | 174 ContainerValidateParams validate_params_1( |
| 168 0, false, new ContainerValidateParams(0, true, nullptr)); | 175 0, false, new ContainerValidateParams(0, true, nullptr)); |
| 169 TestArrayWarning(std::move(test_array), | 176 TestArrayWarning<MojomType>( |
| 170 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, | 177 std::move(test_array), |
| 171 &validate_params_1); | 178 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
| 179 &validate_params_1); |
| 172 | 180 |
| 173 test_array = CreateTestNestedHandleArray(); | 181 test_array = CreateTestNestedHandleArray(); |
| 174 test_array[1][0] = ScopedHandle(); | 182 test_array[1][0] = ScopedHandle(); |
| 175 ContainerValidateParams validate_params_2( | 183 ContainerValidateParams validate_params_2( |
| 176 0, true, new ContainerValidateParams(0, false, nullptr)); | 184 0, true, new ContainerValidateParams(0, false, nullptr)); |
| 177 TestArrayWarning(std::move(test_array), | 185 TestArrayWarning<MojomType>( |
| 178 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, | 186 std::move(test_array), |
| 179 &validate_params_2); | 187 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE, |
| 188 &validate_params_2); |
| 180 } | 189 } |
| 181 | 190 |
| 182 TEST_F(SerializationWarningTest, ArrayOfStrings) { | 191 TEST_F(SerializationWarningTest, ArrayOfStrings) { |
| 192 using MojomType = ArrayDataView<StringDataView>; |
| 193 |
| 183 Array<String> test_array(3); | 194 Array<String> test_array(3); |
| 184 for (size_t i = 0; i < test_array.size(); ++i) | 195 for (size_t i = 0; i < test_array.size(); ++i) |
| 185 test_array[i] = "hello"; | 196 test_array[i] = "hello"; |
| 186 | 197 |
| 187 ContainerValidateParams validate_params_0( | 198 ContainerValidateParams validate_params_0( |
| 188 0, true, new ContainerValidateParams(0, false, nullptr)); | 199 0, true, new ContainerValidateParams(0, false, nullptr)); |
| 189 TestArrayWarning(std::move(test_array), mojo::internal::VALIDATION_ERROR_NONE, | 200 TestArrayWarning<MojomType>(std::move(test_array), |
| 190 &validate_params_0); | 201 mojo::internal::VALIDATION_ERROR_NONE, |
| 202 &validate_params_0); |
| 191 | 203 |
| 192 test_array = Array<String>(3); | 204 test_array = Array<String>(3); |
| 193 for (size_t i = 0; i < test_array.size(); ++i) | 205 for (size_t i = 0; i < test_array.size(); ++i) |
| 194 test_array[i] = nullptr; | 206 test_array[i] = nullptr; |
| 195 ContainerValidateParams validate_params_1( | 207 ContainerValidateParams validate_params_1( |
| 196 0, false, new ContainerValidateParams(0, false, nullptr)); | 208 0, false, new ContainerValidateParams(0, false, nullptr)); |
| 197 TestArrayWarning(std::move(test_array), | 209 TestArrayWarning<MojomType>( |
| 198 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, | 210 std::move(test_array), |
| 199 &validate_params_1); | 211 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER, |
| 212 &validate_params_1); |
| 200 | 213 |
| 201 test_array = Array<String>(2); | 214 test_array = Array<String>(2); |
| 202 ContainerValidateParams validate_params_2( | 215 ContainerValidateParams validate_params_2( |
| 203 3, true, new ContainerValidateParams(0, false, nullptr)); | 216 3, true, new ContainerValidateParams(0, false, nullptr)); |
| 204 TestArrayWarning(std::move(test_array), | 217 TestArrayWarning<MojomType>( |
| 205 mojo::internal::VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER, | 218 std::move(test_array), |
| 206 &validate_params_2); | 219 mojo::internal::VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER, |
| 220 &validate_params_2); |
| 207 } | 221 } |
| 208 | 222 |
| 209 TEST_F(SerializationWarningTest, StructInUnion) { | 223 TEST_F(SerializationWarningTest, StructInUnion) { |
| 210 DummyStructPtr dummy(nullptr); | 224 DummyStructPtr dummy(nullptr); |
| 211 ObjectUnionPtr obj(ObjectUnion::New()); | 225 ObjectUnionPtr obj(ObjectUnion::New()); |
| 212 obj->set_f_dummy(std::move(dummy)); | 226 obj->set_f_dummy(std::move(dummy)); |
| 213 | 227 |
| 214 TestUnionWarning(std::move(obj), | 228 TestUnionWarning(std::move(obj), |
| 215 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER); | 229 mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER); |
| 216 } | 230 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 231 | 245 |
| 232 TestUnionWarning(std::move(handle), | 246 TestUnionWarning(std::move(handle), |
| 233 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE); | 247 mojo::internal::VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE); |
| 234 } | 248 } |
| 235 | 249 |
| 236 } // namespace | 250 } // namespace |
| 237 } // namespace test | 251 } // namespace test |
| 238 } // namespace mojo | 252 } // namespace mojo |
| 239 | 253 |
| 240 #endif | 254 #endif |
| OLD | NEW |