gcloud 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data.tar.gz.sig +2 -3
  2. data/CHANGELOG +4 -0
  3. data/LICENSE +674 -0
  4. data/Manifest +111 -0
  5. data/README.md +4 -3
  6. data/bin/gcutil +53 -0
  7. data/gcloud.gemspec +4 -3
  8. data/packages/gcutil-1.7.1/CHANGELOG +197 -0
  9. data/packages/gcutil-1.7.1/LICENSE +202 -0
  10. data/packages/gcutil-1.7.1/VERSION +1 -0
  11. data/packages/gcutil-1.7.1/gcutil +53 -0
  12. data/packages/gcutil-1.7.1/lib/google_api_python_client/LICENSE +23 -0
  13. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/__init__.py +1 -0
  14. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/discovery.py +743 -0
  15. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/errors.py +123 -0
  16. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/ext/__init__.py +0 -0
  17. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/http.py +1443 -0
  18. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/mimeparse.py +172 -0
  19. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/model.py +385 -0
  20. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/schema.py +303 -0
  21. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/__init__.py +1 -0
  22. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/anyjson.py +32 -0
  23. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/appengine.py +528 -0
  24. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/client.py +1139 -0
  25. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/clientsecrets.py +105 -0
  26. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/crypt.py +244 -0
  27. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/django_orm.py +124 -0
  28. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/file.py +107 -0
  29. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/locked_file.py +343 -0
  30. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/multistore_file.py +379 -0
  31. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/tools.py +174 -0
  32. data/packages/gcutil-1.7.1/lib/google_api_python_client/uritemplate/__init__.py +147 -0
  33. data/packages/gcutil-1.7.1/lib/google_apputils/LICENSE +202 -0
  34. data/packages/gcutil-1.7.1/lib/google_apputils/google/__init__.py +3 -0
  35. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/__init__.py +3 -0
  36. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/app.py +356 -0
  37. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/appcommands.py +783 -0
  38. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/basetest.py +1260 -0
  39. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/datelib.py +421 -0
  40. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/debug.py +60 -0
  41. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/file_util.py +181 -0
  42. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/resources.py +67 -0
  43. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/run_script_module.py +217 -0
  44. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/setup_command.py +159 -0
  45. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/shellutil.py +49 -0
  46. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/stopwatch.py +204 -0
  47. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/__init__.py +0 -0
  48. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper.py +140 -0
  49. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper_test.py +149 -0
  50. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth.py +130 -0
  51. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth_test.py +75 -0
  52. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds.py +128 -0
  53. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds_test.py +111 -0
  54. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base.py +1808 -0
  55. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base_test.py +1651 -0
  56. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/compute/v1beta13.json +2851 -0
  57. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/compute/v1beta14.json +3361 -0
  58. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds.py +342 -0
  59. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds_test.py +474 -0
  60. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds.py +344 -0
  61. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds_test.py +231 -0
  62. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/flags_cache.py +274 -0
  63. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil +89 -0
  64. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil_logging.py +69 -0
  65. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds.py +262 -0
  66. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds_test.py +172 -0
  67. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds.py +1506 -0
  68. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds_test.py +1904 -0
  69. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds.py +91 -0
  70. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds_test.py +56 -0
  71. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds.py +106 -0
  72. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds_test.py +59 -0
  73. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata.py +96 -0
  74. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_lib.py +357 -0
  75. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_test.py +84 -0
  76. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/mock_api.py +420 -0
  77. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/mock_metadata.py +58 -0
  78. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds.py +824 -0
  79. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds_test.py +307 -0
  80. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds.py +178 -0
  81. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds_test.py +133 -0
  82. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds.py +181 -0
  83. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds_test.py +196 -0
  84. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/path_initializer.py +38 -0
  85. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds.py +173 -0
  86. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds_test.py +111 -0
  87. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes.py +61 -0
  88. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes_test.py +50 -0
  89. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds.py +276 -0
  90. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds_test.py +260 -0
  91. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys.py +266 -0
  92. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys_test.py +128 -0
  93. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/table_formatter.py +563 -0
  94. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool.py +188 -0
  95. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool_test.py +88 -0
  96. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils.py +208 -0
  97. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils_test.py +193 -0
  98. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version.py +17 -0
  99. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker.py +246 -0
  100. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker_test.py +271 -0
  101. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds.py +151 -0
  102. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds_test.py +60 -0
  103. data/packages/gcutil-1.7.1/lib/httplib2/LICENSE +21 -0
  104. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/__init__.py +1630 -0
  105. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/cacerts.txt +714 -0
  106. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/iri2uri.py +110 -0
  107. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/socks.py +438 -0
  108. data/packages/gcutil-1.7.1/lib/iso8601/LICENSE +20 -0
  109. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/__init__.py +1 -0
  110. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/iso8601.py +102 -0
  111. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/test_iso8601.py +111 -0
  112. data/packages/gcutil-1.7.1/lib/python_gflags/AUTHORS +2 -0
  113. data/packages/gcutil-1.7.1/lib/python_gflags/LICENSE +28 -0
  114. data/packages/gcutil-1.7.1/lib/python_gflags/gflags.py +2862 -0
  115. data/packages/gcutil-1.7.1/lib/python_gflags/gflags2man.py +544 -0
  116. data/packages/gcutil-1.7.1/lib/python_gflags/gflags_validators.py +187 -0
  117. metadata +118 -5
  118. metadata.gz.sig +0 -0
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/python
2
+ #
3
+ # Copyright 2012 Google Inc. All Rights Reserved.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ """Unit tests for the metadata package."""
18
+
19
+ from __future__ import with_statement
20
+
21
+
22
+
23
+ import path_initializer
24
+ path_initializer.InitializeSysPath()
25
+
26
+ import copy
27
+ import tempfile
28
+
29
+ from google.apputils import app
30
+ import gflags as flags
31
+ import unittest
32
+
33
+ from gcutil import metadata
34
+
35
+
36
+ FLAGS = flags.FLAGS
37
+
38
+
39
+ class MetadataTest(unittest.TestCase):
40
+
41
+ def testGatherMetadata(self):
42
+ flag_values = copy.deepcopy(FLAGS)
43
+ metadata_flags_processor = metadata.MetadataFlagsProcessor(flag_values)
44
+
45
+ with tempfile.NamedTemporaryFile() as metadata_file:
46
+ metadata_file.write('metadata file content')
47
+ metadata_file.flush()
48
+
49
+ flag_values.metadata = ['bar:baz']
50
+ flag_values.metadata_from_file = ['bar_file:%s' % metadata_file.name]
51
+
52
+ metadata_entries = metadata_flags_processor.GatherMetadata()
53
+
54
+ self.assertEqual(len(metadata_entries), 2)
55
+ self.assertEqual(metadata_entries[0]['key'], 'bar')
56
+ self.assertEqual(metadata_entries[0]['value'], 'baz')
57
+ self.assertEqual(metadata_entries[1]['key'], 'bar_file')
58
+ self.assertEqual(metadata_entries[1]['value'],
59
+ 'metadata file content')
60
+
61
+ def testGatherMetadataWithDuplicateKeys(self):
62
+ flag_values = copy.deepcopy(FLAGS)
63
+ metadata_flags_processor = metadata.MetadataFlagsProcessor(flag_values)
64
+
65
+ flag_values.metadata = ['bar:baz', 'bar:foo']
66
+ self.assertRaises(app.UsageError, metadata_flags_processor.GatherMetadata)
67
+
68
+ flag_values.metadata = ['bar:baz', 'bar:foo', 'foo:baz', 'foobar:val']
69
+ self.assertRaises(app.UsageError, metadata_flags_processor.GatherMetadata)
70
+
71
+ flag_values.metadata = ['foo:foo', 'bar:baz', 'bar:foo', 'foo:baz',
72
+ 'foobar:val']
73
+ self.assertRaises(app.UsageError, metadata_flags_processor.GatherMetadata)
74
+
75
+ with tempfile.NamedTemporaryFile() as metadata_file:
76
+ metadata_file.write('metadata file content')
77
+ metadata_file.flush()
78
+ flag_values.metadata = ['bar:baz']
79
+ flag_values.metadata_from_file = ['bar:%s' % metadata_file.name]
80
+ self.assertRaises(app.UsageError, metadata_flags_processor.GatherMetadata)
81
+
82
+
83
+ if __name__ == '__main__':
84
+ unittest.main()
@@ -0,0 +1,420 @@
1
+ # Copyright 2012 Google Inc. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Mock Google Compute Engine API used for unit tests."""
16
+
17
+
18
+
19
+
20
+
21
+ import inspect
22
+
23
+
24
+ class CommandExecutor(object):
25
+ """An object to represent an apiclient endpoint with a fixed response."""
26
+
27
+ def __init__(self, response):
28
+ """Create a new CommandExecutor to return response for each API call."""
29
+ self._response = response
30
+
31
+ def __call__(self, **unused_kw):
32
+ """Handle calling this object (part 1 of making an apiclient call)."""
33
+ self._parameters = unused_kw
34
+ return self
35
+
36
+ def execute(self):
37
+ """Return the stored results for this API call (part 2 of apiclient)."""
38
+ return self._response
39
+
40
+
41
+ class MockRequest(object):
42
+ """Mock request type for use with the MockApi class."""
43
+
44
+ def __init__(self, payload, method_name=None):
45
+ self.request_payload = payload
46
+ # For now we return the request as a response.
47
+ self.result_payload = payload
48
+ self.method_name = method_name
49
+
50
+ def execute(self, http=None): # pylint: disable-msg=W0613
51
+ return self.result_payload
52
+
53
+
54
+ class MockApiBase(object):
55
+ """Base class for all mock APIs."""
56
+
57
+ def __init__(self):
58
+ self.requests = []
59
+
60
+ def RegisterRequest(self, request_data, **kwargs):
61
+ if kwargs:
62
+ request_data = dict(request_data.items() + kwargs.items())
63
+ request = MockRequest(request_data, inspect.stack()[1][3])
64
+ self.requests.append(request)
65
+ return request
66
+
67
+
68
+ class MockDisksApi(MockApiBase):
69
+ """Mock return result of the MockApi.disks() method."""
70
+
71
+ def get(self, project='wrong_project', disk='wrong_disk', **kwargs):
72
+ return self.RegisterRequest({'project': project, 'disk': disk}, **kwargs)
73
+
74
+ def insert(self, project='wrong_project', body='wrong_disk_resource',
75
+ sourceImage='wrong_source_image', **kwargs):
76
+ return self.RegisterRequest({'project': project, 'body': body,
77
+ 'sourceImage': sourceImage}, **kwargs)
78
+
79
+ def delete(self, project='wrong_project', disk='wrong_disk', **kwargs):
80
+ return self.RegisterRequest({'project': project, 'disk': disk}, **kwargs)
81
+
82
+ def list(self, project='wrong_project', zone='wrong_zone', **kwargs):
83
+ return self.RegisterRequest({'project': project, 'zone': zone}, **kwargs)
84
+
85
+
86
+ class MockFirewallsApi(MockApiBase):
87
+ """Mock return result of the MockApi.firewalls() method."""
88
+
89
+ def get(self, project='wrong_project', firewall='wrong_firewall'):
90
+ return self.RegisterRequest({'project': project, 'firewall': firewall})
91
+
92
+ def insert(self, project='wrong_project', body='wrong_firewall_resource'):
93
+ return self.RegisterRequest({'project': project, 'body': body})
94
+
95
+ def delete(self, project='wrong_project', firewall='wrong_firewall'):
96
+ return self.RegisterRequest({'project': project, 'firewall': firewall})
97
+
98
+ def list(self, project='wrong_project'):
99
+ return self.RegisterRequest({'project': project})
100
+
101
+
102
+ class MockBackendGroupsApi(MockApiBase):
103
+ """Mock return result of the MockApi.backendGroups() method."""
104
+
105
+ def get(self, project='wrong_project', backendGroup='wrong_backend_group',
106
+ **kwargs):
107
+ return self.RegisterRequest({'project': project,
108
+ 'backendGroup': backendGroup}, **kwargs)
109
+
110
+ def insert(self, project='wrong_project',
111
+ body='wrong_backend_group_resource', **kwargs):
112
+ return self.RegisterRequest({'project': project, 'body': body}, **kwargs)
113
+
114
+ def delete(self, project='wrong_project', backendGroup='wrong_backend_group',
115
+ **kwargs):
116
+ return self.RegisterRequest({'project': project,
117
+ 'backendGroup': backendGroup}, **kwargs)
118
+
119
+ def list(self, project='wrong_project', **kwargs):
120
+ return self.RegisterRequest({'project': project}, **kwargs)
121
+
122
+
123
+ class MockPublicEndpointsApi(MockApiBase):
124
+ """Mock return result of the MockApi.publicEndpoints() method."""
125
+
126
+ def get(self, project='wrong_project',
127
+ publicEndpoint='wrong_public_endpoint'):
128
+ return self.RegisterRequest({'project': project,
129
+ 'publicEndpoint': publicEndpoint})
130
+
131
+ def insert(self, project='wrong_project',
132
+ body='wrong_public_endpoint_resource'):
133
+ return self.RegisterRequest({'project': project, 'body': body})
134
+
135
+ def delete(self, project='wrong_project',
136
+ publicEndpoint='wrong_public_endpoint'):
137
+ return self.RegisterRequest({'project': project,
138
+ 'publicEndpoint': publicEndpoint})
139
+
140
+ def list(self, project='wrong_project'):
141
+ return self.RegisterRequest({'project': project})
142
+
143
+
144
+ class MockNetworksApi(MockApiBase):
145
+ """Mock return result of the MockApi.networks() method."""
146
+
147
+ def get(self, project='wrong_project', network='wrong_network'):
148
+ return self.RegisterRequest({'project': project, 'network': network})
149
+
150
+ def insert(self, project='wrong_project', body='wrong_network_resource'):
151
+ return self.RegisterRequest({'project': project, 'body': body})
152
+
153
+ def delete(self, project='wrong_project', network='wrong_network'):
154
+ return self.RegisterRequest({'project': project, 'network': network})
155
+
156
+ def list(self, project='wrong_project'):
157
+ return self.RegisterRequest({'project': project})
158
+
159
+
160
+ class MockGlobalOperationsApi(MockApiBase):
161
+ """Mock return result of the MockApi.globalOperations() method."""
162
+
163
+ def get(self, project='wrong_project', operation='wrong_operation', **kwargs):
164
+ return self.RegisterRequest({'project': project, 'operation': operation},
165
+ **kwargs)
166
+
167
+ def delete(self, project='wrong_project', operation='wrong_operation'):
168
+ return self.RegisterRequest({'project': project, 'operation': operation})
169
+
170
+ def list(self, project='wrong_project'):
171
+ return self.RegisterRequest({'project': project})
172
+
173
+
174
+ class MockZoneOperationsApi(MockApiBase):
175
+ """Mock return result of the MockApi.zoneOperations() method."""
176
+
177
+ def get(self, project='wrong_project', operation='wrong_operation',
178
+ zone='wrong_zone'):
179
+ return self.RegisterRequest({'project': project,
180
+ 'operation': operation,
181
+ 'zone': zone})
182
+
183
+ def delete(self, project='wrong_project', operation='wrong_operation',
184
+ zone='wrong_zone'):
185
+ return self.RegisterRequest({'project': project,
186
+ 'operation': operation,
187
+ 'zone': zone})
188
+
189
+ def list(self, project='wrong_project', zone='wrong_zone'):
190
+ return self.RegisterRequest({'project': project, 'zone': zone})
191
+
192
+
193
+ class MockImagesApi(MockApiBase):
194
+ """Mock return result of the MockApi.images() method."""
195
+
196
+ def get(self, project='wrong_project', image='wrong_image'):
197
+ return self.RegisterRequest({'project': project, 'image': image})
198
+
199
+ def insert(self, project='wrong_project', body='wrong_image_resource'):
200
+ return self.RegisterRequest({'project': project, 'body': body})
201
+
202
+ def delete(self, project='wrong_project', image='wrong_image'):
203
+ return self.RegisterRequest({'project': project, 'image': image})
204
+
205
+ def list(self, project='wrong_project', **unused_kwargs):
206
+ return self.RegisterRequest({'project': project})
207
+
208
+ def deprecate(self, project='wrong_project', image='wrong_image',
209
+ body='wrong_deprecation_resource'):
210
+ return self.RegisterRequest({'project': project, 'image': image,
211
+ 'body': body})
212
+
213
+
214
+ class MockInstancesApi(MockApiBase):
215
+ """Mock return result of the MockApi.instances() method."""
216
+
217
+ def get(self, project='wrong_project', instance='wrong_instance', **kwargs):
218
+ return self.RegisterRequest({'project': project, 'instance': instance},
219
+ **kwargs)
220
+
221
+ def insert(self, project='wrong_project', body='wrong_instance_resource',
222
+ **kwargs):
223
+ return self.RegisterRequest({'project': project, 'body': body}, **kwargs)
224
+
225
+ def delete(self, project='wrong_project', instance='wrong_instance',
226
+ **kwargs):
227
+ return self.RegisterRequest({'project': project, 'instance': instance},
228
+ **kwargs)
229
+
230
+ def list(self, project='wrong_project', zone='wrong_zone', **unused_kwargs):
231
+ return self.RegisterRequest({'project': project, 'zone': zone})
232
+
233
+ def addAccessConfig(self, project='wrong_project', instance='wrong_instance',
234
+ network_interface='wrong_network_interface',
235
+ body='wrong_instance_resource', **kwargs):
236
+ return self.RegisterRequest({'project': project, 'instance': instance,
237
+ 'network_interface': network_interface,
238
+ 'body': body}, **kwargs)
239
+
240
+ def deleteAccessConfig(self, project='wrong_project',
241
+ instance='wrong_instance',
242
+ network_interface='wrong_network_interface',
243
+ access_config='wrong_access_config',
244
+ **kwargs):
245
+ return self.RegisterRequest({'project': project, 'instance': instance,
246
+ 'network_interface': network_interface,
247
+ 'access_config': access_config}, **kwargs)
248
+
249
+ def setMetadata(self, project='wrong_project', instance='wrong_instance',
250
+ body='wrong_metadata', zone='wrong_zone'):
251
+ return self.RegisterRequest({'project': project, 'instance': instance,
252
+ 'body': body, 'zone': zone})
253
+
254
+ def setTags(self, project='wrong_project', instance='wrong_instance',
255
+ body='wrong_tags', zone='wrong_zone'):
256
+ return self.RegisterRequest({'project': project, 'instance': instance,
257
+ 'body': body, 'zone': zone})
258
+
259
+
260
+ class MockKernelsApi(MockApiBase):
261
+ """Mock return result of the MockApi.kernels() method."""
262
+
263
+ def get(self, project='wrong_project', kernel='wrong_kernel'):
264
+ return self.RegisterRequest({'project': project, 'kernel': kernel})
265
+
266
+ def list(self, project='wrong_project'):
267
+ return self.RegisterRequest({'project': project})
268
+
269
+
270
+ class MockMachineSpecsApi(MockApiBase):
271
+ """Mock return result of the MockApi.machineSpecs() method."""
272
+
273
+ def get(self, machineSpec='wrong_machine_type'):
274
+ return self.RegisterRequest({'machineSpec': machineSpec})
275
+
276
+ def list(self):
277
+ return self.RegisterRequest('empty_result')
278
+
279
+
280
+ class MockMachineTypesApi(MockApiBase):
281
+ """Mock return result of the MockApi.machineTypes() method."""
282
+
283
+ def get(self, machineType='wrong_machine_type', **unused_kwargs):
284
+ return self.RegisterRequest({'machineType': machineType})
285
+
286
+ def list(self, **unused_kwargs):
287
+ return self.RegisterRequest('empty_result')
288
+
289
+
290
+ class MockProjectsApi(MockApiBase):
291
+ """Mock return result of the MockApi.projects() method."""
292
+
293
+ def get(self, project='wrong_project'):
294
+ return self.RegisterRequest({'project': project})
295
+
296
+ def setCommonInstanceMetadata(self, project='wrong_project', body=None):
297
+ return self.RegisterRequest({'project': project,
298
+ 'commonInstanceMetadata': body})
299
+
300
+
301
+ class MockSnapshotsApi(MockApiBase):
302
+ """Mock return result of the MockApi.snapshots() method."""
303
+
304
+ def get(self, project='wrong_project', snapshot='wrong_snapshot', **kwargs):
305
+ return self.RegisterRequest({'project': project, 'snapshot': snapshot},
306
+ **kwargs)
307
+
308
+ def insert(self, project='wrong_project', body='wrong_snapshot_resource',
309
+ **kwargs):
310
+ return self.RegisterRequest({'project': project, 'body': body}, **kwargs)
311
+
312
+ def delete(self, project='wrong_project', snapshot='wrong_snapshot',
313
+ **kwargs):
314
+ return self.RegisterRequest({'project': project, 'snapshot': snapshot},
315
+ **kwargs)
316
+
317
+ def list(self, project='wrong_project', **kwargs):
318
+ return self.RegisterRequest({'project': project}, **kwargs)
319
+
320
+
321
+ class MockZonesApi(MockApiBase):
322
+ """Mock return result of the MockApi.zones() method."""
323
+
324
+ def get(self, zone='wrong_zone', **unused_kwargs):
325
+ return self.RegisterRequest({'zone': zone})
326
+
327
+ def list(self, **unused_kwargs):
328
+ return self.RegisterRequest('empty_result')
329
+
330
+
331
+ class MockApi(object):
332
+ """Mock of the Google Compute Engine API returned by the discovery client."""
333
+
334
+ def disks(self):
335
+ return MockDisksApi()
336
+
337
+ def firewalls(self):
338
+ return MockFirewallsApi()
339
+
340
+ def backendGroups(self):
341
+ return MockBackendGroupsApi()
342
+
343
+ def publicEndpoints(self):
344
+ return MockPublicEndpointsApi()
345
+
346
+ def networks(self):
347
+ return MockNetworksApi()
348
+
349
+ def images(self):
350
+ return MockImagesApi()
351
+
352
+ def instances(self):
353
+ return MockInstancesApi()
354
+
355
+ def kernels(self):
356
+ return MockKernelsApi()
357
+
358
+ def machineSpecs(self):
359
+ return MockMachineSpecsApi()
360
+
361
+ def machineTypes(self):
362
+ return MockMachineTypesApi()
363
+
364
+ def projects(self):
365
+ return MockProjectsApi()
366
+
367
+ def operations(self):
368
+ return MockGlobalOperationsApi()
369
+
370
+ def zoneOperations(self):
371
+ return MockZoneOperationsApi()
372
+
373
+ def globalOperations(self):
374
+ return MockGlobalOperationsApi()
375
+
376
+ def snapshots(self):
377
+ return MockSnapshotsApi()
378
+
379
+ def zones(self):
380
+ return MockZonesApi()
381
+
382
+
383
+ class MockOutput(object):
384
+ """Mock class used for capturing standard output in tests."""
385
+
386
+ def __init__(self):
387
+ self._capture_text = ''
388
+
389
+ # Purposefully name this 'write' to mock an output stream
390
+ # pylint: disable-msg=C6409
391
+ def write(self, text):
392
+ self._capture_text += text
393
+
394
+ # Purposefully name this 'flush' to mock an output stream
395
+ # pylint: disable-msg=C6409
396
+ def flush(self):
397
+ pass
398
+
399
+ def GetCapturedText(self):
400
+ return self._capture_text
401
+
402
+
403
+ class MockInput(object):
404
+ """Mock class for standard input in tests."""
405
+
406
+ def __init__(self, input_string):
407
+ self._input_string = input_string
408
+
409
+ # Purposefully name this 'readline' to mock an input stream
410
+ # pylint: disable-msg=C6409
411
+ def readline(self):
412
+ return self._input_string
413
+
414
+
415
+ class MockCredential(object):
416
+ """A mock credential that does nothing."""
417
+
418
+ def authorize(self, http):
419
+ return http
420
+