diff --git a/spring-batch-bigquery/pom.xml b/spring-batch-bigquery/pom.xml index 247e8ae9..fb7bf679 100644 --- a/spring-batch-bigquery/pom.xml +++ b/spring-batch-bigquery/pom.xml @@ -112,7 +112,12 @@ 2.0.16 test - + + org.testcontainers + junit-jupiter + 1.20.1 + test + @@ -136,8 +141,9 @@ 3.3.1 - - /unit + + **/unit/** + **/emulator/** diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java index 485c3960..f8e280da 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/BigQueryDataLoader.java @@ -22,9 +22,7 @@ import com.google.cloud.bigquery.TableId; import com.google.cloud.bigquery.WriteChannelConfiguration; import org.springframework.batch.extensions.bigquery.writer.BigQueryCsvItemWriter; -import org.springframework.batch.extensions.bigquery.writer.BigQueryJsonItemWriter; import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryCsvItemWriterBuilder; -import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryJsonItemWriterBuilder; import org.springframework.batch.item.Chunk; import java.util.Comparator; @@ -69,25 +67,4 @@ public void loadCsvSample(String tableName) throws Exception { job.get().waitFor(); } - public void loadJsonSample(String tableName) throws Exception { - AtomicReference job = new AtomicReference<>(); - - WriteChannelConfiguration channelConfiguration = WriteChannelConfiguration - .newBuilder(TableId.of(TestConstants.DATASET, tableName)) - .setSchema(PersonDto.getBigQuerySchema()) - .setAutodetect(false) - .setFormatOptions(FormatOptions.json()) - .build(); - - BigQueryJsonItemWriter writer = new BigQueryJsonItemWriterBuilder() - .bigQuery(bigQuery) - .writeChannelConfig(channelConfiguration) - .jobConsumer(job::set) - .build(); - - writer.afterPropertiesSet(); - writer.write(CHUNK); - job.get().waitFor(); - } - } \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java index dc931c1f..a845e7dc 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/common/TestConstants.java @@ -26,6 +26,8 @@ private TestConstants() {} public static final String DATASET = "spring_batch_extensions"; public static final String NAME = "name"; public static final String AGE = "age"; + public static final String CSV = "csv"; + public static final String JSON = "json"; public static final Converter PERSON_MAPPER = res -> new PersonDto( res.get(NAME).getStringValue(), Long.valueOf(res.get(AGE).getLongValue()).intValue() diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BaseEmulatorItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BaseEmulatorItemReaderTest.java new file mode 100644 index 00000000..c6ae4d98 --- /dev/null +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BaseEmulatorItemReaderTest.java @@ -0,0 +1,36 @@ +package org.springframework.batch.extensions.bigquery.emulator.reader; + +import com.google.cloud.NoCredentials; +import com.google.cloud.bigquery.BigQuery; +import com.google.cloud.bigquery.BigQueryOptions; +import org.junit.jupiter.api.BeforeAll; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.utility.MountableFile; + +@Testcontainers +abstract class BaseEmulatorItemReaderTest { + private static final int PORT = 9050; + + private static final String PROJECT = "batch-test"; + + @Container + private static final GenericContainer CONTAINER = new GenericContainer<>("ghcr.io/goccy/bigquery-emulator") + .withExposedPorts(PORT) + .withCommand("--project=" + PROJECT, "--data-from-yaml=/test-data.yaml") + .withCopyFileToContainer(MountableFile.forClasspathResource("test-data.yaml"), "/test-data.yaml"); + + protected static BigQuery bigQuery; + + @BeforeAll + static void init() { + bigQuery = BigQueryOptions + .newBuilder() + .setHost("http://%s:%d".formatted(CONTAINER.getHost(), CONTAINER.getMappedPort(PORT))) + .setProjectId(PROJECT) + .setCredentials(NoCredentials.getInstance()) + .build() + .getService(); + } +} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BigQueryEmulatorItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BigQueryEmulatorItemReaderTest.java new file mode 100644 index 00000000..68fb5d47 --- /dev/null +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/reader/BigQueryEmulatorItemReaderTest.java @@ -0,0 +1,59 @@ +package org.springframework.batch.extensions.bigquery.emulator.reader; + +import com.google.cloud.bigquery.*; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.batch.extensions.bigquery.common.PersonDto; +import org.springframework.batch.extensions.bigquery.common.TestConstants; +import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader; +import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder; + +class BigQueryEmulatorItemReaderTest extends BaseEmulatorItemReaderTest { + + @Test + void testBatchReader() throws Exception { + QueryJobConfiguration jobConfiguration = QueryJobConfiguration + .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.csv p ORDER BY p.name LIMIT 2") + .setDestinationTable(TableId.of(TestConstants.DATASET, TestConstants.CSV)) + .setPriority(QueryJobConfiguration.Priority.BATCH) + .build(); + + BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() + .bigQuery(bigQuery) + .rowMapper(TestConstants.PERSON_MAPPER) + .jobConfiguration(jobConfiguration) + .build(); + + reader.afterPropertiesSet(); + + verifyResult(reader); + } + + @Test + void testInteractiveReader() throws Exception { + QueryJobConfiguration jobConfiguration = QueryJobConfiguration + .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.csv p ORDER BY p.name LIMIT 2") + .setDestinationTable(TableId.of(TestConstants.DATASET, TestConstants.CSV)) + .build(); + + BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() + .bigQuery(bigQuery) + .rowMapper(TestConstants.PERSON_MAPPER) + .jobConfiguration(jobConfiguration) + .build(); + + reader.afterPropertiesSet(); + + verifyResult(reader); + } + + private void verifyResult(BigQueryQueryItemReader reader) throws Exception { + PersonDto actual1 = reader.read(); + Assertions.assertEquals("Volodymyr", actual1.name()); + Assertions.assertEquals(27, actual1.age()); + + PersonDto actual2 = reader.read(); + Assertions.assertEquals("Oleksandra", actual2.name()); + Assertions.assertEquals(26, actual2.age()); + } +} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/writer/JsonWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/writer/JsonWriterTest.java new file mode 100644 index 00000000..7d404e41 --- /dev/null +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/emulator/writer/JsonWriterTest.java @@ -0,0 +1,5 @@ +package org.springframework.batch.extensions.bigquery.emulator.writer; + +// TODO +public class JsonWriterTest { +} diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/base/BaseBigQueryIntegrationTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/base/BaseBigQueryGcloudIntegrationTest.java similarity index 54% rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/base/BaseBigQueryIntegrationTest.java rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/base/BaseBigQueryGcloudIntegrationTest.java index e2f6c2f2..d005d3c3 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/base/BaseBigQueryIntegrationTest.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/base/BaseBigQueryGcloudIntegrationTest.java @@ -14,25 +14,11 @@ * limitations under the License. */ -package org.springframework.batch.extensions.bigquery.integration.base; +package org.springframework.batch.extensions.bigquery.gcloud.base; import com.google.cloud.bigquery.BigQuery; import com.google.cloud.bigquery.BigQueryOptions; -import org.junit.jupiter.api.TestInfo; -import java.lang.reflect.Method; - -public abstract class BaseBigQueryIntegrationTest { - - private static final String TABLE_PATTERN = "%s_%s"; - - public final BigQuery bigQuery = BigQueryOptions.getDefaultInstance().getService(); - - protected String getTableName(TestInfo testInfo) { - return String.format( - TABLE_PATTERN, - testInfo.getTags().iterator().next(), - testInfo.getTestMethod().map(Method::getName).orElseThrow() - ); - } +public abstract class BaseBigQueryGcloudIntegrationTest { + protected static final BigQuery BIG_QUERY = BigQueryOptions.getDefaultInstance().getService(); } \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/package-info.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/package-info.java similarity index 95% rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/package-info.java rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/package-info.java index e5aced08..9df3f745 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/package-info.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/package-info.java @@ -25,4 +25,4 @@ * * @see Authentication */ -package org.springframework.batch.extensions.bigquery.integration; \ No newline at end of file +package org.springframework.batch.extensions.bigquery.gcloud; \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryCsvItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/reader/BigQueryGcloudItemReaderTest.java similarity index 53% rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryCsvItemReaderTest.java rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/reader/BigQueryGcloudItemReaderTest.java index 7cfef0e5..57b31c40 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryCsvItemReaderTest.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/reader/BigQueryGcloudItemReaderTest.java @@ -14,50 +14,76 @@ * limitations under the License. */ -package org.springframework.batch.extensions.bigquery.integration.reader.batch; - -import com.google.cloud.bigquery.QueryJobConfiguration; -import com.google.cloud.bigquery.TableId; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; +package org.springframework.batch.extensions.bigquery.gcloud.reader; + +import com.google.cloud.bigquery.*; +import org.junit.jupiter.api.*; import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; import org.springframework.batch.extensions.bigquery.common.PersonDto; import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest; +import org.springframework.batch.extensions.bigquery.gcloud.base.BaseBigQueryGcloudIntegrationTest; import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader; import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder; -import org.springframework.batch.item.Chunk; -@Tag("csv") -class BigQueryBatchQueryCsvItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest { +class BigQueryGcloudItemReaderTest extends BaseBigQueryGcloudIntegrationTest { - @Test - void batchQueryTest1(TestInfo testInfo) throws Exception { - String tableName = getTableName(testInfo); - new BigQueryDataLoader(bigQuery).loadCsvSample(tableName); - Chunk chunk = BigQueryDataLoader.CHUNK; + @BeforeAll + static void init() throws Exception { + if (BIG_QUERY.getDataset(TestConstants.DATASET) == null) { + BIG_QUERY.create(DatasetInfo.of(TestConstants.DATASET)); + } + + if (BIG_QUERY.getTable(TestConstants.DATASET, TestConstants.CSV) == null) { + TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema()); + BIG_QUERY.create(TableInfo.of(TableId.of(TestConstants.DATASET, TestConstants.CSV), tableDefinition)); + } + + new BigQueryDataLoader(BIG_QUERY).loadCsvSample(TestConstants.CSV); + } + @AfterAll + static void cleanupTest() { + BIG_QUERY.delete(TableId.of(TestConstants.DATASET, TestConstants.CSV)); + } + + @Test + void testBatchQuery() throws Exception { QueryJobConfiguration jobConfiguration = QueryJobConfiguration - .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2") - .setDestinationTable(TableId.of(TestConstants.DATASET, tableName)) + .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2".formatted(TestConstants.CSV)) + .setDestinationTable(TableId.of(TestConstants.DATASET, TestConstants.CSV)) .setPriority(QueryJobConfiguration.Priority.BATCH) .build(); BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() - .bigQuery(bigQuery) + .bigQuery(BIG_QUERY) .rowMapper(TestConstants.PERSON_MAPPER) .jobConfiguration(jobConfiguration) .build(); reader.afterPropertiesSet(); + verifyResult(reader); + } + + @Test + void testInteractiveQuery() throws Exception { + BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() + .bigQuery(BIG_QUERY) + .query("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2".formatted(TestConstants.CSV)) + .rowMapper(TestConstants.PERSON_MAPPER) + .build(); + + reader.afterPropertiesSet(); + + verifyResult(reader); + } + + private void verifyResult(BigQueryQueryItemReader reader) throws Exception { PersonDto actualFirstPerson = reader.read(); - PersonDto expectedFirstPerson = chunk.getItems().get(0); + PersonDto expectedFirstPerson = BigQueryDataLoader.CHUNK.getItems().get(0); PersonDto actualSecondPerson = reader.read(); - PersonDto expectedSecondPerson = chunk.getItems().get(1); + PersonDto expectedSecondPerson = BigQueryDataLoader.CHUNK.getItems().get(1); PersonDto actualThirdPerson = reader.read(); diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryCsvItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BaseBigQueryGcloudItemWriterTest.java similarity index 52% rename from spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryCsvItemWriterTest.java rename to spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BaseBigQueryGcloudItemWriterTest.java index 11c3f096..e10523d0 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryCsvItemWriterTest.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BaseBigQueryGcloudItemWriterTest.java @@ -14,49 +14,35 @@ * limitations under the License. */ -package org.springframework.batch.extensions.bigquery.integration.writer; +package org.springframework.batch.extensions.bigquery.gcloud.writer; -import com.google.cloud.bigquery.BigQuery; -import com.google.cloud.bigquery.Dataset; -import com.google.cloud.bigquery.Table; -import com.google.cloud.bigquery.TableId; -import com.google.cloud.bigquery.TableResult; +import com.google.cloud.bigquery.*; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; import org.springframework.batch.extensions.bigquery.common.PersonDto; import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.writer.base.BaseBigQueryItemWriterTest; -import org.springframework.batch.item.Chunk; +import org.springframework.batch.extensions.bigquery.gcloud.base.BaseBigQueryGcloudIntegrationTest; -@Tag("csv") -class BigQueryCsvItemWriterTest extends BaseBigQueryItemWriterTest { +abstract class BaseBigQueryGcloudItemWriterTest extends BaseBigQueryGcloudIntegrationTest { - @Test - void test1(TestInfo testInfo) throws Exception { - String tableName = getTableName(testInfo); - new BigQueryDataLoader(bigQuery).loadCsvSample(tableName); - Chunk chunk = BigQueryDataLoader.CHUNK; - - Dataset dataset = bigQuery.getDataset(TestConstants.DATASET); - Table table = bigQuery.getTable(TableId.of(TestConstants.DATASET, tableName)); + protected void verifyResults(String tableName) { + Dataset dataset = BIG_QUERY.getDataset(TestConstants.DATASET); + Table table = BIG_QUERY.getTable(TableId.of(TestConstants.DATASET, tableName)); TableId tableId = table.getTableId(); - TableResult tableResult = bigQuery.listTableData(tableId, BigQuery.TableDataListOption.pageSize(2L)); + TableResult tableResult = BIG_QUERY.listTableData(tableId, BigQuery.TableDataListOption.pageSize(2L)); Assertions.assertNotNull(dataset.getDatasetId()); Assertions.assertNotNull(tableId); - Assertions.assertEquals(chunk.size(), tableResult.getTotalRows()); + Assertions.assertEquals(BigQueryDataLoader.CHUNK.size(), tableResult.getTotalRows()); tableResult .getValues() .forEach(field -> { Assertions.assertTrue( - chunk.getItems().stream().map(PersonDto::name).anyMatch(name -> field.get(0).getStringValue().equals(name)) + BigQueryDataLoader.CHUNK.getItems().stream().map(PersonDto::name).anyMatch(name -> field.get(0).getStringValue().equals(name)) ); - boolean ageCondition = chunk + boolean ageCondition = BigQueryDataLoader.CHUNK .getItems() .stream() .map(PersonDto::age) diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudCsvItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudCsvItemWriterTest.java new file mode 100644 index 00000000..dd986daf --- /dev/null +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudCsvItemWriterTest.java @@ -0,0 +1,72 @@ +/* + * Copyright 2002-2024 the original author or authors. + * + * 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 org.springframework.batch.extensions.bigquery.gcloud.writer; + +import com.google.cloud.bigquery.*; +import org.junit.jupiter.api.*; +import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; +import org.springframework.batch.extensions.bigquery.common.PersonDto; +import org.springframework.batch.extensions.bigquery.common.TestConstants; +import org.springframework.batch.extensions.bigquery.writer.BigQueryCsvItemWriter; +import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryCsvItemWriterBuilder; + +import java.util.concurrent.atomic.AtomicReference; + +class BigQueryGcloudCsvItemWriterTest extends BaseBigQueryGcloudItemWriterTest { + + @BeforeAll + static void prepareTest() { + if (BIG_QUERY.getDataset(TestConstants.DATASET) == null) { + BIG_QUERY.create(DatasetInfo.of(TestConstants.DATASET)); + } + + if (BIG_QUERY.getTable(TestConstants.DATASET, TestConstants.CSV) == null) { + TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema()); + BIG_QUERY.create(TableInfo.of(TableId.of(TestConstants.DATASET, TestConstants.CSV), tableDefinition)); + } + } + + @AfterAll + static void cleanup() { + BIG_QUERY.delete(TableId.of(TestConstants.DATASET, TestConstants.CSV)); + } + + @Test + void testWriteCsv() throws Exception { + AtomicReference job = new AtomicReference<>(); + + WriteChannelConfiguration channelConfiguration = WriteChannelConfiguration + .newBuilder(TableId.of(TestConstants.DATASET, TestConstants.CSV)) + .setSchema(PersonDto.getBigQuerySchema()) + .setAutodetect(false) + .setFormatOptions(FormatOptions.csv()) + .build(); + + BigQueryCsvItemWriter writer = new BigQueryCsvItemWriterBuilder() + .bigQuery(BIG_QUERY) + .writeChannelConfig(channelConfiguration) + .jobConsumer(job::set) + .build(); + + writer.afterPropertiesSet(); + writer.write(BigQueryDataLoader.CHUNK); + job.get().waitFor(); + + verifyResults(TestConstants.CSV); + } + +} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudJsonItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudJsonItemWriterTest.java new file mode 100644 index 00000000..02d44400 --- /dev/null +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/gcloud/writer/BigQueryGcloudJsonItemWriterTest.java @@ -0,0 +1,74 @@ +/* + * Copyright 2002-2024 the original author or authors. + * + * 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 org.springframework.batch.extensions.bigquery.gcloud.writer; + +import com.google.cloud.bigquery.*; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; +import org.springframework.batch.extensions.bigquery.common.PersonDto; +import org.springframework.batch.extensions.bigquery.common.TestConstants; +import org.springframework.batch.extensions.bigquery.writer.BigQueryJsonItemWriter; +import org.springframework.batch.extensions.bigquery.writer.builder.BigQueryJsonItemWriterBuilder; + +import java.util.concurrent.atomic.AtomicReference; + +class BigQueryGcloudJsonItemWriterTest extends BaseBigQueryGcloudItemWriterTest { + + @BeforeAll + static void prepareTest() { + if (BIG_QUERY.getDataset(TestConstants.DATASET) == null) { + BIG_QUERY.create(DatasetInfo.of(TestConstants.DATASET)); + } + + if (BIG_QUERY.getTable(TestConstants.DATASET, TestConstants.JSON) == null) { + TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema()); + BIG_QUERY.create(TableInfo.of(TableId.of(TestConstants.DATASET, TestConstants.JSON), tableDefinition)); + } + } + + @AfterAll + static void cleanup() { + BIG_QUERY.delete(TableId.of(TestConstants.DATASET, TestConstants.JSON)); + } + + @Test + void testWriteJson() throws Exception { + AtomicReference job = new AtomicReference<>(); + + WriteChannelConfiguration channelConfiguration = WriteChannelConfiguration + .newBuilder(TableId.of(TestConstants.DATASET, TestConstants.JSON)) + .setSchema(PersonDto.getBigQuerySchema()) + .setAutodetect(false) + .setFormatOptions(FormatOptions.json()) + .build(); + + BigQueryJsonItemWriter writer = new BigQueryJsonItemWriterBuilder() + .bigQuery(BIG_QUERY) + .writeChannelConfig(channelConfiguration) + .jobConsumer(job::set) + .build(); + + writer.afterPropertiesSet(); + writer.write(BigQueryDataLoader.CHUNK); + job.get().waitFor(); + + verifyResults(TestConstants.JSON); + } + +} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/base/BaseCsvJsonInteractiveQueryItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/base/BaseCsvJsonInteractiveQueryItemReaderTest.java deleted file mode 100644 index 27035cbc..00000000 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/base/BaseCsvJsonInteractiveQueryItemReaderTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2002-2024 the original author or authors. - * - * 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 org.springframework.batch.extensions.bigquery.integration.reader.base; - -import com.google.cloud.bigquery.DatasetInfo; -import com.google.cloud.bigquery.StandardTableDefinition; -import com.google.cloud.bigquery.TableDefinition; -import com.google.cloud.bigquery.TableId; -import com.google.cloud.bigquery.TableInfo; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.TestInfo; -import org.springframework.batch.extensions.bigquery.common.PersonDto; -import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.base.BaseBigQueryIntegrationTest; - -public abstract class BaseCsvJsonInteractiveQueryItemReaderTest extends BaseBigQueryIntegrationTest { - - @BeforeEach - void prepareTest(TestInfo testInfo) { - if (bigQuery.getDataset(TestConstants.DATASET) == null) { - bigQuery.create(DatasetInfo.of(TestConstants.DATASET)); - } - - String tableName = getTableName(testInfo); - - if (bigQuery.getTable(TestConstants.DATASET, tableName) == null) { - TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema()); - bigQuery.create(TableInfo.of(TableId.of(TestConstants.DATASET, tableName), tableDefinition)); - } - } - - @AfterEach - void cleanupTest(TestInfo testInfo) { - bigQuery.delete(TableId.of(TestConstants.DATASET, getTableName(testInfo))); - } - -} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryJsonItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryJsonItemReaderTest.java deleted file mode 100644 index 285816d2..00000000 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/batch/BigQueryBatchQueryJsonItemReaderTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2002-2024 the original author or authors. - * - * 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 org.springframework.batch.extensions.bigquery.integration.reader.batch; - -import com.google.cloud.bigquery.QueryJobConfiguration; -import com.google.cloud.bigquery.TableId; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; -import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; -import org.springframework.batch.extensions.bigquery.common.PersonDto; -import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest; -import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader; -import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder; -import org.springframework.batch.item.Chunk; - -@Tag("json") -class BigQueryBatchQueryJsonItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest { - - @Test - void batchQueryTest1(TestInfo testInfo) throws Exception { - String tableName = getTableName(testInfo); - new BigQueryDataLoader(bigQuery).loadJsonSample(tableName); - Chunk chunk = BigQueryDataLoader.CHUNK; - - QueryJobConfiguration jobConfiguration = QueryJobConfiguration - .newBuilder("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2") - .setDestinationTable(TableId.of(TestConstants.DATASET, tableName)) - .setPriority(QueryJobConfiguration.Priority.BATCH) - .build(); - - BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() - .bigQuery(bigQuery) - .rowMapper(TestConstants.PERSON_MAPPER) - .jobConfiguration(jobConfiguration) - .build(); - - reader.afterPropertiesSet(); - - PersonDto actualFirstPerson = reader.read(); - PersonDto expectedFirstPerson = chunk.getItems().get(0); - - PersonDto actualSecondPerson = reader.read(); - PersonDto expectedSecondPerson = chunk.getItems().get(1); - - PersonDto actualThirdPerson = reader.read(); - - Assertions.assertNotNull(actualFirstPerson); - Assertions.assertEquals(expectedFirstPerson.name(), actualFirstPerson.name()); - Assertions.assertEquals(0, expectedFirstPerson.age().compareTo(actualFirstPerson.age())); - - Assertions.assertNotNull(actualSecondPerson); - Assertions.assertEquals(expectedSecondPerson.name(), actualSecondPerson.name()); - Assertions.assertEquals(0, expectedSecondPerson.age().compareTo(actualSecondPerson.age())); - - Assertions.assertNull(actualThirdPerson); - } - -} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryCsvItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryCsvItemReaderTest.java deleted file mode 100644 index 63aeed8a..00000000 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryCsvItemReaderTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2002-2024 the original author or authors. - * - * 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 org.springframework.batch.extensions.bigquery.integration.reader.interactive; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; -import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; -import org.springframework.batch.extensions.bigquery.common.PersonDto; -import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest; -import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader; -import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder; -import org.springframework.batch.item.Chunk; - -@Tag("csv") -class BigQueryInteractiveQueryCsvItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest { - - @Test - void interactiveQueryTest1(TestInfo testInfo) throws Exception { - String tableName = getTableName(testInfo); - new BigQueryDataLoader(bigQuery).loadCsvSample(tableName); - Chunk chunk = BigQueryDataLoader.CHUNK; - - BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() - .bigQuery(bigQuery) - .query(String.format("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2", tableName)) - .rowMapper(TestConstants.PERSON_MAPPER) - .build(); - - reader.afterPropertiesSet(); - - PersonDto actualFirstPerson = reader.read(); - PersonDto expectedFirstPerson = chunk.getItems().get(0); - - PersonDto actualSecondPerson = reader.read(); - PersonDto expectedSecondPerson = chunk.getItems().get(1); - - PersonDto actualThirdPerson = reader.read(); - - Assertions.assertNotNull(actualFirstPerson); - Assertions.assertEquals(expectedFirstPerson.name(), actualFirstPerson.name()); - Assertions.assertEquals(0, expectedFirstPerson.age().compareTo(actualFirstPerson.age())); - - Assertions.assertNotNull(actualSecondPerson); - Assertions.assertEquals(expectedSecondPerson.name(), actualSecondPerson.name()); - Assertions.assertEquals(0, expectedSecondPerson.age().compareTo(actualSecondPerson.age())); - - Assertions.assertNull(actualThirdPerson); - } - -} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryJsonItemReaderTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryJsonItemReaderTest.java deleted file mode 100644 index ddf7d915..00000000 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/reader/interactive/BigQueryInteractiveQueryJsonItemReaderTest.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2002-2024 the original author or authors. - * - * 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 org.springframework.batch.extensions.bigquery.integration.reader.interactive; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; -import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; -import org.springframework.batch.extensions.bigquery.common.PersonDto; -import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.reader.base.BaseCsvJsonInteractiveQueryItemReaderTest; -import org.springframework.batch.extensions.bigquery.reader.BigQueryQueryItemReader; -import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder; -import org.springframework.batch.item.Chunk; - -@Tag("json") -class BigQueryInteractiveQueryJsonItemReaderTest extends BaseCsvJsonInteractiveQueryItemReaderTest { - - @Test - void interactiveQueryTest1(TestInfo testInfo) throws Exception { - String tableName = getTableName(testInfo); - new BigQueryDataLoader(bigQuery).loadJsonSample(tableName); - Chunk chunk = BigQueryDataLoader.CHUNK; - - BigQueryQueryItemReader reader = new BigQueryQueryItemReaderBuilder() - .bigQuery(bigQuery) - .query(String.format("SELECT p.name, p.age FROM spring_batch_extensions.%s p ORDER BY p.name LIMIT 2", tableName)) - .rowMapper(TestConstants.PERSON_MAPPER) - .build(); - - reader.afterPropertiesSet(); - - PersonDto actualFirstPerson = reader.read(); - PersonDto expectedFirstPerson = chunk.getItems().get(0); - - PersonDto actualSecondPerson = reader.read(); - PersonDto expectedSecondPerson = chunk.getItems().get(1); - - PersonDto actualThirdPerson = reader.read(); - - Assertions.assertNotNull(actualFirstPerson); - Assertions.assertEquals(expectedFirstPerson.name(), actualFirstPerson.name()); - Assertions.assertEquals(0, expectedFirstPerson.age().compareTo(actualFirstPerson.age())); - - Assertions.assertNotNull(actualSecondPerson); - Assertions.assertEquals(expectedSecondPerson.name(), actualSecondPerson.name()); - Assertions.assertEquals(0, expectedSecondPerson.age().compareTo(actualSecondPerson.age())); - - Assertions.assertNull(actualThirdPerson); - } - -} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryJsonItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryJsonItemWriterTest.java deleted file mode 100644 index 70e16bbc..00000000 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/BigQueryJsonItemWriterTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2002-2024 the original author or authors. - * - * 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 org.springframework.batch.extensions.bigquery.integration.writer; - -import com.google.cloud.bigquery.BigQuery; -import com.google.cloud.bigquery.Dataset; -import com.google.cloud.bigquery.Table; -import com.google.cloud.bigquery.TableId; -import com.google.cloud.bigquery.TableResult; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInfo; -import org.springframework.batch.extensions.bigquery.common.BigQueryDataLoader; -import org.springframework.batch.extensions.bigquery.common.PersonDto; -import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.writer.base.BaseBigQueryItemWriterTest; -import org.springframework.batch.item.Chunk; - -@Tag("json") -class BigQueryJsonItemWriterTest extends BaseBigQueryItemWriterTest { - - @Test - void test1(TestInfo testInfo) throws Exception { - String tableName = getTableName(testInfo); - new BigQueryDataLoader(bigQuery).loadJsonSample(tableName); - Chunk chunk = BigQueryDataLoader.CHUNK; - - Dataset dataset = bigQuery.getDataset(TestConstants.DATASET); - Table table = bigQuery.getTable(TableId.of(TestConstants.DATASET, tableName)); - TableId tableId = table.getTableId(); - TableResult tableResult = bigQuery.listTableData(tableId, BigQuery.TableDataListOption.pageSize(2L)); - - Assertions.assertNotNull(dataset.getDatasetId()); - Assertions.assertNotNull(tableId); - Assertions.assertEquals(chunk.size(), tableResult.getTotalRows()); - - tableResult - .getValues() - .forEach(field -> { - Assertions.assertTrue( - chunk.getItems().stream().map(PersonDto::name).anyMatch(name -> field.get(0).getStringValue().equals(name)) - ); - - boolean ageCondition = chunk - .getItems() - .stream() - .map(PersonDto::age) - .map(Long::valueOf) - .anyMatch(age -> age.compareTo(field.get(1).getLongValue()) == 0); - - Assertions.assertTrue(ageCondition); - }); - } - -} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/base/BaseBigQueryItemWriterTest.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/base/BaseBigQueryItemWriterTest.java deleted file mode 100644 index 402b713c..00000000 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/integration/writer/base/BaseBigQueryItemWriterTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2002-2024 the original author or authors. - * - * 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 org.springframework.batch.extensions.bigquery.integration.writer.base; - -import com.google.cloud.bigquery.DatasetInfo; -import com.google.cloud.bigquery.StandardTableDefinition; -import com.google.cloud.bigquery.TableDefinition; -import com.google.cloud.bigquery.TableId; -import com.google.cloud.bigquery.TableInfo; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.TestInfo; -import org.springframework.batch.extensions.bigquery.common.PersonDto; -import org.springframework.batch.extensions.bigquery.common.TestConstants; -import org.springframework.batch.extensions.bigquery.integration.base.BaseBigQueryIntegrationTest; - -public abstract class BaseBigQueryItemWriterTest extends BaseBigQueryIntegrationTest { - - @BeforeEach - void prepareTest(TestInfo testInfo) { - if (bigQuery.getDataset(TestConstants.DATASET) == null) { - bigQuery.create(DatasetInfo.of(TestConstants.DATASET)); - } - - if (bigQuery.getTable(TestConstants.DATASET, getTableName(testInfo)) == null) { - TableDefinition tableDefinition = StandardTableDefinition.of(PersonDto.getBigQuerySchema()); - bigQuery.create(TableInfo.of(TableId.of(TestConstants.DATASET, getTableName(testInfo)), tableDefinition)); - } - } - - @AfterEach - void cleanupTest(TestInfo testInfo) { - bigQuery.delete(TableId.of(TestConstants.DATASET, getTableName(testInfo))); - } - -} \ No newline at end of file diff --git a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java index ec9b9567..f798c6cc 100644 --- a/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java +++ b/spring-batch-bigquery/src/test/java/org/springframework/batch/extensions/bigquery/unit/reader/builder/BigQueryBatchQueryItemReaderBuilderTests.java @@ -27,6 +27,7 @@ import org.springframework.batch.extensions.bigquery.reader.builder.BigQueryQueryItemReaderBuilder; import org.springframework.batch.extensions.bigquery.unit.base.AbstractBigQueryTest; +// TODO verify all corner cases of afterPropertiesSet class BigQueryBatchQueryItemReaderBuilderTests extends AbstractBigQueryTest { @Test diff --git a/spring-batch-bigquery/src/test/resources/logback.xml b/spring-batch-bigquery/src/test/resources/logback.xml index 6a2c0bce..d227b170 100644 --- a/spring-batch-bigquery/src/test/resources/logback.xml +++ b/spring-batch-bigquery/src/test/resources/logback.xml @@ -12,7 +12,7 @@ - + diff --git a/spring-batch-bigquery/src/test/resources/test-data.yaml b/spring-batch-bigquery/src/test/resources/test-data.yaml new file mode 100644 index 00000000..ff477c56 --- /dev/null +++ b/spring-batch-bigquery/src/test/resources/test-data.yaml @@ -0,0 +1,18 @@ +projects: + - id: batch-test + datasets: + - id: spring_batch_extensions + tables: + - id: csv + columns: + - name: name + type: STRING + mode: REQUIRED + - name: age + type: INTEGER + mode: REQUIRED + data: + - name: Volodymyr + age: 27 + - name: Oleksandra + age: 26 \ No newline at end of file