/*
* RHQ Management Platform
* Copyright (C) 2011 Red Hat, Inc.
* All rights reserved.
*
* 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 version 2 of the License.
*
* 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, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.server.plugins.drift.mongodb.dao;
import org.bson.types.ObjectId;
import org.rhq.core.domain.criteria.GenericDriftChangeSetCriteria;
import org.rhq.core.domain.criteria.GenericDriftCriteria;
import org.rhq.core.domain.drift.DriftChangeSetCategory;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.plugins.drift.mongodb.MongoDBTest;
import org.rhq.enterprise.server.plugins.drift.mongodb.entities.MongoDBChangeSet;
import org.rhq.enterprise.server.plugins.drift.mongodb.entities.MongoDBChangeSetEntry;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.List;
import static java.util.Arrays.asList;
import static org.rhq.core.domain.drift.DriftCategory.*;
import static org.rhq.core.domain.drift.DriftChangeSetCategory.COVERAGE;
import static org.rhq.core.domain.drift.DriftChangeSetCategory.DRIFT;
import static org.rhq.core.domain.drift.DriftConfigurationDefinition.DriftHandlingMode.normal;
import static org.rhq.test.AssertUtils.assertCollectionMatchesNoOrder;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
public class ChangeSetDAOTest extends MongoDBTest {
ChangeSetDAO dao;
@BeforeMethod
public void initDAO() {
clearCollections("changesets");
dao = new ChangeSetDAO(morphia, connection, "rhqtest");
}
@Test(enabled = ENABLED)
public void saveAndLoadEmptyChangeSet() throws Exception {
MongoDBChangeSet expected = new MongoDBChangeSet();
expected.setCategory(COVERAGE);
expected.setVersion(1);
expected.setDriftDefinitionId(1);
expected.setResourceId(1);
expected.setDriftHandlingMode(normal);
dao.save(expected);
MongoDBChangeSet actual = dao.get(expected.getObjectId());
assertChangeSetMatches("Failed to save/load change set with no entries", expected, actual);
}
@Test(enabled = ENABLED)
public void saveAndLoadChangeSetWithAddedFileEntry() throws Exception {
MongoDBChangeSet expected = new MongoDBChangeSet();
expected.setCategory(DRIFT);
expected.setResourceId(1);
expected.setDriftDefinitionId(1);
expected.setVersion(1);
MongoDBChangeSetEntry entry = new MongoDBChangeSetEntry();
entry.setCategory(FILE_ADDED);
entry.setPath("foo");
// Adding the file to the change set entry causes the test to fail because the
// custom assert uses the equals method when comparing the MongoDBFile objects and
// MongoDBFile does not implement equals/hashCode...yet.
// MongoDBFile file = new MongoDBFile();
// file.setDataSize(1024L);
// file.setHashId("a1b2c3d4");
// file.setStatus(EMPTY);
//
// entry.setNewDriftFile(file);
expected.add(entry);
dao.save(expected);
MongoDBChangeSet actual = dao.get(expected.getObjectId());
assertChangeSetMatches("Failed to save/load change set with one entry", expected, actual);
}
@Test(enabled = ENABLED)
public void saveAndLoadChangeSetWithMultipleEntries() throws Exception {
MongoDBChangeSet expected = new MongoDBChangeSet();
expected.setCategory(DRIFT);
expected.setVersion(1);
expected.setResourceId(1);
expected.setDriftDefinitionId(1);
expected.add(new MongoDBChangeSetEntry("foo", FILE_ADDED)).add(new MongoDBChangeSetEntry("bar", FILE_ADDED));
dao.save(expected);
MongoDBChangeSet actual = dao.get(expected.getObjectId());
assertChangeSetMatches("Failed to save/load change set with multiple entries", expected, actual);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithIdFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(1);
c2.setResourceId(2);
c2.setDriftDefinitionId(2);
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterId(c1.getId());
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with id filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithResourceIdFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(2);
c2.setDriftDefinitionId(2);
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterResourceId(1);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with resource id " +
"filter", expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithVersionFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterVersion("2");
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c2);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change criteria with version filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithStartVersionFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
dao.save(c2);
MongoDBChangeSet c3 = new MongoDBChangeSet();
c3.setCategory(DRIFT);
c3.setVersion(3);
c3.setResourceId(1);
c3.setDriftDefinitionId(1);
dao.save(c3);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterStartVersion("2");
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c2, c3);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change criteria with start version filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithEndVersionFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
dao.save(c2);
MongoDBChangeSet c3 = new MongoDBChangeSet();
c3.setCategory(DRIFT);
c3.setVersion(3);
c3.setResourceId(1);
c3.setDriftDefinitionId(1);
dao.save(c3);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterEndVersion("2");
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1, c2);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change criteria with end version filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithDriftDefIdFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c11 = new MongoDBChangeSet();
c11.setCategory(DRIFT);
c11.setVersion(2);
c11.setResourceId(1);
c11.setDriftDefinitionId(1);
dao.save(c11);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(1);
c2.setResourceId(2);
c2.setDriftDefinitionId(2);
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1, c11);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with drift " +
"definition id filter", expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithCreatedAfterFilter() throws Exception {
long creationTime = System.currentTimeMillis() - (1000 * 60 * 10); // 10 minutes ago
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
c1.setCtime(creationTime);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
c2.setCtime(c1.getCtime() + (1000 * 60 * 5)); // 5 minutes ago
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterCreatedAfter(creationTime + 1000);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c2);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with created after " +
"filter", expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithCreatedBeforeFilter() throws Exception {
long creationTime = System.currentTimeMillis() - (1000 * 60 * 10); // 10 minutes ago
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
c1.setCtime(creationTime);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
c2.setCtime(c1.getCtime() + (1000 * 60 * 5)); // 5 minutes ago
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterCreatedBefore(c2.getCtime());
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with created after " +
"filter", expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithPathFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("/test/foo.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("/test/bar.txt", FILE_ADDED);
c2.add(e2);
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftPath("foo");
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set critiera with drift path filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithDirectoryFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("./foo/foo.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("./bar/bar.txt", FILE_ADDED);
c2.add(e2);
dao.save(c2);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterDriftDirectory("./bar");
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c2);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set critiera with drift directory filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithCategoryFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(COVERAGE);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
dao.save(c2);
MongoDBChangeSet c3 = new MongoDBChangeSet();
c3.setCategory(DRIFT);
c3.setVersion(3);
c3.setResourceId(1);
c3.setDriftDefinitionId(1);
dao.save(c3);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterCategory(DRIFT);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c2, c3);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with category filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaWithDriftCategoryFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(COVERAGE);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
c1.add(new MongoDBChangeSetEntry("foo.txt", FILE_ADDED));
c1.add(new MongoDBChangeSetEntry("bar.txt", FILE_ADDED));
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
c2.add(new MongoDBChangeSetEntry("foo.txt", FILE_CHANGED));
dao.save(c2);
MongoDBChangeSet c3 = new MongoDBChangeSet();
c3.setCategory(DRIFT);
c3.setVersion(3);
c3.setResourceId(1);
c3.setDriftDefinitionId(1);
c3.add(new MongoDBChangeSetEntry("bar.txt", FILE_REMOVED));
dao.save(c3);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterDriftCategories(FILE_CHANGED, FILE_REMOVED);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c2, c3);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift change set criteria with drift categories filter",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaAndDoNotFetchDrifts() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(COVERAGE);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
c1.add(new MongoDBChangeSetEntry("foo.txt", FILE_ADDED));
c1.add(new MongoDBChangeSetEntry("bar.txt", FILE_ADDED));
dao.save(c1);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.fetchDrifts(false);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change set when not fetching drifts", expected, actual, ignore);
assertTrue(actual.get(0).getDrifts().isEmpty(),
"The drift entries should not have been fetched with the change set");
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaAndSortByVersionAscending() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(COVERAGE);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
dao.save(c2);
MongoDBChangeSet c3 = new MongoDBChangeSet();
c3.setCategory(DRIFT);
c3.setVersion(3);
c3.setResourceId(1);
c3.setDriftDefinitionId(1);
dao.save(c3);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addSortVersion(PageOrdering.ASC);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c1, c2, c3);
assertChangeSetsMatch("Failed to sort change sets by version in ascending order", expected, actual);
}
@Test(enabled = ENABLED)
public void findByChangeSetCriteriaAndSortByVersionDescending() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(COVERAGE);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
dao.save(c2);
MongoDBChangeSet c3 = new MongoDBChangeSet();
c3.setCategory(DRIFT);
c3.setVersion(3);
c3.setResourceId(1);
c3.setDriftDefinitionId(1);
dao.save(c3);
GenericDriftChangeSetCriteria criteria = new GenericDriftChangeSetCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addSortVersion(PageOrdering.DESC);
List<MongoDBChangeSet> actual = dao.findByChangeSetCritiera(criteria);
List<MongoDBChangeSet> expected = asList(c3, c2, c1);
assertChangeSetsMatch("Failed to sort change sets by version in descending order", expected, actual);
}
@Test(enabled = ENABLED)
public void findByDriftCriteriaWithResourceIdFilter() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(1);
c2.setResourceId(2);
c2.setDriftDefinitionId(2);
dao.save(c2);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterResourceIds(1);
List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria);
List<MongoDBChangeSet> expected = asList(c1);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift criteria with resource id filter.",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByDriftCriteriaWithResourceIdsFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 1, 2, 2);
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(COVERAGE, 1, 3, 3);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterResourceIds(1, 2);
List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria);
List<MongoDBChangeSet> expected = asList(c1, c2);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift criteria with resource ids filter.",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findByDriftCriteriaWithCategoryFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1).add(new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED));
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(DRIFT, 2, 1, 1).add(new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED))
.add(new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED));
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 3, 1, 1).add(new MongoDBChangeSetEntry("c1-1.txt", FILE_REMOVED));
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterCategories(FILE_ADDED);
List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria);
List<MongoDBChangeSet> expected = asList(c1, c2);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift criteria with category filter.", expected,
actual, ignore);
}
@Test(enabled = ENABLED)
public void findByDriftCriteriaWithCategoriesFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1).add(new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED));
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(DRIFT, 2, 1, 1).add(new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED))
.add(new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED));
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 3, 1, 1).add(new MongoDBChangeSetEntry("c1-1.txt", FILE_REMOVED));
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterCategories(FILE_CHANGED, FILE_REMOVED);
List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria);
List<MongoDBChangeSet> expected = asList(c2, c3);
String ignore = "drifts";
assertCollectionMatchesNoOrder("Failed to find change sets by drift criteria with categories filter.",
expected, actual, ignore);
}
@Test(enabled = ENABLED)
public void findEntriesWithIdFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c1.add(e1);
c1.add(e2);
dao.save(c1);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterId(e2.getId());
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with id filter", asList(e2), entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithCategoriesFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c1-2.txt", FILE_ADDED);
c1.add(e1).add(e2);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(DRIFT, 2, 1, 1);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
MongoDBChangeSetEntry e4 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
MongoDBChangeSetEntry e5 = new MongoDBChangeSetEntry("c1-2.txt", FILE_REMOVED);
c2.add(e3).add(e4).add(e5);
dao.save(c2);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterCategories(FILE_CHANGED, FILE_REMOVED);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with category filter", asList(e4, e5), entries);
}
@Test(enabled = ENABLED)
public void findByDriftCriteriaWithStartTimeFilter() throws Exception {
long startTime = System.currentTimeMillis() - (1000 * 60 * 60); // one hour ago
int resourceId = 1;
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, resourceId, 1);
c1.setCtime(startTime - (1000 * 5)); // c1 is created 5 seconds before startTime
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
e1.setCtime(startTime - (1000 * 5)); // e1 is created 5 seconds before startTime
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(DRIFT, 2, resourceId, 1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
c2.add(e2);
dao.save(c2);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterResourceIds(resourceId);
criteria.addFilterStartTime(startTime);
List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria);
assertEquals(actual.size(), 1, "Expected to get back one change set");
MongoDBChangeSet actualChangeSet = actual.get(0);
assertChangeSetMatches("Failed to find drift entries by drift criteria with start time filter", c2,
actualChangeSet);
}
@Test(enabled = ENABLED)
public void findEntriesWithChangeSetIdFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 1, 2, 1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c2.add(e2);
dao.save(c2);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterChangeSetId(c2.getId());
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with change set id filter", asList(e2), entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithResourceIdFilters() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 1, 2, 1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c2.add(e2);
dao.save(c2);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterResourceIds(1);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with resource id filter", asList(e1), entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithResourceIdAndCategoryFilters() {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c1-2.txt", FILE_ADDED);
c1.add(e1).add(e2);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 1, 2, 1);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c2.add(e3);
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 2, 1, 1);
MongoDBChangeSetEntry e4 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
MongoDBChangeSetEntry e5 = new MongoDBChangeSetEntry("c1-2.txt", FILE_REMOVED);
c3.add(e4).add(e5);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterResourceIds(1);
criteria.addFilterCategories(FILE_ADDED, FILE_CHANGED);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with resource id and category filters",
asList(e1, e2, e4), entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithResourceIdAndStartTimeFilter() throws Exception {
long startTime = System.currentTimeMillis() - (1000 * 60 * 60); // one hour ago
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
c1.setCtime(startTime - (1000 * 5)); // c1 is created 5 seconds before startTime
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
e1.setCtime(startTime - (1000 * 5)); // e1 is created 5 seconds before startTime
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 1, 2, 1);
c2.setCtime(startTime - (1000 * 5)); // c2 is created 5 seconds before startTime
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
e2.setCtime(startTime - (1000 * 5)); // e2 is created 5 seconds before startTime
c2.add(new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED));
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 2, 1, 1);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
c3.add(e3);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterStartTime(startTime);
criteria.addFilterResourceIds(1);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with resource id and start time filters", asList(e3),
entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithResourceIdAndEndTimeFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 1, 2, 1);
c2.add(new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED));
dao.save(c2);
long endTime = System.currentTimeMillis();
Thread.sleep(10);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 2, 1, 1);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
c3.add(e3);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterEndTime(endTime);
criteria.addFilterResourceIds(1);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with resource id and end time filters", asList(e1),
entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithChangeSetStartVersionFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 2, 1, 1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c2.add(e2);
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 3, 1, 1);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
c3.add(e3);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterChangeSetStartVersion(2);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with change set start version filter", asList(e2, e3),
entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithChangeSetEndVersionFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(COVERAGE, 2, 1, 1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c2.add(e2);
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(DRIFT, 3, 1, 1);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
c3.add(e3);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterDriftDefinitionId(1);
criteria.addFilterChangeSetEndVersion(2);
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with change set end version filter", asList(e1, e2),
entries);
}
@Test(enabled = ENABLED)
public void findEntriesWithPathFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED);
c1.add(e1);
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(DRIFT, 2, 1, 1);
MongoDBChangeSetEntry e2 = new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED);
MongoDBChangeSetEntry e3 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
c2.add(e2).add(e3);
dao.save(c2);
MongoDBChangeSet c3 = createChangeSet(COVERAGE, 1, 2, 1);
MongoDBChangeSetEntry e4 = new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED);
MongoDBChangeSetEntry e5 = new MongoDBChangeSetEntry("c3-1.txt", FILE_ADDED);
c3.add(e4).add(e5);
dao.save(c3);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterPath("c2-1.txt");
List<MongoDBChangeSetEntry> entries = dao.findEntries(criteria);
assertEntriesMatch("Failed to find change set entries with path filter", asList(e3, e4), entries);
}
@Test(enabled = ENABLED)
public void findByDriftCriteriaWithChangeSetIdFilter() throws Exception {
MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, 1, 1);
c1.add(new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED));
dao.save(c1);
MongoDBChangeSet c2 = createChangeSet(DRIFT, 2, 1, 1);
c2.add(new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED));
dao.save(c2);
GenericDriftCriteria criteria = new GenericDriftCriteria();
criteria.addFilterChangeSetId(c2.getId());
List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria);
assertChangeSetsMatchNoOrder("Failed to find change sets by drift criteria with change set id filter", asList(c2),
actual);
}
@Test(enabled = ENABLED)
public void deleteChangeSets() throws Exception {
MongoDBChangeSet c1 = new MongoDBChangeSet();
c1.setCategory(DRIFT);
c1.setVersion(1);
c1.setResourceId(1);
c1.setDriftDefinitionId(1);
c1.setDriftDefinitionName("delete-test");
dao.save(c1);
MongoDBChangeSet c2 = new MongoDBChangeSet();
c2.setCategory(DRIFT);
c2.setVersion(2);
c2.setResourceId(1);
c2.setDriftDefinitionId(1);
c2.setDriftDefinitionName("delete-test");
dao.save(c2);
dao.deleteChangeSets(1, "delete-test");
assertTrue(dao.find().asList().isEmpty(), "Failed to delete one or more change sets");
}
/**
* A convenience factory method for creating a change set.
*
* @param category A {@link DriftChangeSetCategory}
* @param version The change set version
* @param resourceId The owning resource id
* @param driftDefId The drift definition id
* @return A {@link MongoDBChangeSet}
*/
MongoDBChangeSet createChangeSet(DriftChangeSetCategory category, int version, int resourceId, int driftDefId) {
MongoDBChangeSet changeSet = new MongoDBChangeSet();
changeSet.setCategory(category);
changeSet.setVersion(version);
changeSet.setResourceId(resourceId);
changeSet.setDriftDefinitionId(driftDefId);
return changeSet;
}
}