Skip to content

Commit 8259e5d

Browse files
committed
---
yaml --- r: 1717 b: refs/heads/master c: 1583e2c h: refs/heads/master i: 1715: cbd89cd
1 parent 930daef commit 8259e5d

11 files changed

Lines changed: 131 additions & 29 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 119ccdffd11d3b79ea1b677437baf99a66d47f25
2+
refs/heads/master: 1583e2c8b8763a003b5d0d16d27cf53a97410603
33
refs/heads/travis: e21ee7b88a5edc3f3d8c71f90c3fc32abf7e8dd6
44
refs/heads/gh-pages: d1b373c30c176edc08692348167bec3a244bb823
55
refs/heads/bigquery: 762fa5830e6c398c0396177e3e7fd243bd62cfc3

trunk/gcloud-java-core/src/main/java/com/google/gcloud/BaseWriteChannel.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.io.IOException;
2222
import java.io.Serializable;
2323
import java.nio.ByteBuffer;
24-
import java.nio.channels.ClosedChannelException;
2524
import java.util.Arrays;
2625
import java.util.Objects;
2726

@@ -115,9 +114,9 @@ private void flush() {
115114
}
116115
}
117116

118-
private void validateOpen() throws ClosedChannelException {
117+
private void validateOpen() throws IOException {
119118
if (!isOpen) {
120-
throw new ClosedChannelException();
119+
throw new IOException("stream is closed");
121120
}
122121
}
123122

trunk/gcloud-java-core/src/test/java/com/google/gcloud/BaseWriteChannelTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.io.IOException;
3333
import java.io.Serializable;
3434
import java.nio.ByteBuffer;
35-
import java.nio.channels.ClosedChannelException;
3635
import java.util.Arrays;
3736
import java.util.Random;
3837

@@ -103,7 +102,8 @@ public void testClose() throws IOException {
103102
@Test
104103
public void testValidateOpen() throws IOException {
105104
channel.close();
106-
thrown.expect(ClosedChannelException.class);
105+
thrown.expect(IOException.class);
106+
thrown.expectMessage("stream is closed");
107107
channel.write(ByteBuffer.allocate(42));
108108
}
109109

trunk/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/ResourceManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ public static ProjectListOption pageSize(int pageSize) {
162162
*/
163163
public static ProjectListOption fields(ProjectField... fields) {
164164
StringBuilder builder = new StringBuilder();
165-
builder.append("projects(").append(ProjectField.selector(fields)).append(")");
165+
builder.append("projects(").append(ProjectField.selector(fields)).append("),nextPageToken");
166166
return new ProjectListOption(ResourceManagerRpc.Option.FIELDS, builder.toString());
167167
}
168168
}

trunk/gcloud-java-resourcemanager/src/main/java/com/google/gcloud/resourcemanager/testing/LocalResourceManagerHelper.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -236,10 +236,18 @@ private static Map<String, Object> parseListOptions(String query) throws IOExcep
236236
String[] argEntry = arg.split("=");
237237
switch (argEntry[0]) {
238238
case "fields":
239-
// List fields are in the form "projects(field1, field2, ...)"
240-
options.put(
241-
"fields",
242-
argEntry[1].substring("projects(".length(), argEntry[1].length() - 1).split(","));
239+
// List fields are in the form "projects(field1, field2, ...),nextPageToken"
240+
String option = argEntry[1];
241+
int projectStart = option.indexOf("projects(");
242+
int projectEnd = option.indexOf(')');
243+
if (projectStart != -1 && projectEnd != -1
244+
&& projectEnd > projectStart + "projects(".length()) {
245+
String projectFields =
246+
option.substring(projectStart + "projects(".length(), projectEnd);
247+
options.put("projectFields", projectFields.split(","));
248+
option = option.replace(option.substring(projectStart, projectEnd), "");
249+
}
250+
options.put("listFields", option.split(","));
243251
break;
244252
case "filter":
245253
options.put("filter", argEntry[1].split(" "));
@@ -362,7 +370,7 @@ Response list(Map<String, Object> options) {
362370
if (filters != null && !isValidFilter(filters)) {
363371
return Error.INVALID_ARGUMENT.response("Could not parse the filter.");
364372
}
365-
String[] fields = (String[]) options.get("fields");
373+
String[] projectFields = (String[]) options.get("projectFields");
366374
int count = 0;
367375
String pageToken = (String) options.get("pageToken");
368376
Integer pageSize = (Integer) options.get("pageSize");
@@ -380,7 +388,7 @@ Response list(Map<String, Object> options) {
380388
if (includeProject) {
381389
count++;
382390
try {
383-
projectsSerialized.add(jsonFactory.toString(extractFields(p, fields)));
391+
projectsSerialized.add(jsonFactory.toString(extractFields(p, projectFields)));
384392
} catch (IOException e) {
385393
return Error.INTERNAL_ERROR.response(
386394
"Error when serializing project " + p.getProjectId());
@@ -391,7 +399,9 @@ Response list(Map<String, Object> options) {
391399
responseBody.append("{\"projects\": [");
392400
Joiner.on(",").appendTo(responseBody, projectsSerialized);
393401
responseBody.append(']');
394-
if (nextPageToken != null) {
402+
String[] listFields = (String[]) options.get("listFields");
403+
if (nextPageToken != null && (listFields == null
404+
|| ImmutableSet.copyOf(listFields).contains("nextPageToken"))) {
395405
responseBody.append(", \"nextPageToken\": \"");
396406
responseBody.append(nextPageToken);
397407
responseBody.append('"');

trunk/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/LocalResourceManagerHelperTest.java

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,8 @@ public void testListPaging() {
333333
@Test
334334
public void testListFieldOptions() {
335335
Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>();
336-
rpcOptions.put(ResourceManagerRpc.Option.FIELDS, "projects(projectId,name,labels)");
336+
rpcOptions.put(ResourceManagerRpc.Option.FIELDS,
337+
"projects(projectId,name,labels),nextPageToken");
337338
rpc.create(PROJECT_WITH_PARENT);
338339
Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects =
339340
rpc.list(rpcOptions);
@@ -349,6 +350,64 @@ public void testListFieldOptions() {
349350
assertNull(returnedProject.getCreateTime());
350351
}
351352

353+
@Test
354+
public void testListPageTokenFieldOptions() {
355+
Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>();
356+
rpcOptions.put(ResourceManagerRpc.Option.PAGE_SIZE, 1);
357+
rpcOptions.put(ResourceManagerRpc.Option.FIELDS, "nextPageToken,projects(projectId,name)");
358+
rpc.create(PARTIAL_PROJECT);
359+
rpc.create(COMPLETE_PROJECT);
360+
Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects =
361+
rpc.list(rpcOptions);
362+
assertNotNull(projects.x());
363+
Iterator<com.google.api.services.cloudresourcemanager.model.Project> iterator =
364+
projects.y().iterator();
365+
com.google.api.services.cloudresourcemanager.model.Project returnedProject = iterator.next();
366+
assertEquals(COMPLETE_PROJECT.getProjectId(), returnedProject.getProjectId());
367+
assertEquals(COMPLETE_PROJECT.getName(), returnedProject.getName());
368+
assertNull(returnedProject.getLabels());
369+
assertNull(returnedProject.getParent());
370+
assertNull(returnedProject.getProjectNumber());
371+
assertNull(returnedProject.getLifecycleState());
372+
assertNull(returnedProject.getCreateTime());
373+
assertFalse(iterator.hasNext());
374+
rpcOptions.put(ResourceManagerRpc.Option.PAGE_TOKEN, projects.x());
375+
projects = rpc.list(rpcOptions);
376+
iterator = projects.y().iterator();
377+
returnedProject = iterator.next();
378+
assertEquals(PARTIAL_PROJECT.getProjectId(), returnedProject.getProjectId());
379+
assertEquals(PARTIAL_PROJECT.getName(), returnedProject.getName());
380+
assertNull(returnedProject.getLabels());
381+
assertNull(returnedProject.getParent());
382+
assertNull(returnedProject.getProjectNumber());
383+
assertNull(returnedProject.getLifecycleState());
384+
assertNull(returnedProject.getCreateTime());
385+
assertNull(projects.x());
386+
}
387+
388+
@Test
389+
public void testListNoPageTokenFieldOptions() {
390+
Map<ResourceManagerRpc.Option, Object> rpcOptions = new HashMap<>();
391+
rpcOptions.put(ResourceManagerRpc.Option.PAGE_SIZE, 1);
392+
rpcOptions.put(ResourceManagerRpc.Option.FIELDS, "projects(projectId,name)");
393+
rpc.create(PARTIAL_PROJECT);
394+
rpc.create(COMPLETE_PROJECT);
395+
Tuple<String, Iterable<com.google.api.services.cloudresourcemanager.model.Project>> projects =
396+
rpc.list(rpcOptions);
397+
assertNull(projects.x());
398+
Iterator<com.google.api.services.cloudresourcemanager.model.Project> iterator =
399+
projects.y().iterator();
400+
com.google.api.services.cloudresourcemanager.model.Project returnedProject = iterator.next();
401+
assertEquals(COMPLETE_PROJECT.getProjectId(), returnedProject.getProjectId());
402+
assertEquals(COMPLETE_PROJECT.getName(), returnedProject.getName());
403+
assertNull(returnedProject.getLabels());
404+
assertNull(returnedProject.getParent());
405+
assertNull(returnedProject.getProjectNumber());
406+
assertNull(returnedProject.getLifecycleState());
407+
assertNull(returnedProject.getCreateTime());
408+
assertFalse(iterator.hasNext());
409+
}
410+
352411
@Test
353412
public void testListFilterOptions() {
354413
Map<ResourceManagerRpc.Option, Object> rpcFilterOptions = new HashMap<>();

trunk/gcloud-java-resourcemanager/src/test/java/com/google/gcloud/resourcemanager/ResourceManagerImplTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,38 @@ public void testListFieldOptions() {
213213
assertSame(RESOURCE_MANAGER, returnedProject.resourceManager());
214214
}
215215

216+
@Test
217+
public void testListPagingWithFieldOptions() {
218+
RESOURCE_MANAGER.create(PARTIAL_PROJECT);
219+
RESOURCE_MANAGER.create(COMPLETE_PROJECT);
220+
Page<Project> projects = RESOURCE_MANAGER.list(LIST_FIELDS, ProjectListOption.pageSize(1));
221+
assertNotNull(projects.nextPageCursor());
222+
Iterator<Project> iterator = projects.values().iterator();
223+
Project returnedProject = iterator.next();
224+
assertEquals(COMPLETE_PROJECT.projectId(), returnedProject.projectId());
225+
assertEquals(COMPLETE_PROJECT.name(), returnedProject.name());
226+
assertEquals(COMPLETE_PROJECT.labels(), returnedProject.labels());
227+
assertNull(returnedProject.parent());
228+
assertNull(returnedProject.projectNumber());
229+
assertNull(returnedProject.state());
230+
assertNull(returnedProject.createTimeMillis());
231+
assertSame(RESOURCE_MANAGER, returnedProject.resourceManager());
232+
assertFalse(iterator.hasNext());
233+
projects = projects.nextPage();
234+
iterator = projects.values().iterator();
235+
returnedProject = iterator.next();
236+
assertEquals(PARTIAL_PROJECT.projectId(), returnedProject.projectId());
237+
assertEquals(PARTIAL_PROJECT.name(), returnedProject.name());
238+
assertEquals(PARTIAL_PROJECT.labels(), returnedProject.labels());
239+
assertNull(returnedProject.parent());
240+
assertNull(returnedProject.projectNumber());
241+
assertNull(returnedProject.state());
242+
assertNull(returnedProject.createTimeMillis());
243+
assertSame(RESOURCE_MANAGER, returnedProject.resourceManager());
244+
assertFalse(iterator.hasNext());
245+
assertNull(projects.nextPageCursor());
246+
}
247+
216248
@Test
217249
public void testListFilterOptions() {
218250
ProjectInfo matchingProject = ProjectInfo.builder("matching-project")

trunk/gcloud-java-storage/src/main/java/com/google/gcloud/storage/BlobReadChannel.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.io.IOException;
3030
import java.io.Serializable;
3131
import java.nio.ByteBuffer;
32-
import java.nio.channels.ClosedChannelException;
3332
import java.util.Map;
3433
import java.util.Objects;
3534
import java.util.concurrent.Callable;
@@ -56,7 +55,7 @@ class BlobReadChannel implements ReadChannel {
5655
private byte[] buffer;
5756

5857
BlobReadChannel(StorageOptions serviceOptions, BlobId blob,
59-
Map<StorageRpc.Option, ?> requestOptions) {
58+
Map<StorageRpc.Option, ?> requestOptions) {
6059
this.serviceOptions = serviceOptions;
6160
this.blob = blob;
6261
this.requestOptions = requestOptions;
@@ -92,9 +91,9 @@ public void close() {
9291
}
9392
}
9493

95-
private void validateOpen() throws ClosedChannelException {
94+
private void validateOpen() throws IOException {
9695
if (!isOpen) {
97-
throw new ClosedChannelException();
96+
throw new IOException("stream is closed");
9897
}
9998
}
10099

trunk/gcloud-java-storage/src/main/java/com/google/gcloud/storage/Storage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ public static BucketListOption prefix(String prefix) {
655655
*/
656656
public static BucketListOption fields(BucketField... fields) {
657657
StringBuilder builder = new StringBuilder();
658-
builder.append("items(").append(BucketField.selector(fields)).append(")");
658+
builder.append("items(").append(BucketField.selector(fields)).append("),nextPageToken");
659659
return new BucketListOption(StorageRpc.Option.FIELDS, builder.toString());
660660
}
661661
}
@@ -708,7 +708,7 @@ public static BlobListOption recursive(boolean recursive) {
708708
*/
709709
public static BlobListOption fields(BlobField... fields) {
710710
StringBuilder builder = new StringBuilder();
711-
builder.append("items(").append(BlobField.selector(fields)).append(")");
711+
builder.append("items(").append(BlobField.selector(fields)).append("),nextPageToken");
712712
return new BlobListOption(StorageRpc.Option.FIELDS, builder.toString());
713713
}
714714
}

trunk/gcloud-java-storage/src/test/java/com/google/gcloud/storage/BlobReadChannelTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939

4040
import java.io.IOException;
4141
import java.nio.ByteBuffer;
42-
import java.nio.channels.ClosedChannelException;
4342
import java.util.Arrays;
4443
import java.util.Map;
4544
import java.util.Random;
@@ -157,15 +156,15 @@ public void testClose() {
157156
}
158157

159158
@Test
160-
public void testReadClosed() throws IOException {
159+
public void testReadClosed() {
161160
replay(storageRpcMock);
162161
reader = new BlobReadChannel(options, BLOB_ID, EMPTY_RPC_OPTIONS);
163162
reader.close();
164163
try {
165164
ByteBuffer readBuffer = ByteBuffer.allocate(DEFAULT_CHUNK_SIZE);
166165
reader.read(readBuffer);
167-
fail("Expected BlobReadChannel read to throw ClosedChannelException");
168-
} catch (ClosedChannelException ex) {
166+
fail("Expected BlobReadChannel read to throw IOException");
167+
} catch (IOException ex) {
169168
// expected
170169
}
171170
}

0 commit comments

Comments
 (0)