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

arshad pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 0ab7766  ZOOKEEPER-4232: InvalidSnapshotTest corrupts its own test data
0ab7766 is described below

commit 0ab7766a8a968e03c7b3bb7c1b9d42af9eea152e
Author: Damien Diederen <[email protected]>
AuthorDate: Tue Mar 9 19:55:27 2021 +0530

    ZOOKEEPER-4232: InvalidSnapshotTest corrupts its own test data
    
    `InvalidSnapshotTest.testSnapshot` starts an instance of
    `ZooKeeperServer` on the version-controlled `resources/data/invalidsnap`
    directory, which, as a side-effect, \"fixes\" the following
    snapshot—which was broken on purpose (see ZOOKEEPER-367):
    
    
`zookeeper-server/src/test/resources/data/invalidsnap/version-2/snapshot.83f`
    
    This status quo creates a number of problems:
    
    1.  It makes the test ineffective after the first run;
    2.  The file shows as modified in version control tools, which can be
        annoying;
    3.  The \"fixed\" snapshot can end up being committed by mistake,
        invalidating the test.
    
    (\#3 is not theoretical; that \"fixed\" snapshot frequently shows up in
    pull requests, and was recently merged into master.).
    
    Author: Damien Diederen <[email protected]>
    
    Reviewers: Mohammad Arshad <[email protected]>
    
    Closes #1622 from ztzg/ZOOKEEPER-4232-invalid-snapshot-is-invalid and 
squashes the following commits:
    
    8b48eea98 [Damien Diederen] ZOOKEEPER-4232: Ensure that ZOOKEEPER-367 test 
data fails to parse
    92507563d [Damien Diederen] ZOOKEEPER-4232: Run InvalidSnapshotTest on a 
copy of test data
    dcf5604b9 [Damien Diederen] ZOOKEEPER-4232: Restore test data for 
ZOOKEEPER-367
---
 .../apache/zookeeper/test/InvalidSnapshotTest.java |  28 ++++++++++++++++++++-
 .../data/invalidsnap/version-2/snapshot.83f        | Bin 189686 -> 4824 bytes
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java
index 8026705..c47a60f 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/test/InvalidSnapshotTest.java
@@ -20,7 +20,10 @@ package org.apache.zookeeper.test;
 
 import static org.apache.zookeeper.test.ClientBase.CONNECTION_TIMEOUT;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 import java.io.File;
+import java.io.IOException;
+import org.apache.commons.io.FileUtils;
 import org.apache.zookeeper.PortAssignment;
 import org.apache.zookeeper.ZKTestCase;
 import org.apache.zookeeper.ZooKeeper;
@@ -62,12 +65,35 @@ public class InvalidSnapshotTest extends ZKTestCase {
     }
 
     /**
+     * Verify the SnapshotFormatter fails as expected on corrupted snapshot.
+     */
+    @Test
+    public void testSnapshotFormatterWithInvalidSnap() throws Exception {
+        File snapDir = new File(testData, "invalidsnap");
+        // Broken snapshot introduced by ZOOKEEPER-367, and used to
+        // demonstrate recovery in testSnapshot below.
+        File snapfile = new File(new File(snapDir, "version-2"), 
"snapshot.83f");
+        String[] args = {snapfile.getCanonicalFile().toString()};
+        try {
+            SnapshotFormatter.main(args);
+            fail("Snapshot '" + snapfile + "' unexpectedly parsed without 
error.");
+        } catch (IOException e) {
+            assertTrue(e.getMessage().contains("Unreasonable length = 
977468229"));
+        }
+    }
+
+    /**
      * test the snapshot
      * @throws Exception an exception could be expected
      */
     @Test
     public void testSnapshot() throws Exception {
-        File snapDir = new File(testData, "invalidsnap");
+        File origSnapDir = new File(testData, "invalidsnap");
+
+        // This test otherwise updates the resources directory.
+        File snapDir = ClientBase.createTmpDir();
+        FileUtils.copyDirectory(origSnapDir, snapDir);
+
         ZooKeeperServer zks = new ZooKeeperServer(snapDir, snapDir, 3000);
         SyncRequestProcessor.setSnapCount(1000);
         final int PORT = Integer.parseInt(HOSTPORT.split(":")[1]);
diff --git 
a/zookeeper-server/src/test/resources/data/invalidsnap/version-2/snapshot.83f 
b/zookeeper-server/src/test/resources/data/invalidsnap/version-2/snapshot.83f
index 1b563b6..26dc5f6 100644
Binary files 
a/zookeeper-server/src/test/resources/data/invalidsnap/version-2/snapshot.83f 
and 
b/zookeeper-server/src/test/resources/data/invalidsnap/version-2/snapshot.83f 
differ

Reply via email to