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 |