Пример #1
0
  @Test
  public void testStoreChangeSet() throws Exception {
    File rootDir = getTempDir();
    File changeSetsDir = new File(rootDir, "changesets");
    deleteDirectory(changeSetsDir);
    changeSetsDir.mkdirs();

    Headers headers = new Headers();
    headers.setResourceId(newResource.getId());
    headers.setDriftDefinitionId(1);
    headers.setDriftDefinitionName("test-1");
    headers.setBasedir(rootDir.getAbsolutePath());
    headers.setType(COVERAGE);
    headers.setVersion(0);

    String file1Hash = sha256("test-1-file-1");

    File changeSet1 = new File(changeSetsDir, "changeset-1.txt");
    ChangeSetWriter writer = new ChangeSetWriterImpl(changeSet1, headers);
    writer.write(addedFileEntry("test/file-1", file1Hash, 56789L, 1024L));
    writer.close();

    File changeSet1Zip = new File(changeSetsDir, "changeset-1.zip");
    ZipUtil.zipFileOrDirectory(changeSet1, changeSet1Zip);

    assertTrue(
        "Expected to find change set zip file: " + changeSet1Zip.getPath(), changeSet1Zip.exists());

    jpaDriftServer.storeChangeSet(overlord, newResource.getId(), changeSet1Zip);

    JPADriftChangeSetCriteria c = new JPADriftChangeSetCriteria();
    c.addFilterResourceId(newResource.getId());
    c.fetchDrifts(true);
    List<? extends DriftChangeSet<?>> changeSets =
        jpaDriftServer.findDriftChangeSetsByCriteria(overlord, c);
    assertEquals(1, changeSets.size());
    DriftChangeSet<?> changeSet = changeSets.get(0);
    assertEquals(0, changeSet.getVersion());
    assertEquals("Expected to find one entry in change set", 1, changeSet.getDrifts().size());

    DriftFile driftFile = jpaDriftServer.getDriftFile(overlord, file1Hash);
    assertNotNull(driftFile);
    assertEquals(DriftFileStatus.REQUESTED, driftFile.getStatus());

    // the second change set should report drift
    String modifiedFile1Hash = sha256("test-2-file-1-modified");
    headers.setType(DRIFT);
    headers.setVersion(1);
    File changeSet2 = new File(changeSetsDir, "changeset-2.txt");

    writer = new ChangeSetWriterImpl(changeSet2, headers);
    writer.write(changedFileEntry("test/file-1", file1Hash, modifiedFile1Hash, 56789L, 1024L));
    writer.close();

    File changeSet2Zip = new File(changeSetsDir, "changeset-2.zip");
    ZipUtil.zipFileOrDirectory(changeSet2, changeSet2Zip);

    assertTrue(
        "Expected to find change set file: " + changeSet2Zip.getPath(), changeSet2Zip.exists());

    jpaDriftServer.storeChangeSet(overlord, newResource.getId(), changeSet2Zip);
    c.addSortVersion(PageOrdering.ASC);
    c.addFilterCategory(DRIFT);
    changeSets = jpaDriftServer.findDriftChangeSetsByCriteria(overlord, c);
    assertEquals(1, changeSets.size());
    changeSet = changeSets.get(0);
    assertEquals("The change set version is wrong", 1, changeSet.getVersion());
    assertEquals("Expected to find one entry in change set", 1, changeSet.getDrifts().size());
    changeSet = changeSets.get(0);
    assertEquals(1, changeSet.getVersion());
    assertEquals(1, changeSet.getDrifts().size());
    Drift<?, ?> drift = changeSet.getDrifts().iterator().next();
    assertEquals("test/file-1", drift.getPath());
    assertEquals(file1Hash, drift.getOldDriftFile().getHashId());
    assertEquals(modifiedFile1Hash, drift.getNewDriftFile().getHashId());
    assertEquals(DriftCategory.FILE_CHANGED, drift.getCategory());

    driftFile = jpaDriftServer.getDriftFile(overlord, modifiedFile1Hash);
    assertNotNull(driftFile);
    assertEquals(DriftFileStatus.REQUESTED, driftFile.getStatus());
  }