voonhous commented on code in PR #19204:
URL: https://github.com/apache/hudi/pull/19204#discussion_r3541572949


##########
hudi-common/src/test/java/org/apache/hudi/core/index/secondary/TestHoodieSecondaryIndex.java:
##########
@@ -0,0 +1,109 @@
+/*
+ * 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.hudi.core.index.secondary;
+
+import org.apache.hudi.exception.HoodieSecondaryIndexException;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Tests {@link HoodieSecondaryIndex}.
+ */
+public class TestHoodieSecondaryIndex {
+
+  @Test
+  public void testBuilderPopulatesAllFields() {
+    LinkedHashMap<String, Map<String, String>> columns = new LinkedHashMap<>();
+    columns.put("name", Collections.singletonMap("order", "1"));
+
+    HoodieSecondaryIndex index = HoodieSecondaryIndex.builder()
+        .setIndexName("idx_name")
+        .setIndexType("lucene")
+        .setColumns(columns)
+        .setOptions(Collections.singletonMap("k", "v"))
+        .build();
+
+    assertEquals("idx_name", index.getIndexName());
+    assertEquals(SecondaryIndexType.LUCENE, index.getIndexType());
+    assertEquals(columns, index.getColumns());
+    assertEquals(Collections.singletonMap("k", "v"), index.getOptions());
+  }
+
+  @Test
+  public void testBuilderIndexTypeIsCaseInsensitive() {
+    HoodieSecondaryIndex index = HoodieSecondaryIndex.builder()
+        .setIndexName("idx_name")
+        .setIndexType("LUCENE")
+        .setColumns(SecondaryIndexTestUtils.singleColumn("name"))
+        .setOptions(Collections.emptyMap())
+        .build();
+
+    assertEquals(SecondaryIndexType.LUCENE, index.getIndexType());
+  }
+
+  @Test
+  public void testLuceneIndexWithSingleColumnIsValid() {

Review Comment:
   The helper always builds exactly one column, so `size() == 1` can only fail 
if the helper itself breaks. Real single-column enforcement is already covered 
by `testLuceneIndexWithMultipleColumnsThrows`. Can drop this method.



##########
hudi-common/src/test/java/org/apache/hudi/core/index/secondary/TestSecondaryIndexManagerSingleton.java:
##########
@@ -0,0 +1,36 @@
+/*
+ * 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.hudi.core.index.secondary;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+/**
+ * Tests {@link SecondaryIndexManager#getInstance()} in isolation from
+ * {@link TestSecondaryIndexManager}'s mocked-metaClient fixture, which this 
test doesn't need.
+ */
+public class TestSecondaryIndexManagerSingleton {
+
+  @Test
+  public void testGetInstanceReturnsSingleton() {

Review Comment:
   A whole file for one near-tautological check. `getInstance()` is a stateless 
singleton with no `equals()` override, so this is just reference equality of 
the same instance and can't meaningfully fail. Suggest inlining it as a 
one-line method in `TestSecondaryIndexManager` and dropping this file.



##########
hudi-common/src/test/java/org/apache/hudi/common/bloom/TestSimpleBloomFilter.java:
##########
@@ -0,0 +1,126 @@
+/*
+ * 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.hudi.common.bloom;
+
+import org.apache.hudi.common.util.hash.Hash;
+
+import org.junit.jupiter.api.Test;
+
+import java.nio.ByteBuffer;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Tests {@link SimpleBloomFilter}.
+ */
+public class TestSimpleBloomFilter {
+
+  @Test
+  public void testAddAndMightContain() {

Review Comment:
   add/mightContain, `testOrMergesTwoFilters`, and 
`testSerializeToStringRoundTrip` duplicate coverage the parameterized 
`TestBloomFilter` already runs for `SIMPLE`. Worth keeping only the 
genuinely-new cases (null handling, ByteBuffer ctor, `getBloomFilterTypeCode`, 
or-with-incompatible-type) and dropping these three.



##########
hudi-common/src/test/java/org/apache/hudi/common/bloom/TestKey.java:
##########
@@ -0,0 +1,144 @@
+/*
+ * 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.hudi.common.bloom;
+
+import org.junit.jupiter.api.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Tests {@link Key}.
+ */
+public class TestKey {
+
+  @Test
+  public void testDefaultWeightIsOne() {
+    Key key = new Key("abc".getBytes());
+    assertEquals(1.0, key.getWeight());
+  }
+
+  @Test
+  public void testConstructorWithExplicitWeight() {
+    Key key = new Key("abc".getBytes(), 2.5);
+    assertEquals(2.5, key.getWeight());
+    assertArrayEquals("abc".getBytes(), key.getBytes());
+  }
+
+  @Test
+  public void testSetWithNullValueThrows() {
+    Key key = new Key();
+    assertThrows(IllegalArgumentException.class, () -> key.set(null, 1.0));
+  }
+
+  @Test
+  public void testIncrementWeightByAmount() {
+    Key key = new Key("abc".getBytes(), 1.0);
+    key.incrementWeight(2.0);
+    assertEquals(3.0, key.getWeight());
+  }
+
+  @Test
+  public void testIncrementWeightByOne() {
+    Key key = new Key("abc".getBytes(), 1.0);
+    key.incrementWeight();
+    assertEquals(2.0, key.getWeight());
+  }
+
+  @Test
+  public void testEqualsAndHashCodeForIdenticalKeys() {
+    Key key1 = new Key("abc".getBytes(), 1.0);
+    Key key2 = new Key("abc".getBytes(), 1.0);
+    assertTrue(key1.equals(key2));
+    assertEquals(key1.hashCode(), key2.hashCode());
+  }
+
+  @Test
+  public void testEqualsIsFalseForDifferentBytes() {
+    Key key1 = new Key("abc".getBytes(), 1.0);
+    Key key2 = new Key("xyz".getBytes(), 1.0);
+    assertFalse(key1.equals(key2));
+  }
+
+  @Test
+  public void testEqualsIsFalseForDifferentWeight() {
+    Key key1 = new Key("abc".getBytes(), 1.0);
+    Key key2 = new Key("abc".getBytes(), 2.0);
+    assertFalse(key1.equals(key2));
+  }
+
+  @Test
+  public void testEqualsIsFalseForNonKeyObject() {
+    Key key1 = new Key("abc".getBytes(), 1.0);
+    assertFalse(key1.equals("abc"));
+  }
+
+  @Test
+  public void testCompareToDifferentLength() {
+    Key shortKey = new Key("ab".getBytes());
+    Key longKey = new Key("abc".getBytes());
+    assertTrue(shortKey.compareTo(longKey) < 0);
+    assertTrue(longKey.compareTo(shortKey) > 0);
+  }
+
+  @Test
+  public void testCompareToSameLengthDifferentBytes() {
+    Key key1 = new Key("aac".getBytes());
+    Key key2 = new Key("abc".getBytes());
+    assertTrue(key1.compareTo(key2) < 0);
+  }
+
+  @Test
+  public void testCompareToSameBytesDifferentWeight() {
+    Key key1 = new Key("abc".getBytes(), 1.0);
+    Key key2 = new Key("abc".getBytes(), 2.0);
+    assertTrue(key1.compareTo(key2) < 0);
+    assertTrue(key2.compareTo(key1) > 0);
+  }
+
+  @Test
+  public void testCompareToEqualKeys() {
+    Key key1 = new Key("abc".getBytes(), 1.0);
+    Key key2 = new Key("abc".getBytes(), 1.0);
+    assertEquals(0, key1.compareTo(key2));
+  }
+
+  @Test
+  public void testWriteAndReadFieldsRoundTrip() throws IOException {

Review Comment:
   This write/readFields round-trip is copy-pasted here and in 
`TestInternalDynamicBloomFilter`, while sibling `TestInternalBloomFilter` 
already has a `serialize()` helper. Consider one shared package-local helper 
instead of three copies.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to