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(a)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);