[ 
https://issues.apache.org/jira/browse/GOBBLIN-2159?focusedWorklogId=936786&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-936786
 ]

ASF GitHub Bot logged work on GOBBLIN-2159:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 27/Sep/24 11:47
            Start Date: 27/Sep/24 11:47
    Worklog Time Spent: 10m 
      Work Description: Blazer-007 commented on code in PR #4058:
URL: https://github.com/apache/gobblin/pull/4058#discussion_r1778492525


##########
gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/iceberg/predicates/IcebergDateTimePartitionFilterPredicateTest.java:
##########
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *    http://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.apache.gobblin.data.management.copy.iceberg.predicates;
+
+import java.util.Properties;
+
+import org.apache.iceberg.StructLike;
+import org.apache.iceberg.TableMetadata;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+/** Tests for {@link 
org.apache.gobblin.data.management.copy.iceberg.predicates.IcebergDateTimePartitionFilterPredicate}
 */
+public class IcebergDateTimePartitionFilterPredicateTest {
+  private static final String TEST_ICEBERG_PARTITION_DATETTIME = 
"iceberg.dataset.source.partition.datetime";
+  private static final String TEST_ICEBERG_PARTITION_DATETTIME_PATTERN = 
TEST_ICEBERG_PARTITION_DATETTIME + ".pattern";
+  private static final String TEST_ICEBERG_PARTITION_DATETTIME_STARTDATE = 
TEST_ICEBERG_PARTITION_DATETTIME + ".startdate";
+  private static final String TEST_ICEBERG_PARTITION_DATETTIME_ENDDATE = 
TEST_ICEBERG_PARTITION_DATETTIME + ".enddate";
+  private static final String PARTITION_COLUMN_NAME = "partitionColumn";
+  private static final String PARTITION_PATTERN = "yyyy-MM-dd";
+  private static final String START_DATE = "2024-01-01";
+  private static final String END_DATE = "2024-12-31";
+  private TableMetadata mockTableMetadata;
+  private Properties mockProperties;
+  private StructLike mockPartition;
+  private IcebergDateTimePartitionFilterPredicate 
mockDateTimePartitionFilterPredicate;
+  private MockedStatic<IcebergPartitionFilterPredicateUtil> 
icebergPartitionFilterPredicateUtilMockedStatic;
+
+  @BeforeMethod
+  public void setup() {
+    mockTableMetadata = Mockito.mock(TableMetadata.class);
+    icebergPartitionFilterPredicateUtilMockedStatic = 
Mockito.mockStatic(IcebergPartitionFilterPredicateUtil.class);
+    icebergPartitionFilterPredicateUtilMockedStatic.when(
+            () -> 
IcebergPartitionFilterPredicateUtil.getPartitionColumnIndex(Mockito.anyString(),
 Mockito.any(TableMetadata.class), Mockito.anyList()))
+        .thenReturn(0);
+
+    mockProperties = new Properties();
+    mockProperties.setProperty(TEST_ICEBERG_PARTITION_DATETTIME_PATTERN, 
PARTITION_PATTERN);
+    mockProperties.setProperty(TEST_ICEBERG_PARTITION_DATETTIME_STARTDATE, 
START_DATE);
+    mockProperties.setProperty(TEST_ICEBERG_PARTITION_DATETTIME_ENDDATE, 
END_DATE);
+
+    mockDateTimePartitionFilterPredicate = new 
IcebergDateTimePartitionFilterPredicate(
+        PARTITION_COLUMN_NAME,
+        mockTableMetadata,
+        mockProperties
+    );
+
+    mockPartition = Mockito.mock(StructLike.class);
+  }
+
+  @AfterMethod
+  public void cleanup() {
+    icebergPartitionFilterPredicateUtilMockedStatic.close();
+  }
+
+  @Test
+  public void testWhenPartitionIsNull() {
+    Assert.assertFalse(mockDateTimePartitionFilterPredicate.test(null));
+  }
+
+  @Test
+  public void testPartitionColumnNotFound() {
+    icebergPartitionFilterPredicateUtilMockedStatic.when(
+            () -> 
IcebergPartitionFilterPredicateUtil.getPartitionColumnIndex(Mockito.anyString(),
 Mockito.any(TableMetadata.class), Mockito.anyList()))
+        .thenReturn(-1);
+    verifyIllegalArgumentExceptionWithMessage("Partition column 
partitionColumn not found");
+  }
+
+  @Test
+  public void testPartitionBeforeRange() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn("2023-12-31");
+    
Assert.assertFalse(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testPartitionWithinRange() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn("2024-06-15");
+    
Assert.assertTrue(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testPartitionOnStartDate() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn(START_DATE);
+    
Assert.assertTrue(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testPartitionOnEndDate() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn(END_DATE);
+    
Assert.assertTrue(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testPartitionAfterRange() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn("2025-01-01");
+    
Assert.assertFalse(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testPartitionValueIsBlank() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn("");
+    
Assert.assertFalse(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testPartitionValueIsNull() {
+    Mockito.when(mockPartition.get(Mockito.anyInt(), 
Mockito.eq(String.class))).thenReturn(null);
+    
Assert.assertFalse(mockDateTimePartitionFilterPredicate.test(mockPartition));
+  }
+
+  @Test
+  public void testMissingPartitionPattern() {
+    mockProperties.remove(TEST_ICEBERG_PARTITION_DATETTIME_PATTERN);
+    verifyIllegalArgumentExceptionWithMessage("DateTime Partition pattern 
cannot be empty");
+  }
+
+  @Test
+  public void testInvalidPartitionPattern() {
+    mockProperties.setProperty(TEST_ICEBERG_PARTITION_DATETTIME_PATTERN, 
"invalid-pattern");
+    verifyIllegalArgumentExceptionWithMessage("Illegal pattern");
+  }
+
+  @Test
+  public void testMissingStartDate() {
+    mockProperties.remove(TEST_ICEBERG_PARTITION_DATETTIME_STARTDATE);
+    verifyIllegalArgumentExceptionWithMessage("DateTime Partition start date 
cannot be empty");
+  }

Review Comment:
   removed them





Issue Time Tracking
-------------------

    Worklog Id:     (was: 936786)
    Time Spent: 4h 20m  (was: 4h 10m)

> Support Partition Based Copy in Iceberg Distcp
> ----------------------------------------------
>
>                 Key: GOBBLIN-2159
>                 URL: https://issues.apache.org/jira/browse/GOBBLIN-2159
>             Project: Apache Gobblin
>          Issue Type: Task
>            Reporter: Vivek Rai
>            Priority: Major
>          Time Spent: 4h 20m
>  Remaining Estimate: 0h
>




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to