You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2024/11/08 10:20:51 UTC

(iotdb) branch auto_detect_test_only created (now 166118e6bb8)

This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a change to branch auto_detect_test_only
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 166118e6bb8 Support auto detecting the misuses of TestOnly annotation

This branch includes the following new commits:

     new 166118e6bb8 Support auto detecting the misuses of TestOnly annotation

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(iotdb) 01/01: Support auto detecting the misuses of TestOnly annotation

Posted by ji...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a commit to branch auto_detect_test_only
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 166118e6bb816ef2038f3791b0078a9a91b1ec0e
Author: Tian Jiang <jt...@163.com>
AuthorDate: Fri Nov 8 18:22:24 2024 +0800

    Support auto detecting the misuses of TestOnly annotation
---
 iotdb-core/datanode/pom.xml                        |  6 +++
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  1 -
 .../plan/planner/plan/node/write/InsertNode.java   |  1 -
 .../apache/iotdb/db/schemaengine/SchemaEngine.java |  1 -
 .../schemaengine/schemaregion/ISchemaRegion.java   |  1 -
 .../impl/pbtree/schemafile/WrappedSegment.java     |  2 -
 .../template/ClusterTemplateManager.java           |  1 -
 .../db/storageengine/dataregion/DataRegion.java    |  1 -
 .../dataregion/memtable/TsFileProcessor.java       |  1 -
 .../storageengine/dataregion/wal/WALManager.java   |  1 -
 .../wal/allocation/NodeAllocationStrategy.java     |  1 -
 .../iotdb/db/tools/utils/TsFileValidationScan.java |  1 -
 .../org/apache/iotdb/db/utils/AnnotationTest.java  | 56 ++++++++++++++++++++++
 .../org/apache/iotdb/commons/utils/TestOnly.java   |  2 +-
 14 files changed, 63 insertions(+), 13 deletions(-)

diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml
index b85da147672..8e8e5f6e232 100644
--- a/iotdb-core/datanode/pom.xml
+++ b/iotdb-core/datanode/pom.xml
@@ -378,6 +378,12 @@
             <artifactId>awaitility</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.tngtech.archunit</groupId>
+            <artifactId>archunit</artifactId>
+            <version>1.3.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 5b288d9120c..942fe993c56 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -3133,7 +3133,6 @@ public class IoTDBConfig {
     return cachedMNodeSizeInPBTreeMode;
   }
 
-  @TestOnly
   public void setCachedMNodeSizeInPBTreeMode(int cachedMNodeSizeInPBTreeMode) {
     this.cachedMNodeSizeInPBTreeMode = cachedMNodeSizeInPBTreeMode;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
index 79c85994a0b..9693a95f6a6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java
@@ -294,7 +294,6 @@ public abstract class InsertNode extends SearchNode {
   public abstract long getMinTime();
 
   // region partial insert
-  @TestOnly
   public void markFailedMeasurement(int index) {
     throw new UnsupportedOperationException();
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
index cdbe91f4e02..9b26be6543b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/SchemaEngine.java
@@ -444,7 +444,6 @@ public class SchemaEngine {
     }
   }
 
-  @TestOnly
   public ISchemaEngineStatistics getSchemaEngineStatistics() {
     return schemaEngineStatistics;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
index a120443a086..cb1e022bb7d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/ISchemaRegion.java
@@ -94,7 +94,6 @@ public interface ISchemaRegion {
 
   void forceMlog();
 
-  @TestOnly
   ISchemaRegionStatistics getSchemaRegionStatistics();
 
   ISchemaRegionMetric getSchemaRegionMetric();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java
index e46f1aea025..8d9d4032883 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/schemafile/WrappedSegment.java
@@ -902,7 +902,6 @@ public class WrappedSegment implements ISegment<ByteBuffer, ICachedMNode> {
     return null;
   }
 
-  @TestOnly
   public List<Pair<String, Short>> getKeyOffsetList() {
     short[] offsets = getOffsets();
     List<Pair<String, Short>> res = new ArrayList<>();
@@ -917,7 +916,6 @@ public class WrappedSegment implements ISegment<ByteBuffer, ICachedMNode> {
     return res;
   }
 
-  @TestOnly
   public short[] getOffsets() {
     ByteBuffer buf = this.buffer.asReadOnlyBuffer();
     short[] ofs = new short[recordNum];
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
index 4459f29ed6b..18229858ceb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
@@ -651,7 +651,6 @@ public class ClusterTemplateManager implements ITemplateManager {
     templateNameMap.put(template.getName(), template.getId());
   }
 
-  @TestOnly
   public void clear() {
     templateIdMap.clear();
     templateNameMap.clear();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index c73d93de5da..fddac6d7603 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -3940,7 +3940,6 @@ public class DataRegion implements IDataRegionForQuery {
     return lastFlushTimeMap;
   }
 
-  @TestOnly
   public TsFileManager getTsFileManager() {
     return tsFileManager;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
index f1dde34972f..249d6f3d04a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessor.java
@@ -2328,7 +2328,6 @@ public class TsFileProcessor {
         && (workMemTable == null || workMemTable.getTotalPointsNum() == 0);
   }
 
-  @TestOnly
   public IMemTable getWorkMemTable() {
     return workMemTable;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
index 42f79ea310a..b3bca40ce29 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/WALManager.java
@@ -309,7 +309,6 @@ public class WALManager implements IService {
     }
   }
 
-  @TestOnly
   public void clear() {
     totalDiskUsage.set(0);
     walNodesManager.clear();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/allocation/NodeAllocationStrategy.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/allocation/NodeAllocationStrategy.java
index 3824bf3efd8..b7d9313a1fd 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/allocation/NodeAllocationStrategy.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/allocation/NodeAllocationStrategy.java
@@ -37,6 +37,5 @@ public interface NodeAllocationStrategy {
   /** Get all wal nodes num. Not thread-safe, used for metrics only. */
   int getNodesNum();
 
-  @TestOnly
   void clear();
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileValidationScan.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileValidationScan.java
index 1e6c6e2268e..6df98c5e792 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileValidationScan.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/tools/utils/TsFileValidationScan.java
@@ -352,7 +352,6 @@ public class TsFileValidationScan extends TsFileSequenceScan {
     return badFileNum;
   }
 
-  @TestOnly
   public void setBadFileNum(int badFileNum) {
     this.badFileNum = badFileNum;
   }
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/AnnotationTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/AnnotationTest.java
new file mode 100644
index 00000000000..080529e0d61
--- /dev/null
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/AnnotationTest.java
@@ -0,0 +1,56 @@
+/*
+ * 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.iotdb.db.utils;
+
+import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.methods;
+
+import com.tngtech.archunit.core.domain.JavaClass;
+import com.tngtech.archunit.core.domain.JavaClasses;
+import com.tngtech.archunit.core.domain.properties.CanBeAnnotated;
+import com.tngtech.archunit.core.importer.ClassFileImporter;
+import com.tngtech.archunit.core.importer.ImportOption;
+import com.tngtech.archunit.core.importer.ImportOption.DoNotIncludeTests;
+import com.tngtech.archunit.lang.ArchRule;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.iotdb.commons.utils.TestOnly;
+import org.junit.Test;
+
+public class AnnotationTest {
+
+  @Test
+  public void checkTestOnly() {
+    JavaClasses productionClasses = new ClassFileImporter().withImportOption(new DoNotIncludeTests()).importPackages("org.apache.iotdb");
+    JavaClasses testClasses = new ClassFileImporter().withImportOption(new ImportOption.OnlyIncludeTests()).importPackages("org.apache.iotdb");
+
+    List<Class> testReflectedClasses = new ArrayList<>();
+    for (JavaClass testClass : testClasses) {
+      testReflectedClasses.add(testClass.reflect());
+    }
+
+    ArchRule rule = methods().that().areAnnotatedWith(TestOnly.class).
+        should().onlyBeCalled()
+        .byClassesThat().belongToAnyOf(testReflectedClasses.toArray(new Class[0])).
+        orShould().onlyBeCalled().byMethodsThat(
+            CanBeAnnotated.Predicates.annotatedWith(TestOnly.class)); // see next section
+
+    rule.check(productionClasses);
+  }
+}
diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java
index d31cbc83195..77c723deec5 100644
--- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java
+++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TestOnly.java
@@ -30,5 +30,5 @@ import java.lang.annotation.Target;
  * functionality is not guaranteed and may interfere with the normal code.
  */
 @Target({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.TYPE})
-@Retention(RetentionPolicy.SOURCE)
+@Retention(RetentionPolicy.CLASS)
 public @interface TestOnly {}