From f3af327ee273cae04d17f8d2dd8eb34c86caab57 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Sun, 3 Aug 2014 22:54:38 +0200 Subject: [PATCH] Reproduces issue #143 (yeyyyy) --- .../org/syncany/tests/ScenarioTestSuite.java | 4 +- .../tests/scenarios/Issue143ScenarioTest.java | 77 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 syncany-lib/src/test/java/org/syncany/tests/scenarios/Issue143ScenarioTest.java diff --git a/syncany-lib/src/test/java/org/syncany/tests/ScenarioTestSuite.java b/syncany-lib/src/test/java/org/syncany/tests/ScenarioTestSuite.java index cda2ad2b7..ce095854e 100644 --- a/syncany-lib/src/test/java/org/syncany/tests/ScenarioTestSuite.java +++ b/syncany-lib/src/test/java/org/syncany/tests/ScenarioTestSuite.java @@ -38,6 +38,7 @@ import org.syncany.tests.scenarios.FolderPermissionChangeScenarioTest; import org.syncany.tests.scenarios.IdenticalFileMoveScenarioTest; import org.syncany.tests.scenarios.IgnoredFileScenarioTest; +import org.syncany.tests.scenarios.Issue143ScenarioTest; import org.syncany.tests.scenarios.ManyRenamesScenarioTest; import org.syncany.tests.scenarios.ManySyncUpsAndDatabaseFileCleanupScenarioTest; import org.syncany.tests.scenarios.ManySyncUpsAndOtherClientSyncDownScenarioTest; @@ -64,6 +65,7 @@ CleanupMergeDatabaseFilesScenarioTest.class, CreateSimilarFileParallelScenarioTest.class, DirtyDatabaseScenarioTest.class, + DirtyDatabaseVersionsScenarioTest.class, EmptyFileScenarioTest.class, EmptyFolderScenarioTest.class, EvilCUpWithoutDownScenarioTest.class, @@ -75,6 +77,7 @@ FolderPermissionChangeScenarioTest.class, IdenticalFileMoveScenarioTest.class, IgnoredFileScenarioTest.class, + Issue143ScenarioTest.class, ManyRenamesScenarioTest.class, ManySyncUpsAndDatabaseFileCleanupScenarioTest.class, ManySyncUpsLargeFileScenarioTest.class, @@ -90,7 +93,6 @@ SingleFileNoConflictsScenarioTest.class, SingleFolderNoConflictsScenarioTest.class, SymlinkSyncScenarioTest.class, - DirtyDatabaseVersionsScenarioTest.class }) public class ScenarioTestSuite { // This class executes all tests diff --git a/syncany-lib/src/test/java/org/syncany/tests/scenarios/Issue143ScenarioTest.java b/syncany-lib/src/test/java/org/syncany/tests/scenarios/Issue143ScenarioTest.java new file mode 100644 index 000000000..c867e2562 --- /dev/null +++ b/syncany-lib/src/test/java/org/syncany/tests/scenarios/Issue143ScenarioTest.java @@ -0,0 +1,77 @@ +/* + * Syncany, www.syncany.org + * Copyright (C) 2011-2014 Philipp C. Heckel + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.syncany.tests.scenarios; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.syncany.plugins.transfer.TransferSettings; +import org.syncany.tests.util.TestClient; +import org.syncany.tests.util.TestConfigUtil; +import org.syncany.tests.util.TestFileUtil; +import org.syncany.tests.util.TestSqlUtil; + +public class Issue143ScenarioTest { + @Test + public void testChangeAttributes() throws Exception { + // Setup + TransferSettings testConnection = TestConfigUtil.createTestLocalConnection(); + + TestClient clientA = new TestClient("A", testConnection); + java.sql.Connection databaseConnectionA = clientA.getConfig().createDatabaseConnection(); + + TestClient clientB = new TestClient("B", testConnection); + + // Scenario, see + // https://github.com/syncany/syncany/issues/143#issuecomment-50964685 + + // Run + clientA.createNewFile("file1.jpg"); + clientA.upWithForceChecksum(); + assertEquals("1", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + TestFileUtil.copyFile(clientA.getLocalFile("file1.jpg"), clientA.getLocalFile("file1 (copy).jpg")); + clientA.upWithForceChecksum(); + assertEquals("2", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + clientA.deleteFile("file1 (copy).jpg"); + clientA.upWithForceChecksum(); + assertEquals("3", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + clientA.cleanup(); // Creates PURGE database version with deleted file + assertEquals("4", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + TestFileUtil.copyFile(clientA.getLocalFile("file1.jpg"), clientA.getLocalFile("file1 (copy).jpg")); + clientA.upWithForceChecksum(); + assertEquals("5", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + clientA.deleteFile("file1.jpg"); + clientA.upWithForceChecksum(); + assertEquals("6", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + clientA.cleanup(); // Creates PURGE database version with deleted file + assertEquals("7", TestSqlUtil.runSqlSelect("select count(*) from databaseversion", databaseConnectionA)); + + clientB.down(); // <<<< This creates the exception in #143 + // integrity constraint violation: foreign key no parent; SYS_FK_10173 table: FILEVERSION + + // Tear down + clientA.deleteTestData(); + clientB.deleteTestData(); + } +}