modules/enterprise/server/plugins/drift-mongodb/pom.xml | 4 modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAO.java | 8 modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAO.java | 9 - modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/GridFSTest.java | 83 ---------- modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAOTest.java | 73 +++++++- modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAOTest.java | 42 +++-- 6 files changed, 113 insertions(+), 106 deletions(-)
New commits: commit 414a565741e3f4e842261f03f300489c96bbc6c3 Author: John Sanda jsanda@redhat.com Date: Fri Sep 23 11:01:22 2011 -0400
Adding more drift criteria query support
diff --git a/modules/enterprise/server/plugins/drift-mongodb/pom.xml b/modules/enterprise/server/plugins/drift-mongodb/pom.xml index 1f49403..b5eefb7 100644 --- a/modules/enterprise/server/plugins/drift-mongodb/pom.xml +++ b/modules/enterprise/server/plugins/drift-mongodb/pom.xml @@ -48,13 +48,13 @@ <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> - <version>2.6.3</version> + <version>2.6.5</version> </dependency>
<dependency> <groupId>com.google.code.morphia</groupId> <artifactId>morphia</artifactId> - <version>0.99</version> + <version>1.00-SNAPSHOT</version> </dependency>
<dependency> diff --git a/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAO.java b/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAO.java index 7e6e7b8..1f4f96c 100644 --- a/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAO.java +++ b/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAO.java @@ -64,6 +64,14 @@ public class ChangeSetDAO extends BasicDAO<MongoDBChangeSet, ObjectId> { query.field("files.category").in(asList(criteria.getFilterCategories())); }
+ if (criteria.getFilterStartTime() != null) { + query.field("files.ctime").greaterThanOrEq(criteria.getFilterStartTime()); + } + + if (criteria.getFilterEndTime() != null) { + query.field("files.ctime").lessThanOrEq(criteria.getFilterEndTime()); + } + return query.asList(); }
diff --git a/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAO.java b/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAO.java index 869b6b3..33fadf5 100644 --- a/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAO.java +++ b/modules/enterprise/server/plugins/drift-mongodb/src/main/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAO.java @@ -23,6 +23,7 @@ import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream;
import com.mongodb.BasicDBObject; import com.mongodb.DB; @@ -41,8 +42,12 @@ public class FileDAO { gridFS = new GridFS(this.db); }
- public GridFSDBFile findOne(String hash) { - return gridFS.findOne(new BasicDBObject("_id", hash)); + public InputStream findOne(String hash) { + GridFSDBFile dbFile = gridFS.findOne(new BasicDBObject("_id", hash)); + if (dbFile == null) { + return null; + } + return dbFile.getInputStream(); }
public void save(File file) throws IOException { diff --git a/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/GridFSTest.java b/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/GridFSTest.java deleted file mode 100644 index da14b84..0000000 --- a/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/GridFSTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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; - -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; - -import com.mongodb.DB; -import com.mongodb.Mongo; -import com.mongodb.gridfs.GridFS; -import com.mongodb.gridfs.GridFSDBFile; -import com.mongodb.gridfs.GridFSInputFile; - -import org.bson.types.ObjectId; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -import org.rhq.core.util.stream.StreamUtil; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; - -public class GridFSTest { - - // Tests need to be disabled when committed/pushed to the remote repo until we get - // mongodb installed on the hudson slave - static final boolean ENABLED = false; - - Mongo connection; - - DB db; - - @BeforeClass - public void initDB() throws Exception { - connection = new Mongo("localhost"); - connection.dropDatabase("rhqtest"); - db = connection.getDB("rhqtest"); - - } - - @Test(enabled = ENABLED) - public void writeAndReadFile() throws Exception { - GridFS gridFS = new GridFS(db); - File file = new File("/home/jsanda/clojure-plugin.tar"); - GridFSInputFile inputFile = gridFS.createFile(new FileInputStream(file), file.getName()); - - inputFile.save(); - - FileOutputStream stream = new FileOutputStream("/home/jsanda/gridfs-test.tar"); - GridFSDBFile gridFSDBFile = gridFS.findOne((ObjectId) inputFile.getId()); - gridFSDBFile.writeTo(stream); - - GridFSDBFile dbFile = gridFS.findOne(file.getName()); - assertNotNull(dbFile); - - File outputFile = new File("/tmp/clojure-plugin.tar"); - outputFile.delete(); - - StreamUtil.copy(dbFile.getInputStream(), new BufferedOutputStream(new FileOutputStream(outputFile)), true); - - assertEquals(outputFile.length(), file.length()); - } - -} diff --git a/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAOTest.java b/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAOTest.java index bfcc480..f95026a 100644 --- a/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAOTest.java +++ b/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/ChangeSetDAOTest.java @@ -64,7 +64,7 @@ public class ChangeSetDAOTest {
@BeforeClass public void initDB() throws Exception { - connection = new Mongo("localhost"); + connection = new Mongo("127.0.0.1");
morphia = new Morphia() .map(MongoDBChangeSet.class) @@ -259,15 +259,68 @@ public class ChangeSetDAOTest { assertChangeSetMatches("Failed to find change set by drift criteria with id filter.", c1, actual.get(0)); }
-// @Test -// public void testSlice() throws Exception { -// MongoDBChangeSet c1 = createChangeSet(DRIFT, 2, 1, 1) -// .add(new MongoDBChangeSetEntry("c2-1.txt", FILE_ADDED)) -// .add(new MongoDBChangeSetEntry("c1-1.txt", FILE_CHANGED)); -// dao.save(c1); -// -// dao.createQuery().filter("files $slice", new Integer(1)); -// } + @Test(enabled = ENABLED) + public void findDriftCriteriaWithStartTimeFilter() throws Exception { + int resourceId = 1; + + MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, resourceId, 1); + MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED); + c1.add(e1); + + dao.save(c1); + + long startTime = System.currentTimeMillis(); + Thread.sleep(10); + + 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("Expected to get back one change set", 1, actual.size()); + 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 findDriftCriteriaWithEndTimeFilter() throws Exception { + int resourceId = 1; + + MongoDBChangeSet c1 = createChangeSet(COVERAGE, 1, resourceId, 1); + MongoDBChangeSetEntry e1 = new MongoDBChangeSetEntry("c1-1.txt", FILE_ADDED); + c1.add(e1); + + dao.save(c1); + + long endTime = System.currentTimeMillis(); + Thread.sleep(10); + + 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.addFilterEndTime(endTime); + criteria.addFilterResourceIds(resourceId); + + List<MongoDBChangeSet> actual = dao.findByDriftCriteria(criteria); + + assertEquals("Expected to get back one change set", 1, actual.size()); + MongoDBChangeSet actualChangeSet = actual.get(0); + + assertChangeSetMatches("Failed to find drift entries with end time filter", c1, actualChangeSet); + }
/** * This method first checks that the actual change set is not null. It then performs a diff --git a/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAOTest.java b/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAOTest.java index ce2af01..9ad3f6a 100644 --- a/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAOTest.java +++ b/modules/enterprise/server/plugins/drift-mongodb/src/test/java/org/rhq/enterprise/server/plugins/drift/mongodb/dao/FileDAOTest.java @@ -23,6 +23,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.Random;
import com.google.code.morphia.Datastore; @@ -71,7 +72,7 @@ public class FileDAOTest {
@BeforeClass public void initDB() throws Exception { - connection = new Mongo("localhost"); + connection = new Mongo("127.0.0.1");
morphia = new Morphia() .map(MongoDBChangeSet.class) @@ -100,33 +101,56 @@ public class FileDAOTest {
@Test(enabled = ENABLED) public void findFile() throws Exception { - File file = createRandomFile("findFile.expected"); + File file = createRandomFile(); String hash = sha256(file);
GridFSInputFile inputFile = gridFS.createFile(new FileInputStream(file)); inputFile.put("_id", hash); inputFile.save();
- GridFSDBFile dbFile = dao.findOne(hash); + InputStream dbInputStream = dao.findOne(hash);
- assertNotNull(dbFile, "Expected to find file with name " + hash); + assertNotNull(dbInputStream, "Expected to find file with name " + hash); File actualFile = new File(dataDir, "findFile.actual"); - StreamUtil.copy(dbFile.getInputStream(), new FileOutputStream(actualFile), true); + StreamUtil.copy(dbInputStream, new FileOutputStream(actualFile), true);
- assertTrue(actualFile.exists(), "Expected to file " + actualFile.getPath()); + assertTrue(actualFile.exists(), "Expected to find file " + actualFile.getPath()); }
- private File createRandomFile(String fileName) throws Exception { - File file = new File(dataDir, fileName); - FileOutputStream stream = new FileOutputStream(file); + @Test(enabled = ENABLED) + public void saveAndFindFile() throws Exception { + File file = createRandomFile(); + String hash = file.getName(); + + dao.save(file); + InputStream dbInputStream = dao.findOne(hash); + + assertNotNull(dbInputStream, "Expected to find file with name " + hash); + File actualFile = new File(dataDir, "saveAndFindFile.actual"); + StreamUtil.copy(dbInputStream, new FileOutputStream(actualFile), true); + + assertTrue(actualFile.exists(), "Expected to find file " + actualFile.getPath()); + } + + private File createRandomFile() throws Exception { byte[] bytes = new byte[32]; random.nextBytes(bytes); + File file = new File(dataDir, sha256(bytes)); + FileOutputStream stream = new FileOutputStream(file); write(bytes, stream); stream.close();
return file; }
+ protected String sha256(byte[] bytes) { + try { + return digestGenerator.calcDigestString(bytes); + } catch (IOException e) { + throw new RuntimeException("Failed to calculate SHA-256 hash", e); + } + } + protected String sha256(File file) { try { return digestGenerator.calcDigestString(file);
rhq-commits@lists.fedorahosted.org