2525import com .google .cloud .bigquery .storage .v1beta2 .BigQueryReadClient ;
2626import com .google .cloud .bigquery .storage .v1beta2 .BigQueryReadGrpc .BigQueryReadImplBase ;
2727import com .google .cloud .bigquery .storage .v1beta2 .BigQueryReadSettings ;
28+ import com .google .cloud .bigquery .storage .v1beta2 .BigQueryWriteClient ;
29+ import com .google .cloud .bigquery .storage .v1beta2 .BigQueryWriteSettings ;
2830import com .google .cloud .bigquery .storage .v1beta2 .ReadRowsRequest ;
2931import com .google .cloud .bigquery .storage .v1beta2 .ReadSession ;
3032import com .google .cloud .bigquery .storage .v1beta2 .SplitReadStreamRequest ;
33+ import com .google .cloud .bigquery .storage .v1beta2 .WriteStream ;
3134import java .util .regex .Pattern ;
3235import org .junit .After ;
3336import org .junit .AfterClass ;
@@ -43,6 +46,9 @@ public class ResourceHeaderTest {
4346 private static final String TEST_TABLE_REFERENCE =
4447 "projects/project/datasets/dataset/tables/table" ;
4548
49+ private static final String WRITE_STREAM_NAME =
50+ "projects/project/datasets/dataset/tables/table/streams/stream" ;
51+
4652 private static final String TEST_STREAM_NAME = "streamName" ;
4753
4854 private static final String NAME = "resource-header-test:123" ;
@@ -52,6 +58,20 @@ public class ResourceHeaderTest {
5258 private static final Pattern READ_SESSION_NAME_PATTERN =
5359 Pattern .compile (
5460 ".*" + "read_session\\ .table=projects/project/datasets/dataset/tables/table" + ".*" );
61+
62+ private static final Pattern PARENT_PATTERN =
63+ Pattern .compile (".*" + "parent=projects/project/datasets/dataset/tables/table" + ".*" );
64+
65+ private static final Pattern NAME_PATTERN =
66+ Pattern .compile (
67+ ".*" + "name=projects/project/datasets/dataset/tables/table/streams/stream" + ".*" );
68+
69+ private static final Pattern WRITE_STREAM_PATTERN =
70+ Pattern .compile (
71+ ".*"
72+ + "write_stream=projects/project/datasets/dataset/tables/table/streams/stream"
73+ + ".*" );
74+
5575 private static final Pattern READ_STREAM_PATTERN =
5676 Pattern .compile (".*" + "read_stream=streamName" + ".*" );
5777 private static final Pattern STREAM_NAME_PATTERN =
@@ -64,7 +84,9 @@ public class ResourceHeaderTest {
6484 private static InProcessServer <?> server ;
6585
6686 private LocalChannelProvider channelProvider ;
87+ private LocalChannelProvider channelProvider2 ;
6788 private BigQueryReadClient client ;
89+ private BigQueryWriteClient writeClient ;
6890
6991 @ BeforeClass
7092 public static void setUpClass () throws Exception {
@@ -81,6 +103,12 @@ public void setUp() throws Exception {
81103 .setHeaderProvider (FixedHeaderProvider .create (TEST_HEADER_NAME , TEST_HEADER_VALUE ))
82104 .setTransportChannelProvider (channelProvider );
83105 client = BigQueryReadClient .create (settingsBuilder .build ());
106+ channelProvider2 = LocalChannelProvider .create (NAME );
107+ BigQueryWriteSettings .Builder writeSettingsBuilder =
108+ BigQueryWriteSettings .newBuilder ()
109+ .setCredentialsProvider (NoCredentialsProvider .create ())
110+ .setTransportChannelProvider (channelProvider2 );
111+ writeClient = BigQueryWriteClient .create (writeSettingsBuilder .build ());
84112 }
85113
86114 @ After
@@ -129,6 +157,63 @@ public void splitReadStreamTest() {
129157 verifyHeaderSent (STREAM_NAME_PATTERN );
130158 }
131159
160+ @ Test
161+ public void createWriteStreamTest () {
162+ try {
163+ writeClient .createWriteStream (
164+ "projects/project/datasets/dataset/tables/table" ,
165+ WriteStream .newBuilder ().setType (WriteStream .Type .BUFFERED ).build ());
166+ } catch (UnimplementedException e ) {
167+ // Ignore the error: none of the methods are actually implemented.
168+ }
169+ boolean headerSent = channelProvider2 .isHeaderSent (HEADER_NAME , PARENT_PATTERN );
170+ assertWithMessage ("Generated header was sent" ).that (headerSent ).isTrue ();
171+ }
172+
173+ @ Test
174+ public void getWriteStreamTest () {
175+ try {
176+ writeClient .getWriteStream (WRITE_STREAM_NAME );
177+ } catch (UnimplementedException e ) {
178+ // Ignore the error: none of the methods are actually implemented.
179+ }
180+ boolean headerSent = channelProvider2 .isHeaderSent (HEADER_NAME , NAME_PATTERN );
181+ assertWithMessage ("Generated header was sent" ).that (headerSent ).isTrue ();
182+ }
183+
184+ // Following tests will work after b/185842996 is fixed.
185+ // @Test
186+ // public void appendRowsTest() {
187+ // try {
188+ // AppendRowsRequest req =
189+ // AppendRowsRequest.newBuilder().setWriteStream(WRITE_STREAM_NAME).build();
190+ // BidiStream<AppendRowsRequest, AppendRowsResponse> bidiStream =
191+ // writeClient.appendRowsCallable().call();
192+ // bidiStream.send(req);
193+ // } catch (UnimplementedException e) {
194+ // // Ignore the error: none of the methods are actually implemented.
195+ // }
196+ // boolean headerSent = channelProvider2.isHeaderSent(HEADER_NAME, WRITE_STREAM_PATTERN);
197+ // assertWithMessage("Generated header was sent").that(headerSent).isTrue();
198+ // }
199+ //
200+ // @Test
201+ // public void appendRowsManualTest() {
202+ // try {
203+ // StreamWriterV2 streamWriter =
204+ // StreamWriterV2.newBuilder(WRITE_STREAM_NAME, writeClient)
205+ // .setWriterSchema(ProtoSchema.newBuilder().build())
206+ // .build();
207+ // streamWriter.append(ProtoRows.newBuilder().build(), 1);
208+ // } catch (UnimplementedException e) {
209+ // // Ignore the error: none of the methods are actually implemented.
210+ // } catch (IOException e) {
211+ // // Ignore the error: none of the methods are actually implemented.
212+ // }
213+ // boolean headerSent = channelProvider2.isHeaderSent(HEADER_NAME, WRITE_STREAM_PATTERN);
214+ // assertWithMessage("Generated header was sent").that(headerSent).isTrue();
215+ // }
216+
132217 private void verifyHeaderSent (Pattern ... patterns ) {
133218 for (Pattern pattern : patterns ) {
134219 boolean headerSent = channelProvider .isHeaderSent (HEADER_NAME , pattern );
0 commit comments