Chromium Code Reviews| 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 define([ | 5 define([ |
| 6 "console", | 6 "console", |
| 7 "file", | 7 "file", |
| 8 "gin/test/expect", | 8 "gin/test/expect", |
| 9 "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom", | 9 "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom", |
| 10 "mojo/public/js/bindings/buffer", | 10 "mojo/public/js/bindings/buffer", |
| 11 "mojo/public/js/bindings/codec", | 11 "mojo/public/js/bindings/codec", |
| 12 "mojo/public/js/bindings/connection", | |
| 13 "mojo/public/js/bindings/connector", | |
| 14 "mojo/public/js/bindings/core", | |
| 12 "mojo/public/js/bindings/tests/validation_test_input_parser", | 15 "mojo/public/js/bindings/tests/validation_test_input_parser", |
| 16 "mojo/public/js/bindings/router", | |
| 13 "mojo/public/js/bindings/validator", | 17 "mojo/public/js/bindings/validator", |
| 14 ], function( | 18 ], function(console, |
| 15 console, file, expect, testInterface, buffer, codec, parser, validator) { | 19 file, |
| 20 expect, | |
| 21 testInterface, | |
| 22 buffer, | |
| 23 codec, | |
| 24 connection, | |
| 25 connector, | |
| 26 core, | |
| 27 parser, | |
| 28 router, | |
| 29 validator) { | |
| 30 | |
| 31 var noError = validator.validationError.NONE; | |
| 16 | 32 |
| 17 function checkTestMessageParser() { | 33 function checkTestMessageParser() { |
| 18 function TestMessageParserFailure(message, input) { | 34 function TestMessageParserFailure(message, input) { |
| 19 this.message = message; | 35 this.message = message; |
| 20 this.input = input; | 36 this.input = input; |
| 21 } | 37 } |
| 22 | 38 |
| 23 TestMessageParserFailure.prototype.toString = function() { | 39 TestMessageParserFailure.prototype.toString = function() { |
| 24 return 'Error: ' + this.message + ' for "' + this.input + '"'; | 40 return 'Error: ' + this.message + ' for "' + this.input + '"'; |
| 25 } | 41 } |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 189 expect(contents).not.toBeNull(); | 205 expect(contents).not.toBeNull(); |
| 190 return parser.parseTestMessage(contents); | 206 return parser.parseTestMessage(contents); |
| 191 } | 207 } |
| 192 | 208 |
| 193 function readTestExpected(filename) { | 209 function readTestExpected(filename) { |
| 194 var contents = file.readFileToString(filename + ".expected"); | 210 var contents = file.readFileToString(filename + ".expected"); |
| 195 expect(contents).not.toBeNull(); | 211 expect(contents).not.toBeNull(); |
| 196 return contents.trim(); | 212 return contents.trim(); |
| 197 } | 213 } |
| 198 | 214 |
| 215 function checkValidationResult(testFile, err) { | |
| 216 var actualResult = (err === noError) ? "PASS" : err; | |
|
yzshen1
2014/09/15 07:08:40
wrong indent.
hansmuller
2014/09/15 16:25:26
Done.
| |
| 217 var expectedResult = readTestExpected(testFile); | |
| 218 if (actualResult != expectedResult) | |
| 219 console.log("[Test message validation failed: " + testFile + " ]"); | |
| 220 expect(actualResult).toEqual(expectedResult); | |
| 221 } | |
| 222 | |
| 199 function testMessageValidation(key, filters) { | 223 function testMessageValidation(key, filters) { |
| 200 var testFiles = getMessageTestFiles(key); | 224 var testFiles = getMessageTestFiles(key); |
| 201 expect(testFiles.length).toBeGreaterThan(0); | 225 expect(testFiles.length).toBeGreaterThan(0); |
| 202 | 226 |
| 203 var noError = validator.validationError.NONE; | |
| 204 for (var i = 0; i < testFiles.length; i++) { | 227 for (var i = 0; i < testFiles.length; i++) { |
| 205 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. | 228 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. |
| 206 if (testFiles[i].indexOf("overflow") != -1) { | 229 if (testFiles[i].indexOf("overflow") != -1) { |
| 207 console.log("[Skipping " + testFiles[i] + "]"); | 230 console.log("[Skipping " + testFiles[i] + "]"); |
| 208 continue; | 231 continue; |
| 209 } | 232 } |
| 210 | 233 |
| 211 var testMessage = readTestMessage(testFiles[i]); | 234 var testMessage = readTestMessage(testFiles[i]); |
| 212 var handles = new Array(testMessage.handleCount); | 235 var handles = new Array(testMessage.handleCount); |
| 213 var message = new codec.Message(testMessage.buffer, handles); | 236 var message = new codec.Message(testMessage.buffer, handles); |
| 214 var messageValidator = new validator.Validator(message); | 237 var messageValidator = new validator.Validator(message); |
| 215 | 238 |
| 216 var err = messageValidator.validateMessageHeader(); | 239 var err = messageValidator.validateMessageHeader(); |
| 217 for (var j = 0; err === noError && j < filters.length; ++j) | 240 for (var j = 0; err === noError && j < filters.length; ++j) |
| 218 err = filters[j](messageValidator); | 241 err = filters[j](messageValidator); |
| 219 | 242 |
| 220 var actualResult = (err === noError) ? "PASS" : err; | 243 checkValidationResult(testFiles[i], err); |
| 221 var expectedResult = readTestExpected(testFiles[i]); | |
| 222 if (actualResult != expectedResult) | |
| 223 console.log("[Test message validation failed: " + testFiles[i] + " ]"); | |
| 224 expect(actualResult).toEqual(expectedResult); | |
| 225 } | 244 } |
| 226 } | 245 } |
| 227 | 246 |
| 228 function testConformanceMessageValidation() { | 247 function testConformanceMessageValidation() { |
| 229 testMessageValidation("conformance_", [ | 248 testMessageValidation("conformance_", [ |
| 230 testInterface.ConformanceTestInterfaceStub.prototype.validator]); | 249 testInterface.ConformanceTestInterfaceStub.prototype.validator]); |
| 231 } | 250 } |
| 232 | 251 |
| 233 function testNotImplementedMessageValidation() { | 252 function testNotImplementedMessageValidation() { |
| 234 testMessageValidation("not_implemented_", [ | 253 testMessageValidation("not_implemented_", [ |
| 235 testInterface.ConformanceTestInterfaceStub.prototype.validator]); | 254 testInterface.ConformanceTestInterfaceStub.prototype.validator]); |
| 236 } | 255 } |
| 237 | 256 |
| 238 function testIntegrationMessageValidation() { | 257 function doTestIntegratedMessageValidation() { |
| 239 testMessageValidation("integration_", [ | 258 var testFiles = getMessageTestFiles("integration_"); |
| 240 testInterface.IntegrationTestInterface1Stub.prototype.validator, | 259 expect(testFiles.length).toBeGreaterThan(0); |
| 241 testInterface.IntegrationTestInterface2Proxy.prototype.validator]); | 260 |
| 261 for (var i = 0; i < testFiles.length; i++) { | |
| 262 // TODO(hansmuller): Temporarily skipping array pointer overflow tests. | |
| 263 if (testFiles[i].indexOf("overflow") != -1) { | |
| 264 console.log("[Skipping " + testFiles[i] + "]"); | |
| 265 continue; | |
| 266 } | |
| 267 | |
| 268 var testMessage = readTestMessage(testFiles[i]); | |
| 269 var handles = new Array(testMessage.handleCount); | |
| 270 var testMessagePipe = new core.createMessagePipe(); | |
| 271 expect(testMessagePipe.result).toBe(core.RESULT_OK); | |
| 272 | |
| 273 var writeMessageValue = core.writeMessage( | |
| 274 testMessagePipe.handle0, | |
| 275 new Uint8Array(testMessage.buffer.arrayBuffer), | |
| 276 new Array(testMessage.handleCount), | |
| 277 core.WRITE_MESSAGE_FLAG_NONE); | |
| 278 expect(writeMessageValue).toBe(core.RESULT_OK); | |
| 279 | |
| 280 var testConnection = new connection.Connection( | |
| 281 testMessagePipe.handle1, | |
| 282 testInterface.IntegrationTestInterface1Stub, | |
| 283 testInterface.IntegrationTestInterface2Proxy); | |
| 284 | |
| 285 var validationError = noError; | |
| 286 testConnection.router_.validationErrorHandler = function(err) { | |
| 287 validationError = err; | |
|
yzshen1
2014/09/15 07:08:40
nit: wrong indent.
hansmuller
2014/09/15 16:25:25
Done.
| |
| 288 } | |
| 289 | |
| 290 testConnection.router_.connector_.deliverMessage(); | |
| 291 checkValidationResult(testFiles[i], validationError); | |
| 292 | |
| 293 testConnection.close(); | |
| 294 expect(core.close(testMessagePipe.handle0)).toBe(core.RESULT_OK); | |
| 295 } | |
| 296 } | |
| 297 | |
| 298 function testIntegratedMessageValidation() { | |
| 299 // Temporarily modify the Connector and Router classes: | |
| 300 // - Enable delivering a message without an async wait. | |
| 301 // - Defeat validated message handling. | |
| 302 // - Delegate invalid message handling. | |
| 303 try { | |
| 304 var waitToReadMore = connector.Connector.prototype.waitToReadMore_; | |
|
yzshen1
2014/09/15 07:08:40
[optional, something that may worth considering]
I
hansmuller
2014/09/15 16:25:26
I agree and I have to admit that what I had been d
yzshen1
2014/09/15 17:32:19
I like your new approach!
| |
| 305 connector.Connector.prototype.waitToReadMore_ = function() { }; | |
| 306 connector.Connector.prototype.deliverMessage = function() { | |
| 307 this.readMore_(core.RESULT_OK); | |
| 308 } | |
| 309 | |
| 310 var handleValidIncomingMessage = | |
| 311 router.Router.prototype.handleValidIncomingMessage_; | |
| 312 router.Router.prototype.handleValidIncomingMessage_ = function() { }; | |
| 313 | |
| 314 var handleInvalidIncomingMessage = | |
| 315 router.Router.prototype.handleValidIncomingMessage_; | |
| 316 router.Router.prototype.handleInvalidIncomingMessage_ = | |
| 317 function(message, error) { | |
| 318 this.validationErrorHandler(error); | |
| 319 }; | |
| 320 | |
| 321 doTestIntegratedMessageValidation(); | |
| 322 | |
| 323 } finally { | |
| 324 connector.Connector.prototype.waitToReadMore_ = waitToReadMore; | |
| 325 router.Router.prototype.handleValidIncomingMessage_ = | |
| 326 handleValidIncomingMessage; | |
| 327 router.Router.prototype.handleinValidIncomingMessage_ = | |
| 328 handleInvalidIncomingMessage; | |
| 329 } | |
| 242 } | 330 } |
| 243 | 331 |
| 244 expect(checkTestMessageParser()).toBeNull(); | 332 expect(checkTestMessageParser()).toBeNull(); |
| 245 testConformanceMessageValidation(); | 333 testConformanceMessageValidation(); |
| 246 testIntegrationMessageValidation(); | 334 testIntegratedMessageValidation(); |
| 247 this.result = "PASS"; | 335 this.result = "PASS"; |
| 248 }); | 336 }); |
| OLD | NEW |