use of org.syncany.operations.up.UpOperationResult in project syncany by syncany.
the class FileLockedScenarioTest method runUpAndTestForConsistentDatabase.
private void runUpAndTestForConsistentDatabase(TransferSettings connection, TestClient client) throws Exception {
UpOperationResult upResult = client.up();
StatusOperationResult statusResult = upResult.getStatusResult();
// Test 1: Check result sets for inconsistencies
assertTrue("Status command expected to return changes.", statusResult.getChangeSet().hasChanges());
assertTrue("File should be uploaded while it is read-only.", upResult.getChangeSet().hasChanges());
// Test 2: Check database for inconsistencies
SqlDatabase database = client.loadLocalDatabase();
assertNotNull("There should be a new database version, because files should have been added.", database.getLastDatabaseVersionHeader());
// Test 3: Check file system for inconsistencies
File repoPath = ((LocalTransferSettings) connection).getPath();
assertEquals("Repository should contain any files.", 5, repoPath.list().length);
}
use of org.syncany.operations.up.UpOperationResult in project syncany by syncany.
the class DoSameActionAtTwoClientsTest method testIssue76.
@Test
public void testIssue76() throws Exception {
/*
* If two clients create the same file at the same time, different multichunks will contain the same chunks. This lead to issue 76.
*/
// Setup
LocalTransferSettings testConnection = (LocalTransferSettings) TestConfigUtil.createTestLocalConnection();
TestClient clientA = new TestClient("A", testConnection);
TestClient clientB = new TestClient("B", testConnection);
UpOperationOptions upOperationOptionsWithForce = new UpOperationOptions();
upOperationOptionsWithForce.setForceUploadEnabled(true);
// Client A creates some files
clientA.getLocalFile("sphinxbase-0.8").mkdirs();
clientA.getLocalFile("sphinxbase-0.8/win32/sphinx_jsgf2fsg").mkdirs();
clientA.getLocalFile("sphinxbase-0.8/src/sphinx_adtools").mkdirs();
clientA.createNewFile("sphinxbase-0.8/config.sub");
clientA.createNewFile("sphinxbase-0.8/win32/sphinx_jsgf2fsg/sphinx_jsgf2fsg.vcxproj");
clientA.createNewFile("sphinxbase-0.8/src/sphinx_adtools/sphinx_pitch.c");
// Client B creates the exact SAME FILES (here: copies the file tree from A)
FileUtils.copyDirectory(clientA.getLocalFile("sphinxbase-0.8"), clientB.getLocalFile("sphinxbase-0.8"), true);
// Now, both upload that
// (A1)
UpOperationResult upResultA = clientA.upWithForceChecksum();
assertEquals(UpResultCode.OK_CHANGES_UPLOADED, upResultA.getResultCode());
assertEquals(8, upResultA.getChangeSet().getNewFiles().size());
// (B1)
UpOperationResult upResultB = clientB.up(upOperationOptionsWithForce);
assertEquals(UpResultCode.OK_CHANGES_UPLOADED, upResultB.getResultCode());
assertEquals(8, upResultB.getChangeSet().getNewFiles().size());
DownOperationResult downResultA = clientA.down();
assertEquals(DownResultCode.OK_NO_REMOTE_CHANGES, downResultA.getResultCode());
assertEquals(0, downResultA.getDirtyDatabasesCreated().size());
assertEquals(false, downResultA.getChangeSet().hasChanges());
// For peaking (does NOT affect the test)
FileUtils.copyFile(new File(testConnection.getPath(), "databases/database-B-0000000001"), new File(testConnection.getPath(), "databases/TEMP_db-B-0000000001"));
// creates DIRTY; deletes (B1)
DownOperationResult downResultB = clientB.down();
assertEquals(DownResultCode.OK_WITH_REMOTE_CHANGES, downResultB.getResultCode());
assertEquals(1, downResultB.getDirtyDatabasesCreated().size());
// TODO [low] Shouldn't this be 'true'?
assertEquals(false, downResultB.getChangeSet().hasChanges());
// For peaking (does NOT affect the test)
FileUtils.copyDirectory(clientB.getLocalFile(".syncany/db"), clientB.getLocalFile(".syncany/db_WITH_DIRTY_B1"));
Files.setPosixFilePermissions(clientB.getLocalFile("sphinxbase-0.8").toPath(), PosixFilePermissions.fromString("rwxrwxrwx"));
// (B2)
UpOperationResult upResultB2 = clientB.up();
assertEquals(UpResultCode.OK_CHANGES_UPLOADED, upResultB2.getResultCode());
assertEquals(1, upResultB2.getChangeSet().getChangedFiles().size());
// For peaking (does NOT affect the test)
FileUtils.copyDirectory(clientB.getLocalFile(".syncany/db"), clientB.getLocalFile(".syncany/db_DELETED_B1_WITH_B2"));
clientA.down();
// Tear down
clientA.deleteTestData();
clientB.deleteTestData();
}
use of org.syncany.operations.up.UpOperationResult in project syncany by syncany.
the class SymlinkSyncScenarioTest method testSymlinkOneUpOneDown.
@Test
public void testSymlinkOneUpOneDown() throws Exception {
if (!EnvironmentUtil.symlinksSupported()) {
// Skip test for Windows, no symlinks there!
return;
}
// Setup
TransferSettings testConnection = TestConfigUtil.createTestLocalConnection();
TestClient clientA = new TestClient("A", testConnection);
TestClient clientB = new TestClient("B", testConnection);
// Run
File symlinkFile = clientA.getLocalFile("symlink-name");
FileUtil.createSymlink("/etc/hosts", symlinkFile);
assertTrue("Symlink should exist at " + symlinkFile, symlinkFile.exists());
UpOperationResult upResult = clientA.up();
StatusOperationResult statusResult = upResult.getStatusResult();
// Test 1: Check result sets for inconsistencies
assertTrue("Status should return changes.", statusResult.getChangeSet().hasChanges());
assertTrue("File should be uploaded.", upResult.getChangeSet().hasChanges());
// Test 2: Check database for inconsistencies
SqlDatabase database = clientA.loadLocalDatabase();
assertEquals("File should be uploaded.", 1, database.getFileList("symlink-name", null, false, false, false, null).size());
assertNotNull("There should be a new database version, because file should not have been added.", database.getLastDatabaseVersionHeader());
// Test 3: Check file system for inconsistencies
File repoPath = new File(((LocalTransferSettings) testConnection).getPath() + "/databases");
String[] repoFileList = repoPath.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.startsWith("database-");
}
});
assertEquals("Repository should contain only ONE database file, not multichunks.", 1, repoFileList.length);
// B down
clientB.down();
assertEquals("Local folder should contain one file (link!)", 1, clientB.getLocalFilesExcludeLockedAndNoRead().size());
File localSymlinkFile = clientB.getLocalFile("symlink-name");
assertTrue("Local symlink file should exist.", localSymlinkFile.exists());
assertTrue("Local symlink file should be a SYMLINK.", FileUtil.isSymlink(localSymlinkFile));
assertEquals("Local symlink file should point to actual target.", "/etc/hosts", FileUtil.readSymlinkTarget(localSymlinkFile));
// Tear down
clientA.deleteTestData();
clientB.deleteTestData();
}
Aggregations