|
20 | 20 |
|
21 | 21 | import org.apache.hudi.avro.HoodieAvroUtils;
|
22 | 22 | import org.apache.hudi.client.SparkRDDWriteClient;
|
| 23 | +import org.apache.hudi.common.config.TypedProperties; |
23 | 24 | import org.apache.hudi.common.model.HoodieRecord;
|
24 | 25 | import org.apache.hudi.common.model.HoodieRecordPayload;
|
25 | 26 | import org.apache.hudi.common.model.WriteOperationType;
|
26 | 27 | import org.apache.hudi.common.util.Option;
|
27 | 28 | import org.apache.hudi.config.HoodieWriteConfig;
|
28 | 29 | import org.apache.hudi.exception.HoodieException;
|
29 | 30 | import org.apache.hudi.execution.bulkinsert.RDDCustomColumnsSortPartitioner;
|
| 31 | +import org.apache.hudi.hive.HiveSyncConfig; |
30 | 32 | import org.apache.hudi.table.BulkInsertPartitioner;
|
31 | 33 |
|
32 | 34 | import org.apache.avro.Conversions;
|
|
41 | 43 | import org.junit.jupiter.api.BeforeEach;
|
42 | 44 | import org.junit.jupiter.api.Test;
|
43 | 45 | import org.junit.jupiter.api.extension.ExtendWith;
|
| 46 | +import org.junit.jupiter.params.ParameterizedTest; |
| 47 | +import org.junit.jupiter.params.provider.ValueSource; |
44 | 48 | import org.mockito.ArgumentCaptor;
|
45 | 49 | import org.mockito.Captor;
|
46 | 50 | import org.mockito.Mock;
|
|
49 | 53 | import java.math.BigDecimal;
|
50 | 54 | import java.time.LocalDate;
|
51 | 55 |
|
| 56 | +import static org.apache.hudi.common.model.HoodieFileFormat.PARQUET; |
| 57 | +import static org.apache.hudi.hive.ddl.HiveSyncMode.HMS; |
52 | 58 | import static org.hamcrest.CoreMatchers.containsString;
|
53 | 59 | import static org.hamcrest.CoreMatchers.equalTo;
|
54 | 60 | import static org.hamcrest.CoreMatchers.instanceOf;
|
55 | 61 | import static org.hamcrest.CoreMatchers.is;
|
56 | 62 | import static org.hamcrest.MatcherAssert.assertThat;
|
57 | 63 | import static org.junit.jupiter.api.Assertions.assertEquals;
|
| 64 | +import static org.junit.jupiter.api.Assertions.assertFalse; |
| 65 | +import static org.junit.jupiter.api.Assertions.assertNull; |
58 | 66 | import static org.junit.jupiter.api.Assertions.assertThrows;
|
| 67 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
59 | 68 | import static org.mockito.ArgumentMatchers.any;
|
60 | 69 | import static org.mockito.ArgumentMatchers.anyString;
|
61 | 70 | import static org.mockito.Mockito.times;
|
|
65 | 74 | @ExtendWith(MockitoExtension.class)
|
66 | 75 | public class TestDataSourceUtils {
|
67 | 76 |
|
| 77 | + private static final String HIVE_DATABASE = "testdb1"; |
| 78 | + private static final String HIVE_TABLE = "hive_trips"; |
| 79 | + |
68 | 80 | @Mock
|
69 | 81 | private SparkRDDWriteClient hoodieWriteClient;
|
70 | 82 |
|
@@ -199,6 +211,29 @@ public void testCreateRDDCustomColumnsSortPartitionerWithValidPartitioner() thro
|
199 | 211 | assertThat(partitioner.isPresent(), is(true));
|
200 | 212 | }
|
201 | 213 |
|
| 214 | + @ParameterizedTest |
| 215 | + @ValueSource(booleans = {true, false}) |
| 216 | + public void testBuildHiveSyncConfig(boolean useSyncMode) { |
| 217 | + TypedProperties props = new TypedProperties(); |
| 218 | + if (useSyncMode) { |
| 219 | + props.setProperty(DataSourceWriteOptions.HIVE_SYNC_MODE().key(), HMS.name()); |
| 220 | + props.setProperty(DataSourceWriteOptions.HIVE_USE_JDBC().key(), String.valueOf(false)); |
| 221 | + } |
| 222 | + props.setProperty(DataSourceWriteOptions.HIVE_DATABASE().key(), HIVE_DATABASE); |
| 223 | + props.setProperty(DataSourceWriteOptions.HIVE_TABLE().key(), HIVE_TABLE); |
| 224 | + HiveSyncConfig hiveSyncConfig = DataSourceUtils.buildHiveSyncConfig(props, config.getBasePath(), PARQUET.name()); |
| 225 | + |
| 226 | + if (useSyncMode) { |
| 227 | + assertFalse(hiveSyncConfig.useJdbc); |
| 228 | + assertEquals(HMS.name(), hiveSyncConfig.syncMode); |
| 229 | + } else { |
| 230 | + assertTrue(hiveSyncConfig.useJdbc); |
| 231 | + assertNull(hiveSyncConfig.syncMode); |
| 232 | + } |
| 233 | + assertEquals(HIVE_DATABASE, hiveSyncConfig.databaseName); |
| 234 | + assertEquals(HIVE_TABLE, hiveSyncConfig.tableName); |
| 235 | + } |
| 236 | + |
202 | 237 | private void setAndVerifyHoodieWriteClientWith(final String partitionerClassName) {
|
203 | 238 | config = HoodieWriteConfig.newBuilder().withPath(config.getBasePath())
|
204 | 239 | .withUserDefinedBulkInsertPartitionerClass(partitionerClassName)
|
|
0 commit comments