OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 import 'dart:async'; |
| 6 |
| 7 import 'package:unittest/unittest.dart'; |
| 8 |
| 9 import 'package:appengine/api/errors.dart'; |
| 10 import 'package:appengine/src/api_impl/modules_impl.dart'; |
| 11 import 'package:appengine/src/protobuf_api/rpc/rpc_service.dart'; |
| 12 import 'package:appengine/src/appengine_context.dart'; |
| 13 import 'package:appengine/src/protobuf_api/internal/' |
| 14 'modules_service.pb.dart' as pb; |
| 15 |
| 16 import 'utils/mock_rpc.dart'; |
| 17 import 'utils/error_matchers.dart'; |
| 18 |
| 19 main() { |
| 20 const INVALID_PROTOBUF = const [1, 2, 3, 4, 5]; |
| 21 |
| 22 group('modules', () { |
| 23 test('current', () { |
| 24 var mock = new MockRPCService('modules'); |
| 25 var context = new AppengineContext( |
| 26 'dev', 'application', 'version', 'module', 'instance', null); |
| 27 var modules = new ModulesRpcImpl(mock, context, ''); |
| 28 expect(modules.currentModule, 'module'); |
| 29 expect(modules.currentVersion, 'version'); |
| 30 expect(modules.currentInstance, 'instance'); |
| 31 }); |
| 32 |
| 33 test('default-version', () { |
| 34 var mock = new MockRPCService('modules'); |
| 35 var context = new AppengineContext( |
| 36 'dev', 'application', 'version', null, null, null); |
| 37 var modules = new ModulesRpcImpl(mock, context, ''); |
| 38 |
| 39 // Tests NetworkError. |
| 40 mock.register('GetDefaultVersion', |
| 41 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 42 return new Future.error(new NetworkError("")); |
| 43 })); |
| 44 expect(modules.defaultVersion('module'), throwsA(isNetworkError)); |
| 45 |
| 46 // Tests ProtocolError. |
| 47 mock.register('GetDefaultVersion', |
| 48 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 49 return new Future.value(INVALID_PROTOBUF); |
| 50 })); |
| 51 expect(modules.defaultVersion('module'), throwsA(isProtocolError)); |
| 52 |
| 53 // Tests ApplicationError. |
| 54 mock.register('GetDefaultVersion', |
| 55 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 56 return new Future.error(new RpcApplicationError( |
| 57 pb.ModulesServiceError_ErrorCode.INVALID_MODULE.value, 'foobar')); |
| 58 })); |
| 59 expect(modules.defaultVersion('module'), |
| 60 throwsA(isAppEngineApplicationError)); |
| 61 |
| 62 mock.register('GetDefaultVersion', |
| 63 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 64 expect(request.module, 'module'); |
| 65 var response = new pb.GetDefaultVersionResponse(); |
| 66 response.version = 'default'; |
| 67 return new Future.value(response.writeToBuffer()); |
| 68 })); |
| 69 expect(modules.defaultVersion('module'), completion('default')); |
| 70 }); |
| 71 |
| 72 test('modules', () { |
| 73 var mock = new MockRPCService('modules'); |
| 74 var context = new AppengineContext( |
| 75 'dev', 'application', 'version', null, null, null); |
| 76 var modules = new ModulesRpcImpl(mock, context, ''); |
| 77 |
| 78 // Tests NetworkError. |
| 79 mock.register('GetModules', |
| 80 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 81 return new Future.error(new NetworkError("")); |
| 82 })); |
| 83 expect(modules.modules(), throwsA(isNetworkError)); |
| 84 |
| 85 // Tests ProtocolError. |
| 86 mock.register('GetModules', |
| 87 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 88 return new Future.value(INVALID_PROTOBUF); |
| 89 })); |
| 90 expect(modules.modules(), throwsA(isProtocolError)); |
| 91 |
| 92 // Tests ApplicationError. |
| 93 mock.register('GetModules', |
| 94 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 95 return new Future.error(new RpcApplicationError( |
| 96 pb.ModulesServiceError_ErrorCode.INVALID_MODULE.value, 'foobar')); |
| 97 })); |
| 98 expect(modules.modules(), throwsA(isAppEngineApplicationError)); |
| 99 |
| 100 mock.register('GetModules', pb.GetModulesRequest, expectAsync((request) { |
| 101 var response = new pb.GetModulesResponse(); |
| 102 response.module.add('module1'); |
| 103 response.module.add('module2'); |
| 104 return new Future.value(response.writeToBuffer()); |
| 105 })); |
| 106 expect(modules.modules(), completion(['module1', 'module2'])); |
| 107 }); |
| 108 |
| 109 test('versions', () { |
| 110 var mock = new MockRPCService('modules'); |
| 111 var context = new AppengineContext( |
| 112 'dev', 'application', 'version', null, null, null); |
| 113 var modules = new ModulesRpcImpl(mock, context, ''); |
| 114 |
| 115 // Tests NetworkError. |
| 116 mock.register('GetVersions', |
| 117 pb.GetVersionsRequest, expectAsync((request) { |
| 118 return new Future.error(new NetworkError("")); |
| 119 })); |
| 120 expect(modules.versions('module'), throwsA(isNetworkError)); |
| 121 |
| 122 // Tests ProtocolError. |
| 123 mock.register('GetVersions', |
| 124 pb.GetVersionsRequest, expectAsync((request) { |
| 125 return new Future.value(INVALID_PROTOBUF); |
| 126 })); |
| 127 expect(modules.versions('module'), throwsA(isProtocolError)); |
| 128 |
| 129 // Tests ApplicationError. |
| 130 mock.register('GetVersions', |
| 131 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 132 return new Future.error(new RpcApplicationError( |
| 133 pb.ModulesServiceError_ErrorCode.INVALID_MODULE.value, 'foobar')); |
| 134 })); |
| 135 expect(modules.versions('module'), throwsA(isAppEngineApplicationError)); |
| 136 |
| 137 mock.register('GetVersions', |
| 138 pb.GetVersionsRequest, expectAsync((request) { |
| 139 expect(request.module, 'module'); |
| 140 var response = new pb.GetVersionsResponse(); |
| 141 response.version.add('version1'); |
| 142 response.version.add('version2'); |
| 143 return new Future.value(response.writeToBuffer()); |
| 144 })); |
| 145 expect(modules.versions('module'), completion(['version1', 'version2'])); |
| 146 }); |
| 147 |
| 148 test('hostname', () { |
| 149 var mock = new MockRPCService('modules'); |
| 150 var context = new AppengineContext( |
| 151 'dev', 'application', 'version', null, null, null); |
| 152 var modules = new ModulesRpcImpl(mock, context, ''); |
| 153 |
| 154 // Tests NetworkError. |
| 155 mock.register('GetHostname', |
| 156 pb.GetHostnameRequest, expectAsync((request) { |
| 157 return new Future.error(new NetworkError("")); |
| 158 })); |
| 159 expect(modules.hostname(), throwsA(isNetworkError)); |
| 160 |
| 161 // Tests ProtocolError. |
| 162 mock.register('GetHostname', |
| 163 pb.GetHostnameRequest, expectAsync((request) { |
| 164 return new Future.value(INVALID_PROTOBUF); |
| 165 })); |
| 166 expect(modules.hostname(), throwsA(isProtocolError)); |
| 167 |
| 168 // Tests ApplicationError. |
| 169 mock.register('GetHostname', |
| 170 pb.GetDefaultVersionRequest, expectAsync((request) { |
| 171 return new Future.error(new RpcApplicationError( |
| 172 pb.ModulesServiceError_ErrorCode.INVALID_MODULE.value, 'foobar')); |
| 173 })); |
| 174 expect(modules.hostname(), throwsA(isAppEngineApplicationError)); |
| 175 |
| 176 var count = 0; |
| 177 mock.register('GetHostname', |
| 178 pb.GetHostnameRequest, expectAsync((request) { |
| 179 switch (count++) { |
| 180 case 0: |
| 181 expect(request.hasModule(), isFalse); |
| 182 expect(request.hasVersion(), isFalse); |
| 183 expect(request.hasInstance(), isFalse); |
| 184 break; |
| 185 case 1: |
| 186 expect(request.module, 'module'); |
| 187 expect(request.hasVersion(), isFalse); |
| 188 expect(request.hasInstance(), isFalse); |
| 189 break; |
| 190 case 2: |
| 191 expect(request.module, 'module'); |
| 192 expect(request.version, 'version'); |
| 193 expect(request.hasInstance(), isFalse); |
| 194 break; |
| 195 case 3: |
| 196 expect(request.module, 'module'); |
| 197 expect(request.version, 'version'); |
| 198 expect(request.instance, 'instance'); |
| 199 break; |
| 200 default: |
| 201 throw new UnsupportedError('Unreachable'); |
| 202 } |
| 203 var response = new pb.GetHostnameResponse(); |
| 204 response.hostname = 'hostname'; |
| 205 return new Future.value(response.writeToBuffer()); |
| 206 }, count: 4)); |
| 207 expect(modules.hostname(), completion('hostname')); |
| 208 expect(modules.hostname('module'), completion('hostname')); |
| 209 expect(modules.hostname('module', 'version'), completion('hostname')); |
| 210 expect(modules.hostname('module', 'version', 'instance'), |
| 211 completion('hostname')); |
| 212 |
| 213 count = 0; |
| 214 var hostnames = [ |
| 215 'project.appspot.com', |
| 216 'version.project.appspot.com', |
| 217 'version.module.project.appspot.com', |
| 218 'instance.version.module.project.appspot.com' |
| 219 ]; |
| 220 |
| 221 var mappedHostnames = [ |
| 222 'project.appspot.com', |
| 223 'version-dot-project.appspot.com', |
| 224 'version-dot-module-dot-project.appspot.com', |
| 225 'instance-dot-version-dot-module-dot-project.appspot.com' |
| 226 ]; |
| 227 |
| 228 mock.register('GetHostname', |
| 229 pb.GetHostnameRequest, expectAsync((request) { |
| 230 var response = new pb.GetHostnameResponse(); |
| 231 response.hostname = hostnames[count++]; |
| 232 print(response.hostname); |
| 233 return new Future.value(response.writeToBuffer()); |
| 234 }, count: hostnames.length)); |
| 235 Future.forEach(mappedHostnames, expectAsync((expected) { |
| 236 return modules.hostname().then((hostname) { |
| 237 expect(hostname, expected); |
| 238 }); |
| 239 }, count: mappedHostnames.length)); |
| 240 }); |
| 241 }); |
| 242 } |
OLD | NEW |