use of org.syncany.plugins.local.LocalTransferSettings in project syncany by syncany.
the class CleanupOperationTest method testCleanupNoChanges.
@Test
public void testCleanupNoChanges() throws Exception {
// Setup
LocalTransferSettings testConnection = (LocalTransferSettings) TestConfigUtil.createTestLocalConnection();
TestClient clientA = new TestClient("A", testConnection);
TestClient clientB = new TestClient("B", testConnection);
CleanupOperationOptions options = new CleanupOperationOptions();
options.setRemoveOldVersions(true);
options.setPurgeFileVersionSettings(new TreeMap<Long, TimeUnit>());
// Run
// A: Create some file versions
clientA.createNewFile("file.jpg");
for (int i = 1; i <= 4; i++) {
clientA.changeFile("file.jpg");
clientA.upWithForceChecksum();
}
// B: Sync down, add something
clientB.down();
// B: Cleanup
CleanupOperationResult cleanupOperationResult = clientB.cleanup(options);
assertEquals(CleanupResultCode.OK_NOTHING_DONE, cleanupOperationResult.getResultCode());
assertEquals(0, cleanupOperationResult.getMergedDatabaseFilesCount());
assertEquals(0, cleanupOperationResult.getRemovedMultiChunksCount());
assertEquals(0, cleanupOperationResult.getRemovedOldVersionsCount());
// Tear down
clientA.deleteTestData();
clientB.deleteTestData();
}
use of org.syncany.plugins.local.LocalTransferSettings in project syncany by syncany.
the class CleanupOperationTest method testEasyCleanup.
@Test
public void testEasyCleanup() throws Exception {
// Setup
LocalTransferSettings testConnection = (LocalTransferSettings) TestConfigUtil.createTestLocalConnection();
TestClient clientA = new TestClient("A", testConnection);
TestClient clientB = new TestClient("B", testConnection);
CleanupOperationOptions options = new CleanupOperationOptions();
options.setRemoveOldVersions(true);
options.setMinKeepSeconds(0);
// Run
// A: Create some file versions
// These two files' chunks will be in one multichunk
clientA.createNewFile("someotherfile.jpg");
// Only one of the chunks will be needed after cleanup!
clientA.createNewFile("file.jpg");
// The multichunk will be 50% useless
for (int i = 1; i <= 4; i++) {
clientA.changeFile("file.jpg");
clientA.upWithForceChecksum();
}
clientA.createNewFile("otherfile.txt");
for (int i = 1; i <= 3; i++) {
clientA.changeFile("otherfile.txt");
clientA.upWithForceChecksum();
}
clientA.createNewFile("deletedfile.txt");
for (int i = 1; i <= 3; i++) {
clientA.changeFile("deletedfile.txt");
clientA.upWithForceChecksum();
}
clientA.deleteFile("deletedfile.txt");
clientA.upWithForceChecksum();
java.sql.Connection databaseConnectionA = DatabaseConnectionFactory.createConnection(clientA.getDatabaseFile(), false);
assertEquals("12", TestSqlUtil.runSqlSelect("select count(*) from fileversion", databaseConnectionA));
assertEquals("11", TestSqlUtil.runSqlSelect("select count(*) from chunk", databaseConnectionA));
assertEquals("10", TestSqlUtil.runSqlSelect("select count(*) from multichunk", databaseConnectionA));
assertEquals("11", TestSqlUtil.runSqlSelect("select count(*) from filecontent", databaseConnectionA));
assertEquals("4", TestSqlUtil.runSqlSelect("select count(distinct id) from filehistory", databaseConnectionA));
// B: Sync down by other client
clientB.down();
java.sql.Connection databaseConnectionB = DatabaseConnectionFactory.createConnection(clientB.getDatabaseFile(), false);
assertEquals("12", TestSqlUtil.runSqlSelect("select count(*) from fileversion", databaseConnectionB));
assertEquals("11", TestSqlUtil.runSqlSelect("select count(*) from chunk", databaseConnectionB));
assertEquals("10", TestSqlUtil.runSqlSelect("select count(*) from multichunk", databaseConnectionB));
assertEquals("11", TestSqlUtil.runSqlSelect("select count(*) from filecontent", databaseConnectionB));
assertEquals("4", TestSqlUtil.runSqlSelect("select count(distinct id) from filehistory", databaseConnectionB));
// A: Cleanup this mess (except for two) <<<< This is the interesting part!!! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
CleanupOperationResult cleanupOperationResult = clientA.cleanup(options);
assertEquals(CleanupResultCode.OK, cleanupOperationResult.getResultCode());
assertEquals(11, cleanupOperationResult.getMergedDatabaseFilesCount());
assertEquals(7, cleanupOperationResult.getRemovedMultiChunksCount());
assertEquals(4, cleanupOperationResult.getRemovedOldVersionsCount());
// 1 version for "file.jpg", 1 versions for "otherfile.txt" and 1 version for "someotherfile.jpg"
assertEquals("3", TestSqlUtil.runSqlSelect("select count(*) from fileversion", databaseConnectionA));
// 4
assertEquals("4", TestSqlUtil.runSqlSelect("select sum(version) from fileversion where path='file.jpg'", databaseConnectionA));
// 3
assertEquals("3", TestSqlUtil.runSqlSelect("select sum(version) from fileversion where path='otherfile.txt'", databaseConnectionA));
assertEquals("1", TestSqlUtil.runSqlSelect("select sum(version) from fileversion where path='someotherfile.jpg'", databaseConnectionA));
// 3 chunks remain; one was obsolete so we removed it!
assertEquals("3", TestSqlUtil.runSqlSelect("select count(*) from chunk", databaseConnectionA));
// 3 chunks in 3 multichunks
assertEquals("3", TestSqlUtil.runSqlSelect("select count(*) from multichunk", databaseConnectionA));
assertEquals("3", TestSqlUtil.runSqlSelect("select count(*) from filecontent", databaseConnectionA));
assertEquals("3", TestSqlUtil.runSqlSelect("select count(distinct id) from filehistory", databaseConnectionA));
// Test the repo
assertEquals(3, new File(testConnection.getPath() + "/multichunks/").list().length);
assertEquals(1, new File(testConnection.getPath() + "/databases/").list(new FilenameFilter() {
public boolean accept(File dir, String name) {
return name.startsWith("database-");
}
}).length);
// B: Sync down cleanup
clientB.down();
TestAssertUtil.assertSqlDatabaseEquals(clientA.getDatabaseFile(), clientB.getDatabaseFile());
// Tear down
clientA.deleteTestData();
clientB.deleteTestData();
}
use of org.syncany.plugins.local.LocalTransferSettings in project syncany by syncany.
the class ConnectOperationTest method testConnectOperationFailureNoConnection.
@Test
public void testConnectOperationFailureNoConnection() throws Exception {
// A.init()
InitOperationOptions initOperationOptionsA = TestConfigUtil.createTestInitOperationOptions("A");
InitOperation initOperationA = new InitOperation(initOperationOptionsA, null);
InitOperationResult initOperationResultA = initOperationA.execute();
String connectLinkA = initOperationResultA.getGenLinkResult().getShareLink();
assertNotNull(connectLinkA);
// B.connect()
File localDirB = TestFileUtil.createTempDirectoryInSystemTemp(TestConfigUtil.createUniqueName("client-B", initOperationOptionsA));
File localConnectDirB = new File(localDirB, Config.DIR_APPLICATION);
File repoDir = ((LocalTransferSettings) initOperationOptionsA.getConfigTO().getTransferSettings()).getPath();
ConfigTO connectionConfigToB = initOperationOptionsA.getConfigTO();
// <<< Point to non-existing repo
((LocalTransferSettings) connectionConfigToB.getTransferSettings()).setPath(new File("/does/not/exist"));
connectionConfigToB.setMachineName("client-B" + Math.abs(new Random().nextInt()));
connectionConfigToB.setMasterKey(null);
ConnectOperationOptions connectOperationOptionsB = new ConnectOperationOptions();
connectOperationOptionsB.setStrategy(ConnectOptionsStrategy.CONNECTION_TO);
connectOperationOptionsB.setConfigTO(connectionConfigToB);
connectOperationOptionsB.setPassword(initOperationOptionsA.getPassword());
connectOperationOptionsB.setLocalDir(localDirB);
ConnectOperation connectOperationB = new ConnectOperation(connectOperationOptionsB, null);
ConnectOperationResult connectOperationResultB = connectOperationB.execute();
assertEquals(ConnectResultCode.NOK_TEST_FAILED, connectOperationResultB.getResultCode());
assertFalse(new File(localConnectDirB, Config.DIR_DATABASE).exists());
assertFalse(new File(localConnectDirB, Config.DIR_CACHE).exists());
assertFalse(new File(localConnectDirB, Config.FILE_CONFIG).exists());
assertFalse(new File(localConnectDirB, Config.DIR_LOG).exists());
assertFalse(new File(localConnectDirB, Config.FILE_REPO).exists());
// Tear down
TestFileUtil.deleteDirectory(repoDir);
TestFileUtil.deleteDirectory(localConnectDirB);
TestFileUtil.deleteDirectory(initOperationOptionsA.getLocalDir());
TestFileUtil.deleteDirectory(connectOperationOptionsB.getLocalDir());
}
use of org.syncany.plugins.local.LocalTransferSettings in project syncany by syncany.
the class InitOperationTest method testInitOperation.
@Test
public void testInitOperation() throws Exception {
InitOperationOptions operationOptions = TestConfigUtil.createTestInitOperationOptions("A");
InitOperation op = new InitOperation(operationOptions, null);
InitOperationResult res = op.execute();
File repoDir = ((LocalTransferSettings) operationOptions.getConfigTO().getTransferSettings()).getPath();
File localDir = new File(operationOptions.getLocalDir(), ".syncany");
// Test the repository
assertTrue((new File(repoDir, "databases").exists()));
assertTrue((new File(repoDir, "syncany").exists()));
assertTrue((new File(repoDir, "multichunks").exists()));
assertEquals((new File(repoDir, "master").exists()), TestConfigUtil.getCrypto());
// Test the local folder
assertTrue((new File(localDir, Config.DIR_DATABASE).exists()));
assertTrue((new File(localDir, Config.DIR_CACHE).exists()));
assertTrue((new File(localDir, Config.FILE_CONFIG).exists()));
assertTrue((new File(localDir, Config.DIR_LOG).exists()));
assertTrue((new File(localDir, Config.FILE_REPO).exists()));
assertEquals((new File(localDir, Config.FILE_MASTER).exists()), TestConfigUtil.getCrypto());
// Test the existance of generated link
String link = res.getGenLinkResult().getShareLink();
assertNotNull(link);
TestFileUtil.deleteDirectory(repoDir);
TestFileUtil.deleteDirectory(operationOptions.getLocalDir());
}
use of org.syncany.plugins.local.LocalTransferSettings in project syncany by syncany.
the class CleanupMergeDatabaseFilesScenarioTest method testIssue58_2.
@Test
public void testIssue58_2() throws Exception {
/*
* This is the attempt to reproduce issue #58 https://github.com/syncany/syncany/issues/58
*/
// Setup
LocalTransferSettings testConnection = (LocalTransferSettings) TestConfigUtil.createTestLocalConnection();
TestClient clientA = new TestClient("A", testConnection);
TestClient clientB = new TestClient("B", testConnection);
TestClient clientC = new TestClient("C", testConnection);
java.sql.Connection databaseConnectionA = DatabaseConnectionFactory.createConnection(clientA.getDatabaseFile(), false);
java.sql.Connection databaseConnectionB = DatabaseConnectionFactory.createConnection(clientB.getDatabaseFile(), false);
CleanupOperationOptions options = new CleanupOperationOptions();
options.setRemoveOldVersions(true);
options.setMinSecondsBetweenCleanups(0);
options.setMaxDatabaseFiles(7);
StatusOperationOptions statusOptionsForceChecksum = new StatusOperationOptions();
statusOptionsForceChecksum.setForceChecksum(true);
UpOperationOptions upOperationOptionsWithCleanupForce = new UpOperationOptions();
upOperationOptionsWithCleanupForce.setStatusOptions(statusOptionsForceChecksum);
upOperationOptionsWithCleanupForce.setForceUploadEnabled(true);
// Run preparations
clientA.down();
clientA.createNewFile("A-file.jpg");
// (A1)
clientA.up(upOperationOptionsWithCleanupForce);
clientA.down();
clientA.changeFile("A-file.jpg");
// (A2)
clientA.up(upOperationOptionsWithCleanupForce);
clientB.down();
clientB.changeFile("A-file.jpg");
// (A2,B1)
clientB.up(upOperationOptionsWithCleanupForce);
clientA.down();
clientA.changeFile("A-file.jpg");
// (A3,B1)
clientA.up(upOperationOptionsWithCleanupForce);
clientA.down();
clientA.changeFile("A-file.jpg");
// (A4,B1)
clientA.up(upOperationOptionsWithCleanupForce);
clientB.down();
clientB.changeFile("A-file.jpg");
// (A4,B2) + (A4,B3) [PURGE]
clientB.up(upOperationOptionsWithCleanupForce);
clientB.cleanup(options);
clientC.down();
clientA.down();
clientA.changeFile("A-file.jpg");
// (A5,B3) + (A6,B3) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
clientB.down();
clientB.changeFile("A-file.jpg");
// (A6,B4) + (A6,B5) [PURGE]
clientB.up(upOperationOptionsWithCleanupForce);
clientB.cleanup(options);
/*
* For some reason, this chunk checksum in the following commit is the reason for the exception. So we record it here to see where it vanishes
* from the databases.
*/
clientA.down();
clientA.changeFile("A-file.jpg");
String fileAndChunkChecksumThatRaisesException = StringUtil.toHex(TestFileUtil.createChecksum(clientA.getLocalFile("A-file.jpg")));
System.out.println("Chunk/File checksum that raises the issue: " + fileAndChunkChecksumThatRaisesException);
clientA.createNewFile("ADDED_IN_DBV_A7_B5");
// (A7,B5) + (A8,B5) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
assertEquals("1", TestSqlUtil.runSqlSelect("select count(*) from chunk where checksum='" + fileAndChunkChecksumThatRaisesException + "'", databaseConnectionA));
clientB.down();
clientB.changeFile("A-file.jpg");
// (A8,B6) + (A8,B7) [PURGE]
clientB.up(upOperationOptionsWithCleanupForce);
clientB.cleanup(options);
assertEquals("0", TestSqlUtil.runSqlSelect("select count(*) from chunk where checksum='" + fileAndChunkChecksumThatRaisesException + "'", databaseConnectionB));
clientA.down();
clientA.changeFile("A-file.jpg");
// (A9,B7) + (A10,B7) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
assertEquals("0", TestSqlUtil.runSqlSelect("select count(*) from chunk where checksum='" + fileAndChunkChecksumThatRaisesException + "'", databaseConnectionA));
clientB.down();
clientB.changeFile("A-file.jpg");
// (A10,B8) + (A10,B9) [PURGE]
clientB.up(upOperationOptionsWithCleanupForce);
clientB.cleanup(options);
assertEquals("0", TestSqlUtil.runSqlSelect("select count(*) from chunk where checksum='" + fileAndChunkChecksumThatRaisesException + "'", databaseConnectionB));
clientB.down();
clientB.changeFile("A-file.jpg");
// (A10,B10) + (A10,B11) [PURGE]
clientB.up(upOperationOptionsWithCleanupForce);
clientB.cleanup(options);
assertEquals("0", TestSqlUtil.runSqlSelect("select count(*) from chunk where checksum='" + fileAndChunkChecksumThatRaisesException + "'", databaseConnectionB));
clientA.down();
clientA.changeFile("A-file.jpg");
// (A11,B11) + (A12,B11) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
clientA.down();
clientA.changeFile("A-file.jpg");
// (A13,B11) + (A14,B11) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
clientB.down();
clientB.changeFile("A-file.jpg");
// (A14,B12) + (A14,B13) [PURGE]
clientB.up(upOperationOptionsWithCleanupForce);
clientB.cleanup(options);
clientA.down();
clientA.changeFile("A-file.jpg");
// (A15,B13) + (A16,B13) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
clientA.down();
clientA.changeFile("A-file.jpg");
// (A17,B13) + (A18,B13) [PURGE]
clientA.up(upOperationOptionsWithCleanupForce);
clientA.cleanup(options);
// Sync them up
clientA.down();
clientB.down();
assertSqlDatabaseEquals(clientA.getDatabaseFile(), clientB.getDatabaseFile());
// Run
// <<< Here is/was the issue: Client C failed when downloading
clientC.down();
assertSqlDatabaseEquals(clientA.getDatabaseFile(), clientC.getDatabaseFile());
// Tear down
clientA.deleteTestData();
clientB.deleteTestData();
clientC.deleteTestData();
}
Aggregations