From ca6f08defd6fc490dc40f87a1766f3e3b6c80795 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 27 Feb 2023 20:11:03 +0000 Subject: [PATCH 01/20] feat: add stream methods --- .../src/main/java/com/google/api/gax/paging/Page.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java b/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java index abacde970c..9ac1ec7f0d 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java @@ -29,6 +29,9 @@ */ package com.google.api.gax.paging; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + /** * A Page object wraps an API list method response. * @@ -60,4 +63,12 @@ public interface Page { /** Returns an iterable over the elements in this page. */ Iterable getValues(); + + default Stream streamAll() { + return StreamSupport.stream(iterateAll().spliterator(), false); + } + + default Stream streamValues() { + return StreamSupport.stream(getValues().spliterator(), false); + } } From 3a08ea9b4e453d6f1f38b236105f67519fd7871d Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 27 Feb 2023 20:58:32 +0000 Subject: [PATCH 02/20] add clirr ignore rule --- gax-java/gax/clirr-ignored-differences.xml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 gax-java/gax/clirr-ignored-differences.xml diff --git a/gax-java/gax/clirr-ignored-differences.xml b/gax-java/gax/clirr-ignored-differences.xml new file mode 100644 index 0000000000..63eda925e9 --- /dev/null +++ b/gax-java/gax/clirr-ignored-differences.xml @@ -0,0 +1,9 @@ + + + + + 7012 + com/google/api/gax/paging/Page + * stream*(*) + + From 00e847ea77a6e66869d174e0dcc5b0a5de062f3d Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 27 Feb 2023 22:27:04 +0000 Subject: [PATCH 03/20] add comments for stream methods --- .../gax/src/main/java/com/google/api/gax/paging/Page.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java b/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java index 9ac1ec7f0d..439c3d16c0 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java @@ -55,7 +55,7 @@ public interface Page { Page getNextPage(); /** - * Returns an iterable that traverses all of the elements of the underlying data source. The data + * Returns an iterable that traverses all the elements of the underlying data source. The data * is fetched lazily page by page, where each page may contain multiple elements. A new page is * fetched whenever the elements of any particular page are exhausted. */ @@ -64,10 +64,16 @@ public interface Page { /** Returns an iterable over the elements in this page. */ Iterable getValues(); + /** + * Returns a stream that traverses all the elements of the underlying data source. The data + * is fetched lazily page by page, where each page may contain multiple elements. A new page is + * fetched whenever the elements of any particular page are exhausted. + */ default Stream streamAll() { return StreamSupport.stream(iterateAll().spliterator(), false); } + /** Returns a stream over the elements in this page. */ default Stream streamValues() { return StreamSupport.stream(getValues().spliterator(), false); } From 9688e3d9a2458e9d3ce002ed3b1ab79f3be90580 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 27 Feb 2023 22:31:34 +0000 Subject: [PATCH 04/20] fix format --- .../gax/src/main/java/com/google/api/gax/paging/Page.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java b/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java index 439c3d16c0..de1cbc0ab9 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/paging/Page.java @@ -55,8 +55,8 @@ public interface Page { Page getNextPage(); /** - * Returns an iterable that traverses all the elements of the underlying data source. The data - * is fetched lazily page by page, where each page may contain multiple elements. A new page is + * Returns an iterable that traverses all the elements of the underlying data source. The data is + * fetched lazily page by page, where each page may contain multiple elements. A new page is * fetched whenever the elements of any particular page are exhausted. */ Iterable iterateAll(); @@ -65,8 +65,8 @@ public interface Page { Iterable getValues(); /** - * Returns a stream that traverses all the elements of the underlying data source. The data - * is fetched lazily page by page, where each page may contain multiple elements. A new page is + * Returns a stream that traverses all the elements of the underlying data source. The data is + * fetched lazily page by page, where each page may contain multiple elements. A new page is * fetched whenever the elements of any particular page are exhausted. */ default Stream streamAll() { From 647d333ebeb53af5daa17d251425a667bab56254 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 27 Feb 2023 23:45:33 +0000 Subject: [PATCH 05/20] add tests for stream methods --- .../com/google/api/gax/rpc/PagingTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java b/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java index e1655b6bf7..f6b45cbf26 100644 --- a/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java +++ b/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java @@ -120,10 +120,12 @@ public void pagedByPage() { .getPage(); Truth.assertThat(page.getValues()).containsExactly(0, 1, 2).inOrder(); + Truth.assertThat(page.streamValues().count()).isEqualTo(3); Truth.assertThat(page.hasNextPage()).isTrue(); page = page.getNextPage(); Truth.assertThat(page.getValues()).containsExactly(3, 4).inOrder(); + Truth.assertThat(page.streamValues().count()).isEqualTo(2); Truth.assertThat(page.hasNextPage()).isTrue(); page = page.getNextPage(); @@ -133,6 +135,25 @@ public void pagedByPage() { Truth.assertThat(requestCapture.getAllValues()).containsExactly(0, 2, 4).inOrder(); } + @Test + public void streamByPage() { + ArgumentCaptor requestCapture = ArgumentCaptor.forClass(Integer.class); + Mockito.when(callIntList.futureCall(requestCapture.capture(), Mockito.any())) + .thenReturn(ApiFutures.immediateFuture(Arrays.asList(0, 1, 2))) + .thenReturn(ApiFutures.immediateFuture(Arrays.asList(3, 4))) + .thenReturn(ApiFutures.immediateFuture(Collections.emptyList())); + + Page page = + FakeCallableFactory.createPagedCallable( + callIntList, + PagedCallSettings.newBuilder(new ListIntegersPagedResponseFactory()).build(), + clientContext) + .call(0) + .getPage(); + + Truth.assertThat(page.streamAll().count()).isEqualTo(5); + } + @Test public void pagedByFixedSizeCollection() { ArgumentCaptor requestCapture = ArgumentCaptor.forClass(Integer.class); From 206c46f89fdef785badc28fb08c4a4c96d37c44d Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Tue, 28 Feb 2023 14:53:59 +0000 Subject: [PATCH 06/20] modify tests --- .../com/google/api/gax/rpc/PagingTest.java | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java b/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java index f6b45cbf26..edaa9a7147 100644 --- a/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java +++ b/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java @@ -120,12 +120,10 @@ public void pagedByPage() { .getPage(); Truth.assertThat(page.getValues()).containsExactly(0, 1, 2).inOrder(); - Truth.assertThat(page.streamValues().count()).isEqualTo(3); Truth.assertThat(page.hasNextPage()).isTrue(); page = page.getNextPage(); Truth.assertThat(page.getValues()).containsExactly(3, 4).inOrder(); - Truth.assertThat(page.streamValues().count()).isEqualTo(2); Truth.assertThat(page.hasNextPage()).isTrue(); page = page.getNextPage(); @@ -136,7 +134,36 @@ public void pagedByPage() { } @Test - public void streamByPage() { + public void streamedByPage() { + ArgumentCaptor requestCapture = ArgumentCaptor.forClass(Integer.class); + Mockito.when(callIntList.futureCall(requestCapture.capture(), Mockito.any())) + .thenReturn(ApiFutures.immediateFuture(Arrays.asList(0, 1, 2))) + .thenReturn(ApiFutures.immediateFuture(Arrays.asList(3, 4))) + .thenReturn(ApiFutures.immediateFuture(Collections.emptyList())); + + Page page = + FakeCallableFactory.createPagedCallable( + callIntList, + PagedCallSettings.newBuilder(new ListIntegersPagedResponseFactory()).build(), + clientContext) + .call(0) + .getPage(); + + Truth.assertThat(page.streamValues().count()).isEqualTo(3); + Truth.assertThat(page.hasNextPage()).isTrue(); + + page = page.getNextPage(); + Truth.assertThat(page.streamValues().count()).isEqualTo(2); + Truth.assertThat(page.hasNextPage()).isTrue(); + + page = page.getNextPage(); + Truth.assertThat(page.streamValues().count()).isEqualTo(0); + Truth.assertThat(page.hasNextPage()).isFalse(); + Truth.assertThat(page.getNextPage()).isNull(); + } + + @Test + public void streamedAll() { ArgumentCaptor requestCapture = ArgumentCaptor.forClass(Integer.class); Mockito.when(callIntList.futureCall(requestCapture.capture(), Mockito.any())) .thenReturn(ApiFutures.immediateFuture(Arrays.asList(0, 1, 2))) From 6fcfa9b595b1a6f3c380366855d965c596d7c2f7 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Wed, 1 Mar 2023 23:10:11 +0000 Subject: [PATCH 07/20] add showcase tests --- .../showcase/v1beta1/IdentityClientTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java index acbfbedb75..248c2ce9b0 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java @@ -35,6 +35,7 @@ import java.util.Arrays; import java.util.List; import java.util.UUID; +import java.util.stream.Stream; import javax.annotation.Generated; import org.junit.After; import org.junit.AfterClass; @@ -442,6 +443,41 @@ public void listUsersTest() throws Exception { GaxGrpcProperties.getDefaultApiClientHeaderPattern())); } + @Test + public void listUsersTest2() throws Exception { + User responsesElement = User.newBuilder().build(); + ListUsersResponse expectedResponse = + ListUsersResponse.newBuilder() + .setNextPageToken("") + .addAllUsers(Arrays.asList(responsesElement)) + .build(); + mockIdentity.addResponse(expectedResponse); + + ListUsersRequest request = + ListUsersRequest.newBuilder() + .setPageSize(883849137) + .setPageToken("pageToken873572522") + .build(); + + ListUsersPagedResponse pagedListResponse = client.listUsers(request); + + Stream resources = pagedListResponse.getPage().streamAll(); + + Assert.assertEquals(1, resources.count()); + Assert.assertEquals(responsesElement, resources.findFirst().get()); + + List actualRequests = mockIdentity.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ListUsersRequest actualRequest = ((ListUsersRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getPageSize(), actualRequest.getPageSize()); + Assert.assertEquals(request.getPageToken(), actualRequest.getPageToken()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + @Test public void listUsersExceptionTest() throws Exception { StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); From 9fbfa933af62d9464f4e6af0e695d5349ef603aa Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Wed, 1 Mar 2023 23:30:50 +0000 Subject: [PATCH 08/20] Revert "add showcase tests" This reverts commit 6fcfa9b595b1a6f3c380366855d965c596d7c2f7. --- .../showcase/v1beta1/IdentityClientTest.java | 36 ------------------- 1 file changed, 36 deletions(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java index 248c2ce9b0..acbfbedb75 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/IdentityClientTest.java @@ -35,7 +35,6 @@ import java.util.Arrays; import java.util.List; import java.util.UUID; -import java.util.stream.Stream; import javax.annotation.Generated; import org.junit.After; import org.junit.AfterClass; @@ -443,41 +442,6 @@ public void listUsersTest() throws Exception { GaxGrpcProperties.getDefaultApiClientHeaderPattern())); } - @Test - public void listUsersTest2() throws Exception { - User responsesElement = User.newBuilder().build(); - ListUsersResponse expectedResponse = - ListUsersResponse.newBuilder() - .setNextPageToken("") - .addAllUsers(Arrays.asList(responsesElement)) - .build(); - mockIdentity.addResponse(expectedResponse); - - ListUsersRequest request = - ListUsersRequest.newBuilder() - .setPageSize(883849137) - .setPageToken("pageToken873572522") - .build(); - - ListUsersPagedResponse pagedListResponse = client.listUsers(request); - - Stream resources = pagedListResponse.getPage().streamAll(); - - Assert.assertEquals(1, resources.count()); - Assert.assertEquals(responsesElement, resources.findFirst().get()); - - List actualRequests = mockIdentity.getRequests(); - Assert.assertEquals(1, actualRequests.size()); - ListUsersRequest actualRequest = ((ListUsersRequest) actualRequests.get(0)); - - Assert.assertEquals(request.getPageSize(), actualRequest.getPageSize()); - Assert.assertEquals(request.getPageToken(), actualRequest.getPageToken()); - Assert.assertTrue( - channelProvider.isHeaderSent( - ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), - GaxGrpcProperties.getDefaultApiClientHeaderPattern())); - } - @Test public void listUsersExceptionTest() throws Exception { StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); From d21442050e3b364887a316c8ecc94867094dd105 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Sun, 5 Mar 2023 19:24:28 +0000 Subject: [PATCH 09/20] add a integration test for stream methods --- .../google/showcase/v1beta1/it/ITStreams.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java new file mode 100644 index 0000000000..4c1abcf408 --- /dev/null +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -0,0 +1,76 @@ +package com.google.showcase.v1beta1.it; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import com.google.api.client.http.javanet.NetHttpTransport; +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.paging.Page; +import com.google.showcase.v1beta1.IdentityClient; +import com.google.showcase.v1beta1.IdentityClient.ListUsersPagedResponse; +import com.google.showcase.v1beta1.IdentitySettings; +import com.google.showcase.v1beta1.ListUsersRequest; +import com.google.showcase.v1beta1.User; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.util.Random; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class ITStreams { + private IdentityClient client; + + @Before + public void initClient() throws GeneralSecurityException, IOException { + IdentitySettings identitySettings = + IdentitySettings.newBuilder() + .setCredentialsProvider(NoCredentialsProvider.create()) + .setTransportChannelProvider( + IdentitySettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport( + new NetHttpTransport.Builder().doNotValidateCertificate().build()) + .setEndpoint("http://localhost:7469") + .build()) + .build(); + client = IdentityClient.create(identitySettings); + } + + @After + public void destroyClient() { + client.close(); + } + + @Test + public void verifyStreamAll() { + create100Users(); + ListUsersRequest request = ListUsersRequest.newBuilder() + .setPageSize(50) + .setPageToken("PageToken123") + .build(); + ListUsersPagedResponse response = client.listUsers(request); + assertEquals(100, response.getPage().streamAll().count()); + } + + @Test + public void verifyStreamValues() { + create100Users(); + ListUsersRequest request = ListUsersRequest.newBuilder() + .setPageSize(50) + .setPageToken("PageToken123") + .build(); + Page pages = client.listUsers(request).getPage(); + assertEquals(50, pages.streamValues().count()); + assertEquals(50, pages.getNextPage().streamValues().count()); + assertFalse(pages.hasNextPage()); + } + + private void create100Users() { + Random random = new Random(); + for (int i = 0; i < 100; i++) { + String randomName = String.format("random%s", random.nextInt()); + String randomEmail = String.format("%s@google.com", randomName); + client.createUser(randomName, randomEmail); + } + } +} From 7b257d1a125ba0b5bc6bbf05253b54995f0bc83d Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Sun, 5 Mar 2023 19:25:30 +0000 Subject: [PATCH 10/20] add copyright --- .../google/showcase/v1beta1/it/ITStreams.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index 4c1abcf408..e9933baa06 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.google.showcase.v1beta1.it; import static org.junit.Assert.assertEquals; From 9694bb1d1492adc6aa82966f0981c05b090f8aa3 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Sun, 5 Mar 2023 19:39:51 +0000 Subject: [PATCH 11/20] change client builder --- .../src/test/java/com/google/showcase/v1beta1/it/ITStreams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index e9933baa06..9858da0fdf 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -40,7 +40,7 @@ public class ITStreams { @Before public void initClient() throws GeneralSecurityException, IOException { IdentitySettings identitySettings = - IdentitySettings.newBuilder() + IdentitySettings.newHttpJsonBuilder() .setCredentialsProvider(NoCredentialsProvider.create()) .setTransportChannelProvider( IdentitySettings.defaultHttpJsonTransportProviderBuilder() From 82a9d7295826e6150b5f2394879fe9b0f75bcda4 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Sun, 5 Mar 2023 19:50:28 +0000 Subject: [PATCH 12/20] set page token --- .../test/java/com/google/showcase/v1beta1/it/ITStreams.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index 9858da0fdf..b87b82edc9 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -62,7 +62,7 @@ public void verifyStreamAll() { create100Users(); ListUsersRequest request = ListUsersRequest.newBuilder() .setPageSize(50) - .setPageToken("PageToken123") + .setPageToken("pageToken873572522") .build(); ListUsersPagedResponse response = client.listUsers(request); assertEquals(100, response.getPage().streamAll().count()); @@ -73,7 +73,7 @@ public void verifyStreamValues() { create100Users(); ListUsersRequest request = ListUsersRequest.newBuilder() .setPageSize(50) - .setPageToken("PageToken123") + .setPageToken("pageToken873572522") .build(); Page pages = client.listUsers(request).getPage(); assertEquals(50, pages.streamValues().count()); From a7d26fe46e8b385e3a7de9055902ab7eff49da00 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Sun, 5 Mar 2023 23:13:23 +0000 Subject: [PATCH 13/20] remove page token in stream all --- .../src/test/java/com/google/showcase/v1beta1/it/ITStreams.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index b87b82edc9..070a603305 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -62,7 +62,7 @@ public void verifyStreamAll() { create100Users(); ListUsersRequest request = ListUsersRequest.newBuilder() .setPageSize(50) - .setPageToken("pageToken873572522") + // .setPageToken("pageToken873572522") .build(); ListUsersPagedResponse response = client.listUsers(request); assertEquals(100, response.getPage().streamAll().count()); From 89128c1097ca5c06a716c04922dc38c3ef267cc0 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 6 Mar 2023 00:09:12 +0000 Subject: [PATCH 14/20] remove page token in stream values --- .../src/test/java/com/google/showcase/v1beta1/it/ITStreams.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index 070a603305..f01f27bfd4 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -62,7 +62,6 @@ public void verifyStreamAll() { create100Users(); ListUsersRequest request = ListUsersRequest.newBuilder() .setPageSize(50) - // .setPageToken("pageToken873572522") .build(); ListUsersPagedResponse response = client.listUsers(request); assertEquals(100, response.getPage().streamAll().count()); @@ -73,7 +72,6 @@ public void verifyStreamValues() { create100Users(); ListUsersRequest request = ListUsersRequest.newBuilder() .setPageSize(50) - .setPageToken("pageToken873572522") .build(); Page pages = client.listUsers(request).getPage(); assertEquals(50, pages.streamValues().count()); From 974712da2669e1172cd4c68081d033febbf8ea18 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 6 Mar 2023 00:32:52 +0000 Subject: [PATCH 15/20] modify paged request --- .../google/showcase/v1beta1/it/ITStreams.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index f01f27bfd4..ef990d30ed 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.gax.core.NoCredentialsProvider; @@ -70,13 +71,20 @@ public void verifyStreamAll() { @Test public void verifyStreamValues() { create100Users(); - ListUsersRequest request = ListUsersRequest.newBuilder() + ListUsersRequest firstRequest = ListUsersRequest.newBuilder() + .setPageSize(50) + .build(); + Page firstPage = client.listUsers(firstRequest).getPage(); + assertEquals(50, firstPage.streamValues().count()); + assertTrue(firstPage.hasNextPage()); + + ListUsersRequest secondRequest = ListUsersRequest.newBuilder() .setPageSize(50) + .setPageToken(firstPage.getNextPageToken()) .build(); - Page pages = client.listUsers(request).getPage(); - assertEquals(50, pages.streamValues().count()); - assertEquals(50, pages.getNextPage().streamValues().count()); - assertFalse(pages.hasNextPage()); + Page secondPage = client.listUsers(secondRequest).getPage(); + assertEquals(50, secondPage.streamValues().count()); + assertFalse(secondPage.hasNextPage()); } private void create100Users() { From 3da41eab7f063b5e794560aaf7a91ae1cfb7a8b6 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 6 Mar 2023 00:51:14 +0000 Subject: [PATCH 16/20] modify tests --- .../src/test/java/com/google/showcase/v1beta1/it/ITStreams.java | 1 - 1 file changed, 1 deletion(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index ef990d30ed..e8dc022ed4 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -84,7 +84,6 @@ public void verifyStreamValues() { .build(); Page secondPage = client.listUsers(secondRequest).getPage(); assertEquals(50, secondPage.streamValues().count()); - assertFalse(secondPage.hasNextPage()); } private void create100Users() { From 7682f22063be68620f2635b0bf2b97596123170d Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 6 Mar 2023 15:01:21 +0000 Subject: [PATCH 17/20] create users only once --- .../com/google/showcase/v1beta1/it/ITStreams.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java index e8dc022ed4..3b6b077b2e 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java @@ -51,16 +51,26 @@ public void initClient() throws GeneralSecurityException, IOException { .build()) .build(); client = IdentityClient.create(identitySettings); + create100Users(); } @After public void destroyClient() { + ListUsersRequest request = ListUsersRequest.newBuilder() + .setPageSize(100) + .build(); + // Delete all users before destroy client to + // avoid interference between tests. + client + .listUsers(request) + .getPage() + .streamAll() + .forEach(user -> client.deleteUser(user.getName())); client.close(); } @Test public void verifyStreamAll() { - create100Users(); ListUsersRequest request = ListUsersRequest.newBuilder() .setPageSize(50) .build(); @@ -70,7 +80,6 @@ public void verifyStreamAll() { @Test public void verifyStreamValues() { - create100Users(); ListUsersRequest firstRequest = ListUsersRequest.newBuilder() .setPageSize(50) .build(); @@ -84,6 +93,7 @@ public void verifyStreamValues() { .build(); Page secondPage = client.listUsers(secondRequest).getPage(); assertEquals(50, secondPage.streamValues().count()); + assertFalse(secondPage.hasNextPage()); } private void create100Users() { From 654fedbec887ca28f27940fdea9edd7c53f368f1 Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 6 Mar 2023 20:38:56 +0000 Subject: [PATCH 18/20] delete showcase it --- .../google/showcase/v1beta1/it/ITStreams.java | 107 ------------------ 1 file changed, 107 deletions(-) delete mode 100644 showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java deleted file mode 100644 index 3b6b077b2e..0000000000 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITStreams.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.showcase.v1beta1.it; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import com.google.api.client.http.javanet.NetHttpTransport; -import com.google.api.gax.core.NoCredentialsProvider; -import com.google.api.gax.paging.Page; -import com.google.showcase.v1beta1.IdentityClient; -import com.google.showcase.v1beta1.IdentityClient.ListUsersPagedResponse; -import com.google.showcase.v1beta1.IdentitySettings; -import com.google.showcase.v1beta1.ListUsersRequest; -import com.google.showcase.v1beta1.User; -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.util.Random; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class ITStreams { - private IdentityClient client; - - @Before - public void initClient() throws GeneralSecurityException, IOException { - IdentitySettings identitySettings = - IdentitySettings.newHttpJsonBuilder() - .setCredentialsProvider(NoCredentialsProvider.create()) - .setTransportChannelProvider( - IdentitySettings.defaultHttpJsonTransportProviderBuilder() - .setHttpTransport( - new NetHttpTransport.Builder().doNotValidateCertificate().build()) - .setEndpoint("http://localhost:7469") - .build()) - .build(); - client = IdentityClient.create(identitySettings); - create100Users(); - } - - @After - public void destroyClient() { - ListUsersRequest request = ListUsersRequest.newBuilder() - .setPageSize(100) - .build(); - // Delete all users before destroy client to - // avoid interference between tests. - client - .listUsers(request) - .getPage() - .streamAll() - .forEach(user -> client.deleteUser(user.getName())); - client.close(); - } - - @Test - public void verifyStreamAll() { - ListUsersRequest request = ListUsersRequest.newBuilder() - .setPageSize(50) - .build(); - ListUsersPagedResponse response = client.listUsers(request); - assertEquals(100, response.getPage().streamAll().count()); - } - - @Test - public void verifyStreamValues() { - ListUsersRequest firstRequest = ListUsersRequest.newBuilder() - .setPageSize(50) - .build(); - Page firstPage = client.listUsers(firstRequest).getPage(); - assertEquals(50, firstPage.streamValues().count()); - assertTrue(firstPage.hasNextPage()); - - ListUsersRequest secondRequest = ListUsersRequest.newBuilder() - .setPageSize(50) - .setPageToken(firstPage.getNextPageToken()) - .build(); - Page secondPage = client.listUsers(secondRequest).getPage(); - assertEquals(50, secondPage.streamValues().count()); - assertFalse(secondPage.hasNextPage()); - } - - private void create100Users() { - Random random = new Random(); - for (int i = 0; i < 100; i++) { - String randomName = String.format("random%s", random.nextInt()); - String randomEmail = String.format("%s@google.com", randomName); - client.createUser(randomName, randomEmail); - } - } -} From 069d9a5e28488248b71754a6830a012c40c8417d Mon Sep 17 00:00:00 2001 From: JoeWang1127 Date: Mon, 6 Mar 2023 21:06:11 +0000 Subject: [PATCH 19/20] add comments --- gax-java/gax/clirr-ignored-differences.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/gax-java/gax/clirr-ignored-differences.xml b/gax-java/gax/clirr-ignored-differences.xml index 63eda925e9..dcc0be350d 100644 --- a/gax-java/gax/clirr-ignored-differences.xml +++ b/gax-java/gax/clirr-ignored-differences.xml @@ -2,6 +2,7 @@ + 7012 com/google/api/gax/paging/Page * stream*(*) From f1330409159754059aca762ade74dfb87327cd7e Mon Sep 17 00:00:00 2001 From: Joe Wang Date: Tue, 11 Apr 2023 15:46:13 -0400 Subject: [PATCH 20/20] change unit test name --- .../gax/src/test/java/com/google/api/gax/rpc/PagingTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java b/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java index edaa9a7147..f7f02c0f74 100644 --- a/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java +++ b/gax-java/gax/src/test/java/com/google/api/gax/rpc/PagingTest.java @@ -134,7 +134,7 @@ public void pagedByPage() { } @Test - public void streamedByPage() { + public void streamValues_streamIsCorrectPerPage() { ArgumentCaptor requestCapture = ArgumentCaptor.forClass(Integer.class); Mockito.when(callIntList.futureCall(requestCapture.capture(), Mockito.any())) .thenReturn(ApiFutures.immediateFuture(Arrays.asList(0, 1, 2))) @@ -163,7 +163,7 @@ public void streamedByPage() { } @Test - public void streamedAll() { + public void streamAll_streamIsCorrectInAllPages() { ArgumentCaptor requestCapture = ArgumentCaptor.forClass(Integer.class); Mockito.when(callIntList.futureCall(requestCapture.capture(), Mockito.any())) .thenReturn(ApiFutures.immediateFuture(Arrays.asList(0, 1, 2)))