| 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 library versioning_apptests; | 5 library versioning_apptests; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:mojo_apptest/apptest.dart'; | 9 import 'package:mojo_apptest/apptest.dart'; |
| 10 import 'package:mojo/application.dart'; | 10 import 'package:mojo/application.dart'; |
| 11 import 'package:mojo/bindings.dart'; | 11 import 'package:mojo/bindings.dart'; |
| 12 import 'package:mojo/core.dart'; | 12 import 'package:mojo/core.dart'; |
| 13 import 'package:_mojo_for_test_only/mojo/test/versioning/versioning_test_client.
mojom.dart'; | 13 import 'package:_mojo_for_test_only/mojo/test/versioning/versioning_test_client.
mojom.dart'; |
| 14 | 14 |
| 15 tests(Application application, String url) { | 15 tests(Application application, String url) { |
| 16 group('Versioning Apptests', () { | 16 group('Versioning Apptests', () { |
| 17 test('Struct', () async { | 17 test('Struct', () async { |
| 18 // The service side uses a newer version of Employee definition that | 18 // The service side uses a newer version of Employee definition that |
| 19 // includes the 'birthday' field. | 19 // includes the 'birthday' field. |
| 20 | 20 |
| 21 // Connect to human resource database. | 21 // Connect to human resource database. |
| 22 var database = HumanResourceDatabase.connectToService( | 22 var database = HumanResourceDatabase.connectToService( |
| 23 application, "mojo:versioning_test_service"); | 23 application, "mojo:versioning_test_service"); |
| 24 | 24 |
| 25 // Query database and get a response back (even though the client does not | 25 // Query database and get a response back (even though the client does not |
| 26 // know about the birthday field). | 26 // know about the birthday field). |
| 27 var c = new Completer(); |
| 27 bool retrieveFingerPrint = true; | 28 bool retrieveFingerPrint = true; |
| 28 var response = await database.queryEmployee(1, retrieveFingerPrint); | 29 database.queryEmployee(1, retrieveFingerPrint, |
| 29 expect(response.employee.employeeId, equals(1)); | 30 (Employee e, List<int> fingerPrint) { |
| 30 expect(response.employee.name, equals("Homer Simpson")); | 31 c.complete([e, fingerPrint]); |
| 31 expect(response.employee.department, equals(Department.dev)); | 32 }); |
| 32 expect(response.fingerPrint, isNotNull); | 33 var response = await database.responseOrError(c.future); |
| 34 expect(response[0].employeeId, equals(1)); |
| 35 expect(response[0].name, equals("Homer Simpson")); |
| 36 expect(response[0].department, equals(Department.dev)); |
| 37 expect(response[1], isNotNull); |
| 33 | 38 |
| 34 // Pass an Employee struct to the service side that lacks the 'birthday' | 39 // Pass an Employee struct to the service side that lacks the 'birthday' |
| 35 // field. | 40 // field. |
| 36 var newEmployee = new Employee(); | 41 var newEmployee = new Employee(); |
| 37 newEmployee.employeeId = 2; | 42 newEmployee.employeeId = 2; |
| 38 newEmployee.name = "Marge Simpson"; | 43 newEmployee.name = "Marge Simpson"; |
| 39 newEmployee.department = Department.sales; | 44 newEmployee.department = Department.sales; |
| 40 response = await database.addEmployee(newEmployee); | 45 c = new Completer(); |
| 41 expect(response.success, isTrue); | 46 database.addEmployee(newEmployee, (bool success) { |
| 47 c.complete(success); |
| 48 }); |
| 49 response = await database.responseOrError(c.future); |
| 50 expect(response, isTrue); |
| 42 | 51 |
| 43 // Query for employee #2. | 52 // Query for employee #2. |
| 53 c = new Completer(); |
| 44 retrieveFingerPrint = false; | 54 retrieveFingerPrint = false; |
| 45 response = await database.queryEmployee(2, retrieveFingerPrint); | 55 database.queryEmployee(2, retrieveFingerPrint, |
| 46 expect(response.employee.employeeId, equals(2)); | 56 (Employee e, List<int> fingerPrint) { |
| 47 expect(response.employee.name, equals("Marge Simpson")); | 57 c.complete([e, fingerPrint]); |
| 48 expect(response.employee.department, equals(Department.sales)); | 58 }); |
| 49 expect(response.fingerPrint, isNull); | 59 response = await database.responseOrError(c.future); |
| 60 expect(response[0].employeeId, equals(2)); |
| 61 expect(response[0].name, equals("Marge Simpson")); |
| 62 expect(response[0].department, equals(Department.sales)); |
| 63 expect(response[1], isNull); |
| 50 | 64 |
| 51 // Disconnect from database. | 65 // Disconnect from database. |
| 52 database.close(); | 66 database.close(); |
| 53 }); | 67 }); |
| 54 | 68 |
| 55 test('QueryVersion', () async { | 69 test('QueryVersion', () async { |
| 56 // Connect to human resource database. | 70 // Connect to human resource database. |
| 57 var database = HumanResourceDatabase.connectToService( | 71 var database = HumanResourceDatabase.connectToService( |
| 58 application, "mojo:versioning_test_service"); | 72 application, "mojo:versioning_test_service"); |
| 59 // Query the version. | 73 // Query the version. |
| 60 var version = await database.ctrl.queryVersion(); | 74 var version = await database.ctrl.queryVersion(); |
| 61 // Expect it to be 1. | 75 // Expect it to be 1. |
| 62 expect(version, equals(1)); | 76 expect(version, equals(1)); |
| 63 // Disconnect from database. | 77 // Disconnect from database. |
| 64 database.close(); | 78 database.close(); |
| 65 }); | 79 }); |
| 66 | 80 |
| 67 test('RequireVersion', () async { | 81 test('RequireVersion', () async { |
| 68 // Connect to human resource database. | 82 // Connect to human resource database. |
| 69 var database = HumanResourceDatabase.connectToService( | 83 var database = HumanResourceDatabase.connectToService( |
| 70 application, "mojo:versioning_test_service"); | 84 application, "mojo:versioning_test_service"); |
| 71 | 85 |
| 72 // Require version 1. | 86 // Require version 1. |
| 73 database.ctrl.requireVersion(1); | 87 database.ctrl.requireVersion(1); |
| 74 expect(database.ctrl.version, equals(1)); | 88 expect(database.ctrl.version, equals(1)); |
| 75 | 89 |
| 76 // Query for employee #3. | 90 // Query for employee #3. |
| 77 var retrieveFingerPrint = false; | 91 var retrieveFingerPrint = false; |
| 78 var response = await database.queryEmployee(3, retrieveFingerPrint); | 92 var c = new Completer(); |
| 93 database.queryEmployee(3, retrieveFingerPrint, |
| 94 (Employee e, List<int> fingerPrint) { |
| 95 c.complete([e, fingerPrint]); |
| 96 }); |
| 97 var response = await database.responseOrError(c.future); |
| 79 | 98 |
| 80 // Got some kind of response. | 99 // Got some kind of response. |
| 81 expect(response, isNotNull); | 100 expect(response, isNotNull); |
| 82 | 101 |
| 83 // Require version 3 (which cannot be satisfied). | 102 // Require version 3 (which cannot be satisfied). |
| 84 database.ctrl.requireVersion(3); | 103 database.ctrl.requireVersion(3); |
| 85 expect(database.ctrl.version, equals(3)); | 104 expect(database.ctrl.version, equals(3)); |
| 86 | 105 |
| 87 // Query for employee #1, observe that the call fails. | 106 // Query for employee #1, observe that the call fails. |
| 88 bool exceptionCaught = false; | 107 bool exceptionCaught = false; |
| 108 c = new Completer(); |
| 109 database.queryEmployee(1, retrieveFingerPrint, |
| 110 (Employee e, List<int> fingerPrint) { |
| 111 c.complete([e, fingerPrint]); |
| 112 }); |
| 89 try { | 113 try { |
| 90 response = await database.responseOrError( | 114 response = await database.responseOrError(c.future); |
| 91 database.queryEmployee(1, retrieveFingerPrint)); | |
| 92 fail('Exception should be thrown.'); | 115 fail('Exception should be thrown.'); |
| 93 } catch (e) { | 116 } catch (e) { |
| 94 exceptionCaught = true; | 117 exceptionCaught = true; |
| 95 } | 118 } |
| 96 expect(exceptionCaught, isTrue); | 119 expect(exceptionCaught, isTrue); |
| 97 | 120 |
| 98 // No need to disconnect from database because we were disconnected by | 121 // No need to disconnect from database because we were disconnected by |
| 99 // the requireVersion control message. | 122 // the requireVersion control message. |
| 100 }); | 123 }); |
| 101 | 124 |
| 102 test('CallNonexistentMethod', () async { | 125 test('CallNonexistentMethod', () async { |
| 103 // Connect to human resource database. | 126 // Connect to human resource database. |
| 104 var database = HumanResourceDatabase.connectToService( | 127 var database = HumanResourceDatabase.connectToService( |
| 105 application, "mojo:versioning_test_service"); | 128 application, "mojo:versioning_test_service"); |
| 106 const fingerPrintLength = 128; | 129 const fingerPrintLength = 128; |
| 107 var fingerPrint = new List(fingerPrintLength); | 130 var fingerPrint = new List(fingerPrintLength); |
| 108 for (var i = 0; i < fingerPrintLength; i++) { | 131 for (var i = 0; i < fingerPrintLength; i++) { |
| 109 fingerPrint[i] = i + 13; | 132 fingerPrint[i] = i + 13; |
| 110 } | 133 } |
| 111 // Although the client side doesn't know whether the service side supports | 134 // Although the client side doesn't know whether the service side supports |
| 112 // version 1, calling a version 1 method succeeds as long as the service | 135 // version 1, calling a version 1 method succeeds as long as the service |
| 113 // side supports version 1. | 136 // side supports version 1. |
| 114 var response = await database.attachFingerPrint(1, fingerPrint); | 137 var c = new Completer(); |
| 115 expect(response.success, isTrue); | 138 database.attachFingerPrint(1, fingerPrint, (bool success) { |
| 139 c.complete(success); |
| 140 }); |
| 141 var response = await database.responseOrError(c.future); |
| 142 expect(response, isTrue); |
| 116 | 143 |
| 117 // Calling a version 2 method (which the service side doesn't support) | 144 // Calling a version 2 method (which the service side doesn't support) |
| 118 // closes the pipe. | 145 // closes the pipe. |
| 119 bool exceptionCaught = false; | 146 bool exceptionCaught = false; |
| 147 c = new Completer(); |
| 148 database.listEmployeeIds((List<int> ids) { |
| 149 c.complete(ids); |
| 150 }); |
| 120 try { | 151 try { |
| 121 response = await database.responseOrError(database.listEmployeeIds()); | 152 response = await database.responseOrError(c.future); |
| 122 fail('Exception should be thrown.'); | 153 fail('Exception should be thrown.'); |
| 123 } catch (e) { | 154 } catch (e) { |
| 124 exceptionCaught = true; | 155 exceptionCaught = true; |
| 125 } | 156 } |
| 126 expect(exceptionCaught, isTrue); | 157 expect(exceptionCaught, isTrue); |
| 127 | 158 |
| 128 // No need to disconnect from database because we were disconnected by | 159 // No need to disconnect from database because we were disconnected by |
| 129 // the call to a version 2 method. | 160 // the call to a version 2 method. |
| 130 }); | 161 }); |
| 131 }); | 162 }); |
| 132 } | 163 } |
| OLD | NEW |