You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2019/10/17 12:00:44 UTC

[incubator-iotdb] branch master updated: [IOTDB-165][TsFile] Delete a current version and add a number version and an exception. (#409)

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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new a8d283e  [IOTDB-165][TsFile] Delete a current version and add a number version and an exception. (#409)
a8d283e is described below

commit a8d283e0778bc8759a70092a4b5a5c83bd55302d
Author: Boris <zh...@gmail.com>
AuthorDate: Thu Oct 17 20:00:35 2019 +0800

    [IOTDB-165][TsFile] Delete a current version and add a number version and an exception. (#409)
    
    *  change magic string and add version in TsFile
---
 pom.xml                                            |   2 +-
 tsfile/format-changelist.md                        |   3 +-
 .../iotdb/tsfile/common/conf/TSFileConfig.java     |   8 +-
 .../tsfile/exception/NotCompatibleException.java   |  27 ++++
 .../iotdb/tsfile/file/metadata/TsFileMetaData.java |  30 +----
 .../iotdb/tsfile/read/TsFileRestorableReader.java  |   2 +-
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  70 ++++++----
 .../write/writer/RestorableTsFileIOWriter.java     |   2 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |   6 +-
 .../file/metadata/ChunkGroupMetaDataTest.java      |   4 +-
 .../tsfile/file/metadata/utils/TestHelper.java     |   3 +-
 .../iotdb/tsfile/file/metadata/utils/Utils.java    |   1 -
 .../tsfile/read/TsFileRestorableReaderTest.java    |   6 +-
 .../tsfile/read/TsFileSequenceReaderTest.java      |  20 ++-
 .../iotdb/tsfile/read/filter/DigestFilterTest.java |  72 +++++-----
 .../read/filter/IExpressionOptimizerTest.java      |  22 ++-
 .../read/filter/MinTimeMaxTimeFilterTest.java      | 150 ++++++++++-----------
 .../iotdb/tsfile/read/filter/OperatorTest.java     | 102 +++++++-------
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |   5 +-
 19 files changed, 279 insertions(+), 256 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4df42de..b67e0be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -355,7 +355,7 @@
             <dependency>
                 <groupId>org.xerial.snappy</groupId>
                 <artifactId>snappy-java</artifactId>
-                <version>1.0.5-M1</version>
+                <version>1.1.7.2</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.thrift</groupId>
diff --git a/tsfile/format-changelist.md b/tsfile/format-changelist.md
index bc76116..f853ead 100644
--- a/tsfile/format-changelist.md
+++ b/tsfile/format-changelist.md
@@ -20,5 +20,6 @@
 -->
 
 ## 0.8.0 (version-0) -> version-1
-
+format: #PR ID change
+#409 Genius_pig Delete a current version and add a number version.
 * 
\ No newline at end of file
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileConfig.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileConfig.java
index 53ce4cc..9350576 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileConfig.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/common/conf/TSFileConfig.java
@@ -50,11 +50,9 @@ public class TSFileConfig {
   public static final String STRING_ENCODING = "UTF-8";
   public static final Charset STRING_CHARSET = Charset.forName(STRING_ENCODING);
   public static final String CONFIG_FILE_NAME = "tsfile-format.properties";
-  public static final String MAGIC_STRING = "TsFilev0.8.0";
-  /**
-   * Current version is 3.
-   */
-  public static final int CURRENT_VERSION = 3;
+  public static final String MAGIC_STRING = "TsFile";
+  public static final String VERSION_NUMBER = "000001";
+
   /**
    * The default grow size of class BatchData.
    */
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleException.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleException.java
new file mode 100644
index 0000000..7fc78e6
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotCompatibleException.java
@@ -0,0 +1,27 @@
+/*
+ * 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.tsfile.exception;
+
+public class NotCompatibleException extends TsFileRuntimeException {
+
+  private static final long serialVersionUID = -3765109817887078265L;
+  public NotCompatibleException(String message) {
+    super(message);
+  }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java
index 199e736..04d58d5 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java
@@ -43,12 +43,7 @@ public class TsFileMetaData {
    * TSFile schema for this file. This schema contains metadata for all the measurements.
    */
   private Map<String, MeasurementSchema> measurementSchema = new HashMap<>();
-
-  /**
-   * Version of this file.
-   */
-  private int currentVersion;
-
+  
   /**
    * String for application that wrote this file. This should be in the format [Application] version
    * [App Version](build [App Build Hash]). e.g. impala version 1.0 (build SHA-1_hash_code)
@@ -69,13 +64,11 @@ public class TsFileMetaData {
    * construct function for TsFileMetaData.
    *
    * @param measurementSchema - time series info list
-   * @param currentVersion - current version
    */
   public TsFileMetaData(Map<String, TsDeviceMetadataIndex> deviceMap,
-      Map<String, MeasurementSchema> measurementSchema, int currentVersion) {
+      Map<String, MeasurementSchema> measurementSchema) {
     this.deviceIndexMap = deviceMap;
     this.measurementSchema = measurementSchema;
-    this.currentVersion = currentVersion;
   }
 
   /**
@@ -112,8 +105,6 @@ public class TsFileMetaData {
       }
     }
 
-    fileMetaData.currentVersion = ReadWriteIOUtils.readInt(inputStream);
-
     if (ReadWriteIOUtils.readIsNull(inputStream)) {
       fileMetaData.createdBy = ReadWriteIOUtils.readString(inputStream);
     }
@@ -157,8 +148,6 @@ public class TsFileMetaData {
       }
     }
 
-    fileMetaData.currentVersion = ReadWriteIOUtils.readInt(buffer);
-
     if (ReadWriteIOUtils.readIsNull(buffer)) {
       fileMetaData.createdBy = ReadWriteIOUtils.readString(buffer);
     }
@@ -180,16 +169,7 @@ public class TsFileMetaData {
   @Override
   public String toString() {
     return "TsFileMetaData{" + "deviceIndexMap=" + deviceIndexMap + ", measurementSchema="
-        + measurementSchema
-        + ", CURRENT_VERSION=" + currentVersion + ", createdBy='" + createdBy + '\'' + '}';
-  }
-
-  public int getCurrentVersion() {
-    return currentVersion;
-  }
-
-  public void setCurrentVersion(int currentVersion) {
-    this.currentVersion = currentVersion;
+        + measurementSchema + ", createdBy='" + createdBy + '\'' + '}';
   }
 
   public String getCreatedBy() {
@@ -259,8 +239,6 @@ public class TsFileMetaData {
       byteLen += entry.getValue().serializeTo(outputStream);
     }
 
-    byteLen += ReadWriteIOUtils.write(currentVersion, outputStream);
-
     byteLen += ReadWriteIOUtils.writeIsNull(createdBy, outputStream);
     if (createdBy != null) {
       byteLen += ReadWriteIOUtils.write(createdBy, outputStream);
@@ -293,8 +271,6 @@ public class TsFileMetaData {
       byteLen += entry.getValue().serializeTo(buffer);
     }
 
-    byteLen += ReadWriteIOUtils.write(currentVersion, buffer);
-
     byteLen += ReadWriteIOUtils.writeIsNull(createdBy, buffer);
     if (createdBy != null) {
       byteLen += ReadWriteIOUtils.write(createdBy, buffer);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileRestorableReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileRestorableReader.java
index 3efa599..309b3b9 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileRestorableReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileRestorableReader.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index 88d636d..4f8654e 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -18,9 +18,21 @@
  */
 package org.apache.iotdb.tsfile.read;
 
+import static org.apache.iotdb.tsfile.write.writer.TsFileIOWriter.magicStringBytes;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.compress.IUnCompressor;
+import org.apache.iotdb.tsfile.exception.NotCompatibleException;
 import org.apache.iotdb.tsfile.file.MetaMarker;
 import org.apache.iotdb.tsfile.file.footer.ChunkGroupFooter;
 import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -40,14 +52,6 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.file.Paths;
-import java.util.*;
-
-import static org.apache.iotdb.tsfile.write.writer.TsFileIOWriter.magicStringBytes;
-
 public class TsFileSequenceReader implements AutoCloseable {
 
   private static final Logger logger = LoggerFactory.getLogger(TsFileSequenceReader.class);
@@ -66,8 +70,8 @@ public class TsFileSequenceReader implements AutoCloseable {
 
   /**
    * Create a file reader of the given file. The reader will read the tail of the file to get the
-   * file metadata size.Then the reader will skip the first TSFileConfig.MAGIC_STRING.length() bytes
-   * of the file for preparing reading real data.
+   * file metadata size.Then the reader will skip the first TSFileConfig.MAGIC_STRING.getBytes().length +
+   * TSFileConfig.NUMBER_VERSION.getBytes().length bytes of the file for preparing reading real data.
    *
    * @param file the data file
    * @throws IOException If some I/O error occurs
@@ -80,7 +84,7 @@ public class TsFileSequenceReader implements AutoCloseable {
    * construct function for TsFileSequenceReader.
    *
    * @param file -given file name
-   * @param loadMetadataSize -load meta data size
+   * @param loadMetadataSize -whether load meta data size
    */
   public TsFileSequenceReader(String file, boolean loadMetadataSize) throws IOException {
     this.file = file;
@@ -106,8 +110,8 @@ public class TsFileSequenceReader implements AutoCloseable {
 
   /**
    * Create a file reader of the given file. The reader will read the tail of the file to get the
-   * file metadata size.Then the reader will skip the first TSFileConfig.MAGIC_STRING.length() bytes
-   * of the file for preparing reading real data.
+   * file metadata size.Then the reader will skip the first TSFileConfig.MAGIC_STRING.getBytes().length +
+   * TSFileConfig.NUMBER_VERSION.getBytes().length bytes of the file for preparing reading real data.
    *
    * @param input given input
    */
@@ -152,14 +156,12 @@ public class TsFileSequenceReader implements AutoCloseable {
   public void loadMetadataSize() throws IOException {
     ByteBuffer metadataSize = ByteBuffer.allocate(Integer.BYTES);
     tsFileInput.read(metadataSize,
-        tsFileInput.size() - TSFileConfig.MAGIC_STRING.length() - Integer.BYTES);
+        tsFileInput.size() - TSFileConfig.MAGIC_STRING.getBytes().length - Integer.BYTES);
     metadataSize.flip();
     // read file metadata size and position
     fileMetadataSize = ReadWriteIOUtils.readInt(metadataSize);
     fileMetadataPos =
-        tsFileInput.size() - TSFileConfig.MAGIC_STRING.length() - Integer.BYTES - fileMetadataSize;
-    // skip the magic header
-    tsFileInput.position(TSFileConfig.MAGIC_STRING.length());
+        tsFileInput.size() - TSFileConfig.MAGIC_STRING.getBytes().length - Integer.BYTES - fileMetadataSize;
   }
 
   public long getFileMetadataPos() {
@@ -176,8 +178,8 @@ public class TsFileSequenceReader implements AutoCloseable {
   public String readTailMagic() throws IOException {
     long totalSize = tsFileInput.size();
 
-    ByteBuffer magicStringBytes = ByteBuffer.allocate(TSFileConfig.MAGIC_STRING.length());
-    tsFileInput.read(magicStringBytes, totalSize - TSFileConfig.MAGIC_STRING.length());
+    ByteBuffer magicStringBytes = ByteBuffer.allocate(TSFileConfig.MAGIC_STRING.getBytes().length);
+    tsFileInput.read(magicStringBytes, totalSize - TSFileConfig.MAGIC_STRING.getBytes().length);
     magicStringBytes.flip();
     return new String(magicStringBytes.array());
   }
@@ -186,8 +188,8 @@ public class TsFileSequenceReader implements AutoCloseable {
    * whether the file is a complete TsFile: only if the head magic and tail magic string exists.
    */
   public boolean isComplete() throws IOException {
-    return tsFileInput.size() >= TSFileConfig.MAGIC_STRING.length() * 2 && readTailMagic()
-        .equals(readHeadMagic());
+    return tsFileInput.size() >= TSFileConfig.MAGIC_STRING.getBytes().length * 2 + TSFileConfig.VERSION_NUMBER.getBytes().length &&
+        readTailMagic().equals(readHeadMagic());
   }
 
   /**
@@ -204,7 +206,7 @@ public class TsFileSequenceReader implements AutoCloseable {
    * to the end of the magic head string.
    */
   public String readHeadMagic(boolean movePosition) throws IOException {
-    ByteBuffer magicStringBytes = ByteBuffer.allocate(TSFileConfig.MAGIC_STRING.length());
+    ByteBuffer magicStringBytes = ByteBuffer.allocate(TSFileConfig.MAGIC_STRING.getBytes().length);
     if (movePosition) {
       tsFileInput.position(0);
       tsFileInput.read(magicStringBytes);
@@ -216,6 +218,21 @@ public class TsFileSequenceReader implements AutoCloseable {
   }
 
   /**
+   * this function reads version number and checks compatibility of TsFile.
+   */
+  public String readVersionNumber() throws IOException, NotCompatibleException {
+    ByteBuffer versionNumberBytes = ByteBuffer.allocate(TSFileConfig.VERSION_NUMBER.getBytes().length);
+    tsFileInput.read(versionNumberBytes, TSFileConfig.MAGIC_STRING.getBytes().length);
+    versionNumberBytes.flip();
+    String versionNumberString = new String(versionNumberBytes.array());
+    if(!versionNumberString.equals(TSFileConfig.VERSION_NUMBER)) {
+      throw new NotCompatibleException("TsFile isn't compatible. " + TSFileConfig.MAGIC_STRING +
+          TSFileConfig.VERSION_NUMBER + " is expected.");
+    }
+    return versionNumberString;
+  }
+
+  /**
    * this function does not modify the position of the file reader.
    */
   public TsFileMetaData readFileMetadata() throws IOException {
@@ -237,7 +254,7 @@ public class TsFileSequenceReader implements AutoCloseable {
       return data.get();
     } else {
       //no real data
-      return TSFileConfig.MAGIC_STRING.length();
+      return TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length;
     }
   }
 
@@ -521,15 +538,16 @@ public class TsFileSequenceReader implements AutoCloseable {
     long endOffsetOfChunkGroup;
     long versionOfChunkGroup = 0;
 
-    if (fileSize < TSFileConfig.MAGIC_STRING.length()) {
+    if (fileSize < TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length) {
       return TsFileCheckStatus.INCOMPATIBLE_FILE;
     }
     String magic = readHeadMagic(true);
+    tsFileInput.position(TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length);
     if (!magic.equals(TSFileConfig.MAGIC_STRING)) {
       return TsFileCheckStatus.INCOMPATIBLE_FILE;
     }
 
-    if (fileSize == TSFileConfig.MAGIC_STRING.length()) {
+    if (fileSize == TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length) {
       return TsFileCheckStatus.ONLY_MAGIC_HEAD;
     } else if (readTailMagic().equals(magic)) {
       loadMetadataSize();
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
index b988f12..b09a133 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
@@ -100,7 +100,7 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter {
               String.format("%s is not in TsFile format.", file.getAbsolutePath()));
         } else if (truncatedPosition == TsFileCheckStatus.ONLY_MAGIC_HEAD) {
           crashed = true;
-          out.truncate(TSFileConfig.MAGIC_STRING.length());
+          out.truncate(TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length);
         } else {
           crashed = true;
           //remove broken data
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
index ce13f16..95d2794 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
@@ -63,11 +63,13 @@ import org.slf4j.LoggerFactory;
 public class TsFileIOWriter {
 
   public static final byte[] magicStringBytes;
+  public static final byte[] versionNumberBytes;
   private static final Logger logger = LoggerFactory.getLogger(TsFileIOWriter.class);
   protected static final TSFileConfig config = TSFileDescriptor.getInstance().getConfig();
 
   static {
     magicStringBytes = BytesUtils.stringToBytes(TSFileConfig.MAGIC_STRING);
+    versionNumberBytes = TSFileConfig.VERSION_NUMBER.getBytes();
   }
 
   protected TsFileOutput out;
@@ -141,6 +143,7 @@ public class TsFileIOWriter {
 
   protected void startFile() throws IOException {
     out.write(magicStringBytes);
+    out.write(versionNumberBytes);
   }
 
   /**
@@ -263,8 +266,7 @@ public class TsFileIOWriter {
     Map<String, TsDeviceMetadataIndex> tsDeviceMetadataIndexMap = flushTsDeviceMetaDataAndGetIndex(
         this.chunkGroupMetaDataList);
 
-    TsFileMetaData tsFileMetaData = new TsFileMetaData(tsDeviceMetadataIndexMap, schemaDescriptors,
-        TSFileConfig.CURRENT_VERSION);
+    TsFileMetaData tsFileMetaData = new TsFileMetaData(tsDeviceMetadataIndexMap, schemaDescriptors);
     tsFileMetaData.setTotalChunkNum(totalChunkNum);
     tsFileMetaData.setInvalidChunkNum(invalidChunkNum);
 
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java
index 6439120..afa93fb 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/ChunkGroupMetaDataTest.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
 import org.apache.iotdb.tsfile.file.MetaMarker;
 import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -41,7 +42,7 @@ import org.junit.Test;
 public class ChunkGroupMetaDataTest {
 
   public static final String DELTA_OBJECT_UID = "delta-3312";
-  final static String PATH = "target/outputChunkGroup.tsfile";
+  private final static String PATH = "target/outputChunkGroup.tsfile";
   private static String testDataFile;
 
   @BeforeClass
@@ -64,6 +65,7 @@ public class ChunkGroupMetaDataTest {
   @Test
   public void testOffset() throws IOException {
     TsFileSequenceReader reader = new TsFileSequenceReader(testDataFile);
+    reader.position(TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length);
     TsFileMetaData metaData = reader.readFileMetadata();
     List<Pair<Long, Long>> offsetList = new ArrayList<>();
     long startOffset = reader.position();
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
index 1f5954f..80a3002 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/TestHelper.java
@@ -53,8 +53,7 @@ public class TestHelper {
   private static final String LAST_VALUE = "222";
 
   public static TsFileMetaData createSimpleFileMetaData() {
-    TsFileMetaData metaData = new TsFileMetaData(generateDeviceIndexMetadataMap(), new HashMap<>(),
-        TsFileMetaDataTest.VERSION);
+    TsFileMetaData metaData = new TsFileMetaData(generateDeviceIndexMetadataMap(), new HashMap<>());
     metaData.addMeasurementSchema(TestHelper.createSimpleMeasurementSchema());
     metaData.addMeasurementSchema(TestHelper.createSimpleMeasurementSchema());
     metaData.setCreatedBy(TsFileMetaDataTest.CREATED_BY);
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
index 4f16b7f..a2d5813 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/utils/Utils.java
@@ -198,7 +198,6 @@ public class Utils {
         }
       }
 
-      assertEquals(metadata1.getCurrentVersion(), metadata2.getCurrentVersion());
       assertEquals(metadata1.getCreatedBy(), metadata2.getCreatedBy());
     }
   }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileRestorableReaderTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileRestorableReaderTest.java
index 5ab53f7..f480994 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileRestorableReaderTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileRestorableReaderTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -20,6 +20,7 @@
 package org.apache.iotdb.tsfile.read;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -48,12 +49,13 @@ public class TsFileRestorableReaderTest {
     assertTrue(file.delete());
   }
 
-  @Test(expected = IllegalArgumentException.class)
+  @Test
   public void testToReadDamagedFileNoRepair() throws IOException {
     File file = TSFileFactory.INSTANCE.getFile(FILE_PATH);
 
     TsFileGeneratorForTest.writeFileWithOneIncompleteChunkHeader(file);
     // This should throw an Illegal Argument Exception
     TsFileSequenceReader reader = new TsFileRestorableReader(FILE_PATH, false);
+    assertFalse(reader.isComplete());
   }
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
index c8e9678..c149aaa 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileSequenceReaderTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
 import org.apache.iotdb.tsfile.file.MetaMarker;
 import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -32,39 +33,36 @@ import org.apache.iotdb.tsfile.file.metadata.ChunkGroupMetaData;
 import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadata;
 import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadataIndex;
 import org.apache.iotdb.tsfile.file.metadata.TsFileMetaData;
+import org.apache.iotdb.tsfile.utils.FileGenerator;
 import org.apache.iotdb.tsfile.utils.Pair;
-import org.apache.iotdb.tsfile.utils.TsFileGeneratorForTest;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
 public class TsFileSequenceReaderTest {
 
-  private static final String FILE_PATH = TsFileGeneratorForTest.outputDataFile;
-  private TsFileSequenceReader fileReader;
-  private int rowCount = 1000;
+  private static final String FILE_PATH = FileGenerator.outputDataFile;
   private ReadOnlyTsFile tsFile;
 
   @Before
   public void before() throws InterruptedException, WriteProcessException, IOException {
-    TsFileGeneratorForTest.generateFile(rowCount, 16 * 1024 * 1024, 10000);
-    fileReader = new TsFileSequenceReader(FILE_PATH);
+    int rowCount = 1000;
+    FileGenerator.generateFile(rowCount, 10000);
+    TsFileSequenceReader fileReader = new TsFileSequenceReader(FILE_PATH);
     tsFile = new ReadOnlyTsFile(fileReader);
   }
 
   @After
   public void after() throws IOException {
     tsFile.close();
-    TsFileGeneratorForTest.after();
+    FileGenerator.after();
   }
 
   @Test
   public void testReadTsFileSequently() throws IOException {
     TsFileSequenceReader reader = new TsFileSequenceReader(FILE_PATH);
+    reader.position(TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length);
     TsFileMetaData metaData = reader.readFileMetadata();
     List<Pair<Long, Long>> offsetList = new ArrayList<>();
     long startOffset = reader.position();
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java
index 8811a34..68b0f0e 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/DigestFilterTest.java
@@ -38,79 +38,79 @@ public class DigestFilterTest {
   @Test
   public void testEq() {
     Filter timeEq = TimeFilter.eq(10L);
-    Assert.assertEquals(true, timeEq.satisfy(digest1));
-    Assert.assertEquals(false, timeEq.satisfy(digest2));
-    Assert.assertEquals(false, timeEq.satisfy(digest3));
+    Assert.assertTrue(timeEq.satisfy(digest1));
+    Assert.assertFalse(timeEq.satisfy(digest2));
+    Assert.assertFalse(timeEq.satisfy(digest3));
 
     Filter valueEq = ValueFilter.eq(100);
-    Assert.assertEquals(true, valueEq.satisfy(digest1));
-    Assert.assertEquals(false, valueEq.satisfy(digest2));
-    Assert.assertEquals(true, valueEq.satisfy(digest3));
+    Assert.assertTrue(valueEq.satisfy(digest1));
+    Assert.assertFalse(valueEq.satisfy(digest2));
+    Assert.assertTrue(valueEq.satisfy(digest3));
   }
 
   @Test
   public void testGt() {
     Filter timeGt = TimeFilter.gt(100L);
-    Assert.assertEquals(false, timeGt.satisfy(digest1));
-    Assert.assertEquals(true, timeGt.satisfy(digest2));
-    Assert.assertEquals(true, timeGt.satisfy(digest3));
+    Assert.assertFalse(timeGt.satisfy(digest1));
+    Assert.assertTrue(timeGt.satisfy(digest2));
+    Assert.assertTrue(timeGt.satisfy(digest3));
 
     Filter valueGt = ValueFilter.gt(100);
-    Assert.assertEquals(false, valueGt.satisfy(digest1));
-    Assert.assertEquals(true, valueGt.satisfy(digest2));
-    Assert.assertEquals(true, valueGt.satisfy(digest3));
+    Assert.assertFalse(valueGt.satisfy(digest1));
+    Assert.assertTrue(valueGt.satisfy(digest2));
+    Assert.assertTrue(valueGt.satisfy(digest3));
   }
 
   @Test
   public void testGtEq() {
     Filter timeGtEq = TimeFilter.gtEq(100L);
-    Assert.assertEquals(true, timeGtEq.satisfy(digest1));
-    Assert.assertEquals(true, timeGtEq.satisfy(digest2));
-    Assert.assertEquals(true, timeGtEq.satisfy(digest3));
+    Assert.assertTrue(timeGtEq.satisfy(digest1));
+    Assert.assertTrue(timeGtEq.satisfy(digest2));
+    Assert.assertTrue(timeGtEq.satisfy(digest3));
 
     Filter valueGtEq = ValueFilter.gtEq(100);
-    Assert.assertEquals(true, valueGtEq.satisfy(digest1));
-    Assert.assertEquals(true, valueGtEq.satisfy(digest3));
-    Assert.assertEquals(true, valueGtEq.satisfy(digest3));
+    Assert.assertTrue(valueGtEq.satisfy(digest1));
+    Assert.assertTrue(valueGtEq.satisfy(digest3));
+    Assert.assertTrue(valueGtEq.satisfy(digest3));
   }
 
   @Test
   public void testLt() {
     Filter timeLt = TimeFilter.lt(101L);
-    Assert.assertEquals(true, timeLt.satisfy(digest1));
-    Assert.assertEquals(false, timeLt.satisfy(digest2));
-    Assert.assertEquals(false, timeLt.satisfy(digest3));
+    Assert.assertTrue(timeLt.satisfy(digest1));
+    Assert.assertFalse(timeLt.satisfy(digest2));
+    Assert.assertFalse(timeLt.satisfy(digest3));
 
     Filter valueLt = ValueFilter.lt(101);
-    Assert.assertEquals(true, valueLt.satisfy(digest1));
-    Assert.assertEquals(false, valueLt.satisfy(digest2));
-    Assert.assertEquals(true, valueLt.satisfy(digest3));
+    Assert.assertTrue(valueLt.satisfy(digest1));
+    Assert.assertFalse(valueLt.satisfy(digest2));
+    Assert.assertTrue(valueLt.satisfy(digest3));
   }
 
   @Test
   public void testLtEq() {
     Filter timeLtEq = TimeFilter.ltEq(101L);
-    Assert.assertEquals(true, timeLtEq.satisfy(digest1));
-    Assert.assertEquals(true, timeLtEq.satisfy(digest2));
-    Assert.assertEquals(true, timeLtEq.satisfy(digest3));
+    Assert.assertTrue(timeLtEq.satisfy(digest1));
+    Assert.assertTrue(timeLtEq.satisfy(digest2));
+    Assert.assertTrue(timeLtEq.satisfy(digest3));
 
     Filter valueLtEq = ValueFilter.ltEq(101);
-    Assert.assertEquals(true, valueLtEq.satisfy(digest1));
-    Assert.assertEquals(true, valueLtEq.satisfy(digest2));
-    Assert.assertEquals(true, valueLtEq.satisfy(digest3));
+    Assert.assertTrue(valueLtEq.satisfy(digest1));
+    Assert.assertTrue(valueLtEq.satisfy(digest2));
+    Assert.assertTrue(valueLtEq.satisfy(digest3));
   }
 
   @Test
   public void testAndOr() {
     Filter andFilter = FilterFactory.and(TimeFilter.gt(10L), ValueFilter.lt(50));
-    Assert.assertEquals(true, andFilter.satisfy(digest1));
-    Assert.assertEquals(false, andFilter.satisfy(digest2));
-    Assert.assertEquals(true, andFilter.satisfy(digest3));
+    Assert.assertTrue(andFilter.satisfy(digest1));
+    Assert.assertFalse(andFilter.satisfy(digest2));
+    Assert.assertTrue(andFilter.satisfy(digest3));
 
     Filter orFilter = FilterFactory.or(andFilter, TimeFilter.eq(200L));
-    Assert.assertEquals(true, orFilter.satisfy(digest1));
-    Assert.assertEquals(true, orFilter.satisfy(digest2));
-    Assert.assertEquals(true, orFilter.satisfy(digest3));
+    Assert.assertTrue(orFilter.satisfy(digest1));
+    Assert.assertTrue(orFilter.satisfy(digest2));
+    Assert.assertTrue(orFilter.satisfy(digest3));
   }
 
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/IExpressionOptimizerTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/IExpressionOptimizerTest.java
index 3cdee57..8bf416d 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/IExpressionOptimizerTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/IExpressionOptimizerTest.java
@@ -27,7 +27,6 @@ import org.apache.iotdb.tsfile.read.expression.impl.BinaryExpression;
 import org.apache.iotdb.tsfile.read.expression.impl.GlobalTimeExpression;
 import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
 import org.apache.iotdb.tsfile.read.expression.util.ExpressionOptimizer;
-import org.apache.iotdb.tsfile.read.expression.util.ExpressionPrinter;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 import org.apache.iotdb.tsfile.read.filter.factory.FilterFactory;
 import org.junit.After;
@@ -67,7 +66,7 @@ public class IExpressionOptimizerTest {
           new GlobalTimeExpression(TimeFilter.gt(200L)));
 
     } catch (QueryFilterOptimizationException e) {
-      e.printStackTrace();
+      Assert.fail();
     }
 
   }
@@ -96,12 +95,11 @@ public class IExpressionOptimizerTest {
       IExpression expression = BinaryExpression
           .and(BinaryExpression.or(singleSeriesExp1, singleSeriesExp2),
               singleSeriesExp3);
-      Assert.assertEquals(true,
-          expression.toString()
-              .equals(expressionOptimizer.optimize(expression, selectedSeries).toString()));
+      Assert.assertEquals(expression.toString(),
+          expressionOptimizer.optimize(expression, selectedSeries).toString());
 
     } catch (QueryFilterOptimizationException e) {
-      e.printStackTrace();
+      Assert.fail();
     }
   }
 
@@ -123,7 +121,7 @@ public class IExpressionOptimizerTest {
     try {
       String rightRet = "[[d2.s1:((value > 100 || value < 50) && time < 14001234)] || [d1.s2:((value > 100.5 || value < 50.6) && time < 14001234)]]";
       IExpression regularFilter = expressionOptimizer.optimize(expression, selectedSeries);
-      Assert.assertEquals(true, rightRet.equals(regularFilter.toString()));
+      Assert.assertEquals(rightRet, regularFilter.toString());
     } catch (QueryFilterOptimizationException e) {
       Assert.fail();
     }
@@ -147,7 +145,7 @@ public class IExpressionOptimizerTest {
     try {
       String rightRet = "[[[[[d1.s1:time > 1] || [d2.s1:time > 1]] || [d1.s2:time > 1]] || [d2.s2:time > 1]] || [d2.s1:((value > 100 || value < 50) && time < 14001234)]]";
       IExpression regularFilter = expressionOptimizer.optimize(expression, selectedSeries);
-      Assert.assertEquals(true, rightRet.equals(regularFilter.toString()));
+      Assert.assertEquals(rightRet, regularFilter.toString());
     } catch (QueryFilterOptimizationException e) {
       Assert.fail();
     }
@@ -167,7 +165,7 @@ public class IExpressionOptimizerTest {
     try {
       String rightRet = "[d2.s1:((value > 100 || value < 50) && time < 14001234)]";
       IExpression regularFilter = expressionOptimizer.optimize(expression, selectedSeries);
-      Assert.assertEquals(true, rightRet.equals(regularFilter.toString()));
+      Assert.assertEquals(rightRet, regularFilter.toString());
     } catch (QueryFilterOptimizationException e) {
       Assert.fail();
     }
@@ -194,7 +192,7 @@ public class IExpressionOptimizerTest {
           "[[[[[d1.s1:time < 14001234] || [d2.s1:time < 14001234]] || [d1.s2:time < 14001234]] "
               + "|| [d2.s2:time < 14001234]] || [[d2.s1:(value > 100 || value < 50)] || [d1.s2:(value > 100.5 || value < 50.6)]]]";
       IExpression regularFilter = expressionOptimizer.optimize(expression, selectedSeries);
-      Assert.assertEquals(true, rightRet.equals(regularFilter.toString()));
+      Assert.assertEquals(rightRet, regularFilter.toString());
     } catch (QueryFilterOptimizationException e) {
       Assert.fail();
     }
@@ -222,7 +220,7 @@ public class IExpressionOptimizerTest {
               + "&& time > 14001000)]] || [d1.s2:(time < 14001234 && time > 14001000)]] || [d2.s2:(time < 14001234 "
               + "&& time > 14001000)]] || [[d2.s1:(value > 100 || value < 50)] || [d1.s2:(value > 100.5 || value < 50.6)]]]";
       IExpression regularFilter = expressionOptimizer.optimize(expression, selectedSeries);
-      Assert.assertEquals(true, rightRet.equals(regularFilter.toString()));
+      Assert.assertEquals(rightRet, regularFilter.toString());
     } catch (QueryFilterOptimizationException e) {
       Assert.fail();
     }
@@ -236,7 +234,7 @@ public class IExpressionOptimizerTest {
           "[[d2.s1:((value > 100 || value < 50) && (time < 14001234 && time > 14001000))] || "
               + "[d1.s2:((value > 100.5 || value < 50.6) && (time < 14001234 && time > 14001000))]]";
       IExpression regularFilter2 = expressionOptimizer.optimize(expression2, selectedSeries);
-      Assert.assertEquals(true, rightRet2.equals(regularFilter2.toString()));
+      Assert.assertEquals(rightRet2, regularFilter2.toString());
     } catch (QueryFilterOptimizationException e) {
       Assert.fail();
     }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/MinTimeMaxTimeFilterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/MinTimeMaxTimeFilterTest.java
index c829146..5a16c85 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/MinTimeMaxTimeFilterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/MinTimeMaxTimeFilterTest.java
@@ -31,179 +31,179 @@ public class MinTimeMaxTimeFilterTest {
   @Test
   public void testEq() {
     Filter timeEq = TimeFilter.eq(10L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.eq(100L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, minTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, minTime));
 
     timeEq = TimeFilter.eq(150L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.eq(200L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.eq(300L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     Filter valueEq = ValueFilter.eq(100);
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
   }
 
   @Test
   public void testGt() {
     Filter timeEq = TimeFilter.gt(10L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.gt(100L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.gt(200L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.gt(300L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     Filter valueEq = ValueFilter.gt(100);
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, valueEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.containStartEndTime(minTime, maxTime));
   }
 
   @Test
   public void testGtEq() {
     Filter timeEq = TimeFilter.gtEq(10L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.gtEq(100L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.gtEq(200L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.gtEq(300L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     Filter valueEq = ValueFilter.gtEq(100);
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, valueEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.containStartEndTime(minTime, maxTime));
 
     valueEq = ValueFilter.gtEq(150);
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, valueEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.containStartEndTime(minTime, maxTime));
   }
 
   @Test
   public void testLt() {
     Filter timeEq = TimeFilter.lt(10L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.lt(100L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.lt(200L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.lt(300L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, maxTime));
 
     Filter valueEq = ValueFilter.lt(100);
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, valueEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.containStartEndTime(minTime, maxTime));
   }
 
   @Test
   public void testLtEq() {
     Filter timeEq = TimeFilter.ltEq(10L);
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.ltEq(100L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.ltEq(200L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, maxTime));
 
     timeEq = TimeFilter.ltEq(300L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.containStartEndTime(minTime, maxTime));
 
     Filter valueEq = ValueFilter.ltEq(100);
-    Assert.assertEquals(true, valueEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, valueEq.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(valueEq.containStartEndTime(minTime, maxTime));
   }
 
   @Test
   public void testAnd() {
     Filter andFilter = FilterFactory.and(TimeFilter.gt(10L), TimeFilter.lt(50));
-    Assert.assertEquals(false, andFilter.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, andFilter.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(andFilter.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(andFilter.containStartEndTime(minTime, maxTime));
 
     andFilter = FilterFactory.and(TimeFilter.gt(100L), TimeFilter.lt(200));
-    Assert.assertEquals(true, andFilter.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, andFilter.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(andFilter.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(andFilter.containStartEndTime(minTime, maxTime));
 
     andFilter = FilterFactory.and(TimeFilter.gt(99L), TimeFilter.lt(201));
-    Assert.assertEquals(true, andFilter.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, andFilter.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(andFilter.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(andFilter.containStartEndTime(minTime, maxTime));
   }
 
   @Test
   public void testOr() {
     Filter orFilter = FilterFactory.or(TimeFilter.gt(10L), TimeFilter.lt(50));
-    Assert.assertEquals(true, orFilter.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, orFilter.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(orFilter.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(orFilter.containStartEndTime(minTime, maxTime));
 }
 
   @Test
   public void testNotEq() {
     Filter timeEq = TimeFilter.notEq(10L);
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(timeEq.satisfyStartEndTime(minTime, maxTime));
 
     long startTime = 10, endTime = 10;
-    Assert.assertEquals(false, timeEq.satisfyStartEndTime(startTime, endTime));
-    Assert.assertEquals(false, timeEq.containStartEndTime(5, 50));
+    Assert.assertFalse(timeEq.satisfyStartEndTime(startTime, endTime));
+    Assert.assertFalse(timeEq.containStartEndTime(5, 50));
   }
 
   @Test
   public void testNot() {
     Filter not = FilterFactory.not(TimeFilter.ltEq(10L));
-    Assert.assertEquals(true, not.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(true, not.containStartEndTime(minTime, maxTime));
+    Assert.assertTrue(not.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertTrue(not.containStartEndTime(minTime, maxTime));
 
     not = FilterFactory.not(TimeFilter.ltEq(100L));
-    Assert.assertEquals(false, not.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, not.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.containStartEndTime(minTime, maxTime));
 
     not = FilterFactory.not(TimeFilter.ltEq(200L));
-    Assert.assertEquals(false, not.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, not.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.containStartEndTime(minTime, maxTime));
 
     not = FilterFactory.not(TimeFilter.ltEq(300L));
-    Assert.assertEquals(false, not.satisfyStartEndTime(minTime, maxTime));
-    Assert.assertEquals(false, not.containStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.containStartEndTime(minTime, maxTime));
 
     not = FilterFactory.not(ValueFilter.ltEq(100));
-    Assert.assertEquals(false, not.satisfyStartEndTime(minTime, maxTime));
+    Assert.assertFalse(not.satisfyStartEndTime(minTime, maxTime));
 
   }
 }
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/OperatorTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/OperatorTest.java
index d1458e4..6ef85d0 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/OperatorTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/read/filter/OperatorTest.java
@@ -32,115 +32,115 @@ public class OperatorTest {
   @Test
   public void testEq() {
     Filter timeEq = TimeFilter.eq(100L);
-    Assert.assertEquals(true, timeEq.satisfy(100, 100));
-    Assert.assertEquals(false, timeEq.satisfy(101, 100));
+    Assert.assertTrue(timeEq.satisfy(100, 100));
+    Assert.assertFalse(timeEq.satisfy(101, 100));
 
     Filter filter2 = FilterFactory.and(TimeFilter.eq(100L), ValueFilter.eq(50));
-    Assert.assertEquals(true, filter2.satisfy(100, 50));
-    Assert.assertEquals(false, filter2.satisfy(100, 51));
+    Assert.assertTrue(filter2.satisfy(100, 50));
+    Assert.assertFalse(filter2.satisfy(100, 51));
 
 
     Filter filter3 = ValueFilter.eq(true);
-    Assert.assertEquals(true, filter3.satisfy(100, true));
-    Assert.assertEquals(false, filter3.satisfy(100, false));
+    Assert.assertTrue(filter3.satisfy(100, true));
+    Assert.assertFalse(filter3.satisfy(100, false));
   }
 
   @Test
   public void testGt() {
     Filter timeGt = TimeFilter.gt(TESTED_TIMESTAMP);
-    Assert.assertEquals(true, timeGt.satisfy(TESTED_TIMESTAMP + 1, 100));
-    Assert.assertEquals(false, timeGt.satisfy(TESTED_TIMESTAMP, 100));
-    Assert.assertEquals(false, timeGt.satisfy(TESTED_TIMESTAMP - 1, 100));
+    Assert.assertTrue(timeGt.satisfy(TESTED_TIMESTAMP + 1, 100));
+    Assert.assertFalse(timeGt.satisfy(TESTED_TIMESTAMP, 100));
+    Assert.assertFalse(timeGt.satisfy(TESTED_TIMESTAMP - 1, 100));
 
     Filter valueGt = ValueFilter.gt(0.01f);
-    Assert.assertEquals(true, valueGt.satisfy(TESTED_TIMESTAMP, 0.02f));
-    Assert.assertEquals(false, valueGt.satisfy(TESTED_TIMESTAMP, 0.01f));
-    Assert.assertEquals(false, valueGt.satisfy(TESTED_TIMESTAMP, -0.01f));
+    Assert.assertTrue(valueGt.satisfy(TESTED_TIMESTAMP, 0.02f));
+    Assert.assertFalse(valueGt.satisfy(TESTED_TIMESTAMP, 0.01f));
+    Assert.assertFalse(valueGt.satisfy(TESTED_TIMESTAMP, -0.01f));
 
     Filter binaryFilter = ValueFilter.gt(new Binary("test1"));
-    Assert.assertEquals(true, binaryFilter.satisfy(TESTED_TIMESTAMP, new Binary("test2")));
-    Assert.assertEquals(false, binaryFilter.satisfy(TESTED_TIMESTAMP, new Binary("test0")));
+    Assert.assertTrue(binaryFilter.satisfy(TESTED_TIMESTAMP, new Binary("test2")));
+    Assert.assertFalse(binaryFilter.satisfy(TESTED_TIMESTAMP, new Binary("test0")));
   }
 
   @Test
   public void testGtEq() {
     Filter timeGtEq = TimeFilter.gtEq(TESTED_TIMESTAMP);
-    Assert.assertEquals(true, timeGtEq.satisfy(TESTED_TIMESTAMP + 1, 100));
-    Assert.assertEquals(true, timeGtEq.satisfy(TESTED_TIMESTAMP, 100));
-    Assert.assertEquals(false, timeGtEq.satisfy(TESTED_TIMESTAMP - 1, 100));
+    Assert.assertTrue(timeGtEq.satisfy(TESTED_TIMESTAMP + 1, 100));
+    Assert.assertTrue(timeGtEq.satisfy(TESTED_TIMESTAMP, 100));
+    Assert.assertFalse(timeGtEq.satisfy(TESTED_TIMESTAMP - 1, 100));
 
     Filter valueGtEq = ValueFilter.gtEq(0.01);
-    Assert.assertEquals(true, valueGtEq.satisfy(TESTED_TIMESTAMP, 0.02));
-    Assert.assertEquals(true, valueGtEq.satisfy(TESTED_TIMESTAMP, 0.01));
-    Assert.assertEquals(false, valueGtEq.satisfy(TESTED_TIMESTAMP, -0.01));
+    Assert.assertTrue(valueGtEq.satisfy(TESTED_TIMESTAMP, 0.02));
+    Assert.assertTrue(valueGtEq.satisfy(TESTED_TIMESTAMP, 0.01));
+    Assert.assertFalse(valueGtEq.satisfy(TESTED_TIMESTAMP, -0.01));
   }
 
   @Test
   public void testLt() {
     Filter timeLt = TimeFilter.lt(TESTED_TIMESTAMP);
-    Assert.assertEquals(true, timeLt.satisfy(TESTED_TIMESTAMP - 1, 100));
-    Assert.assertEquals(false, timeLt.satisfy(TESTED_TIMESTAMP, 100));
-    Assert.assertEquals(false, timeLt.satisfy(TESTED_TIMESTAMP + 1, 100));
+    Assert.assertTrue(timeLt.satisfy(TESTED_TIMESTAMP - 1, 100));
+    Assert.assertFalse(timeLt.satisfy(TESTED_TIMESTAMP, 100));
+    Assert.assertFalse(timeLt.satisfy(TESTED_TIMESTAMP + 1, 100));
 
     Filter valueLt = ValueFilter.lt(100L);
-    Assert.assertEquals(true, valueLt.satisfy(TESTED_TIMESTAMP, 99L));
-    Assert.assertEquals(false, valueLt.satisfy(TESTED_TIMESTAMP, 100L));
-    Assert.assertEquals(false, valueLt.satisfy(TESTED_TIMESTAMP, 101L));
+    Assert.assertTrue(valueLt.satisfy(TESTED_TIMESTAMP, 99L));
+    Assert.assertFalse(valueLt.satisfy(TESTED_TIMESTAMP, 100L));
+    Assert.assertFalse(valueLt.satisfy(TESTED_TIMESTAMP, 101L));
   }
 
   @Test
   public void testLtEq() {
     Filter timeLtEq = TimeFilter.ltEq(TESTED_TIMESTAMP);
-    Assert.assertEquals(true, timeLtEq.satisfy(TESTED_TIMESTAMP - 1, 100));
-    Assert.assertEquals(true, timeLtEq.satisfy(TESTED_TIMESTAMP, 100));
-    Assert.assertEquals(false, timeLtEq.satisfy(TESTED_TIMESTAMP + 1, 100));
+    Assert.assertTrue(timeLtEq.satisfy(TESTED_TIMESTAMP - 1, 100));
+    Assert.assertTrue(timeLtEq.satisfy(TESTED_TIMESTAMP, 100));
+    Assert.assertFalse(timeLtEq.satisfy(TESTED_TIMESTAMP + 1, 100));
 
     Filter valueLtEq = ValueFilter.ltEq(100L);
-    Assert.assertEquals(true, valueLtEq.satisfy(TESTED_TIMESTAMP, 99L));
-    Assert.assertEquals(true, valueLtEq.satisfy(TESTED_TIMESTAMP, 100L));
-    Assert.assertEquals(false, valueLtEq.satisfy(TESTED_TIMESTAMP, 101L));
+    Assert.assertTrue(valueLtEq.satisfy(TESTED_TIMESTAMP, 99L));
+    Assert.assertTrue(valueLtEq.satisfy(TESTED_TIMESTAMP, 100L));
+    Assert.assertFalse(valueLtEq.satisfy(TESTED_TIMESTAMP, 101L));
   }
 
   @Test
   public void testNot() {
     Filter timeLt = TimeFilter.not(TimeFilter.lt(TESTED_TIMESTAMP));
-    Assert.assertEquals(false, timeLt.satisfy(TESTED_TIMESTAMP - 1, 100));
-    Assert.assertEquals(true, timeLt.satisfy(TESTED_TIMESTAMP, 100));
-    Assert.assertEquals(true, timeLt.satisfy(TESTED_TIMESTAMP + 1, 100));
+    Assert.assertFalse(timeLt.satisfy(TESTED_TIMESTAMP - 1, 100));
+    Assert.assertTrue(timeLt.satisfy(TESTED_TIMESTAMP, 100));
+    Assert.assertTrue(timeLt.satisfy(TESTED_TIMESTAMP + 1, 100));
 
     Filter valueLt = ValueFilter.not(ValueFilter.lt(100L));
-    Assert.assertEquals(false, valueLt.satisfy(TESTED_TIMESTAMP, 99L));
-    Assert.assertEquals(true, valueLt.satisfy(TESTED_TIMESTAMP, 100L));
-    Assert.assertEquals(true, valueLt.satisfy(TESTED_TIMESTAMP, 101L));
+    Assert.assertFalse(valueLt.satisfy(TESTED_TIMESTAMP, 99L));
+    Assert.assertTrue(valueLt.satisfy(TESTED_TIMESTAMP, 100L));
+    Assert.assertTrue(valueLt.satisfy(TESTED_TIMESTAMP, 101L));
   }
 
   @Test
   public void testNotEq() {
     Filter timeNotEq = TimeFilter.notEq(100L);
-    Assert.assertEquals(false, timeNotEq.satisfy(100, 100));
-    Assert.assertEquals(true, timeNotEq.satisfy(101, 100));
+    Assert.assertFalse(timeNotEq.satisfy(100, 100));
+    Assert.assertTrue(timeNotEq.satisfy(101, 100));
 
     Filter valueNotEq = ValueFilter.notEq(50);
-    Assert.assertEquals(false, valueNotEq.satisfy(100, 50));
-    Assert.assertEquals(true, valueNotEq.satisfy(100, 51));
+    Assert.assertFalse(valueNotEq.satisfy(100, 50));
+    Assert.assertTrue(valueNotEq.satisfy(100, 51));
   }
 
   @Test
   public void testAndOr() {
     Filter andFilter = FilterFactory.and(TimeFilter.gt(100L), ValueFilter.lt(50.9));
-    Assert.assertEquals(true, andFilter.satisfy(101L, 50d));
-    Assert.assertEquals(false, andFilter.satisfy(101L, 60d));
-    Assert.assertEquals(false, andFilter.satisfy(99L, 50d));
+    Assert.assertTrue(andFilter.satisfy(101L, 50d));
+    Assert.assertFalse(andFilter.satisfy(101L, 60d));
+    Assert.assertFalse(andFilter.satisfy(99L, 50d));
 
     Filter orFilter = FilterFactory.or(andFilter, TimeFilter.eq(1000L));
-    Assert.assertEquals(true, orFilter.satisfy(101L, 50d));
-    Assert.assertEquals(false, orFilter.satisfy(101L, 60d));
-    Assert.assertEquals(true, orFilter.satisfy(1000L, 50d));
+    Assert.assertTrue(orFilter.satisfy(101L, 50d));
+    Assert.assertFalse(orFilter.satisfy(101L, 60d));
+    Assert.assertTrue(orFilter.satisfy(1000L, 50d));
 
     Filter andFilter2 = FilterFactory.and(orFilter, ValueFilter.notEq(50.0));
-    Assert.assertEquals(false, andFilter2.satisfy(101L, 50d));
-    Assert.assertEquals(false, andFilter2.satisfy(101L, 60d));
-    Assert.assertEquals(true, andFilter2.satisfy(1000L, 51d));
+    Assert.assertFalse(andFilter2.satisfy(101L, 50d));
+    Assert.assertFalse(andFilter2.satisfy(101L, 60d));
+    Assert.assertTrue(andFilter2.satisfy(1000L, 51d));
   }
 
   @Test
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
index b065733..6875e8d 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.tsfile.write;
 import java.io.File;
 import java.io.IOException;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.exception.NotCompatibleException;
 import org.apache.iotdb.tsfile.file.MetaMarker;
 import org.apache.iotdb.tsfile.file.footer.ChunkGroupFooter;
 import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -75,14 +76,16 @@ public class TsFileIOWriterTest {
   }
 
   @Test
-  public void endFileTest() throws IOException {
+  public void endFileTest() throws IOException, NotCompatibleException {
     TsFileSequenceReader reader = new TsFileSequenceReader(tsfile);
 
     // magic_string
     Assert.assertEquals(TSFileConfig.MAGIC_STRING, reader.readHeadMagic());
+    Assert.assertEquals(TSFileConfig.VERSION_NUMBER, reader.readVersionNumber());
     Assert.assertEquals(TSFileConfig.MAGIC_STRING, reader.readTailMagic());
 
     // chunk header
+    reader.position(TSFileConfig.MAGIC_STRING.getBytes().length + TSFileConfig.VERSION_NUMBER.getBytes().length);
     Assert.assertEquals(MetaMarker.CHUNK_HEADER, reader.readMarker());
     ChunkHeader header = reader.readChunkHeader();
     Assert.assertEquals(TimeSeriesMetadataTest.measurementUID, header.getMeasurementID());