Mercurial > hg > release > thermostat-0.13
changeset 1149:d1f8a091dd68
Add integration tests for query expressions
This commit adds integration tests for each type of query operator we
support. One key advantage of these tests is that they provide a way to
verify the generated MongoDB queries are valid and return the expected
results.
Reviewed-by: vanaltj
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-June/007101.html
author | Elliott Baron <ebaron@redhat.com> |
---|---|
date | Fri, 28 Jun 2013 12:44:41 -0400 |
parents | e597d72c3ecb |
children | d6f3b3eec520 |
files | integration-tests/src/test/java/com/redhat/thermostat/itest/WebAppTest.java |
diffstat | 1 files changed, 334 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/integration-tests/src/test/java/com/redhat/thermostat/itest/WebAppTest.java Fri Jun 28 12:37:39 2013 -0400 +++ b/integration-tests/src/test/java/com/redhat/thermostat/itest/WebAppTest.java Fri Jun 28 12:44:41 2013 -0400 @@ -53,11 +53,11 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import java.util.Arrays; +import java.util.HashSet; import java.util.Properties; import java.util.UUID; -import javax.security.auth.login.LoginException; - import org.eclipse.jetty.security.DefaultUserIdentity; import org.eclipse.jetty.security.MappedLoginService; import org.eclipse.jetty.server.Server; @@ -75,7 +75,10 @@ import com.redhat.thermostat.storage.config.StartupConfiguration; import com.redhat.thermostat.storage.core.Add; import com.redhat.thermostat.storage.core.Cursor; +import com.redhat.thermostat.storage.core.Key; import com.redhat.thermostat.storage.core.Query; +import com.redhat.thermostat.storage.query.Expression; +import com.redhat.thermostat.storage.query.ExpressionFactory; import com.redhat.thermostat.test.FreePortFinder; import com.redhat.thermostat.test.FreePortFinder.TryPort; import com.redhat.thermostat.vm.classstat.common.VmClassStatDAO; @@ -225,6 +228,25 @@ pojo.setVmId(987); add.setPojo(pojo); add.apply(); + + // Add another couple of entries + add = webStorage.createAdd(VmClassStatDAO.vmClassStatsCategory); + pojo = new VmClassStat(); + pojo.setAgentId("fluff"); + pojo.setLoadedClasses(67890); + pojo.setTimeStamp(42); + pojo.setVmId(654); + add.setPojo(pojo); + add.apply(); + + add = webStorage.createAdd(VmClassStatDAO.vmClassStatsCategory); + pojo = new VmClassStat(); + pojo.setAgentId("fluff"); + pojo.setLoadedClasses(12345); + pojo.setTimeStamp(42); + pojo.setVmId(321); + add.setPojo(pojo); + add.apply(); } @Test @@ -244,6 +266,35 @@ Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); Cursor<VmClassStat> cursor = query.execute(); assertTrue(cursor.hasNext()); + cursor.next(); + assertTrue(cursor.hasNext()); + cursor.next(); + assertTrue(cursor.hasNext()); + cursor.next(); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryEqualTo() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.equalTo(Key.VM_ID, 987); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); VmClassStat foundPojo = cursor.next(); assertEquals("fluff", foundPojo.getAgentId()); assertEquals(42, foundPojo.getTimeStamp()); @@ -251,6 +302,287 @@ assertEquals(12345, foundPojo.getLoadedClasses()); assertFalse(cursor.hasNext()); } + + @Test + public void authorizedQueryNotEqualTo() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.notEqualTo(Key.VM_ID, 321); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result1 = cursor.next(); + assertTrue(cursor.hasNext()); + VmClassStat result2 = cursor.next(); + // Account for arbitrary ordering + assertTrue(result1.getVmId() == 654 && result2.getVmId() == 987 + || result1.getVmId() == 987 && result2.getVmId() == 654); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryGreaterThan() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.greaterThan(Key.VM_ID, 654); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result = cursor.next(); + assertEquals(987, result.getVmId()); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryGreaterThanOrEqualTo() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.greaterThanOrEqualTo(Key.VM_ID, 654); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result1 = cursor.next(); + assertTrue(cursor.hasNext()); + VmClassStat result2 = cursor.next(); + // Account for arbitrary ordering + assertTrue(result1.getVmId() == 654 && result2.getVmId() == 987 + || result1.getVmId() == 987 && result2.getVmId() == 654); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryLessThan() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.lessThan(Key.VM_ID, 654); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result = cursor.next(); + assertEquals(321, result.getVmId()); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryLessThanOrEqualTo() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.lessThanOrEqualTo(Key.VM_ID, 654); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result1 = cursor.next(); + assertTrue(cursor.hasNext()); + VmClassStat result2 = cursor.next(); + // Account for arbitrary ordering + assertTrue(result1.getVmId() == 654 && result2.getVmId() == 321 + || result1.getVmId() == 321 && result2.getVmId() == 654); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryIn() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.in(Key.VM_ID, new HashSet<>(Arrays.asList(987, 321)), Integer.class); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result1 = cursor.next(); + assertTrue(cursor.hasNext()); + VmClassStat result2 = cursor.next(); + // Account for arbitrary ordering + assertTrue(result1.getVmId() == 987 && result2.getVmId() == 321 + || result1.getVmId() == 321 && result2.getVmId() == 987); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryNotIn() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.notIn(Key.VM_ID, new HashSet<>(Arrays.asList(987, 321)), Integer.class); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result = cursor.next(); + assertEquals(654, result.getVmId()); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryNot() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.not(factory.greaterThan(Key.VM_ID, 321)); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result = cursor.next(); + assertEquals(321, result.getVmId()); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryAnd() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.and(factory.greaterThan(Key.VM_ID, 321), factory.lessThanOrEqualTo(Key.VM_ID, 654)); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result = cursor.next(); + assertEquals(654, result.getVmId()); + assertFalse(cursor.hasNext()); + } + + @Test + public void authorizedQueryOr() throws Exception { + String[] roleNames = new String[] { + Roles.REGISTER_CATEGORY, + Roles.READ, + Roles.LOGIN, + Roles.ACCESS_REALM + }; + String testuser = "testuser"; + String password = "testpassword"; + setupJAASForUser(roleNames, testuser, password); + connectStorage(testuser, password); + webStorage.registerCategory(VmClassStatDAO.vmClassStatsCategory); + + Query<VmClassStat> query = webStorage.createQuery(VmClassStatDAO.vmClassStatsCategory); + ExpressionFactory factory = new ExpressionFactory(); + Expression expr = factory.or(factory.greaterThan(Key.VM_ID, 654), + factory.greaterThanOrEqualTo(VmClassStatDAO.loadedClassesKey, 67890L)); + query.where(expr); + Cursor<VmClassStat> cursor = query.execute(); + + assertTrue(cursor.hasNext()); + VmClassStat result1 = cursor.next(); + assertTrue(cursor.hasNext()); + VmClassStat result2 = cursor.next(); + // Account for arbitrary ordering + assertTrue(result1.getVmId() == 987 && result2.getVmId() == 654 + || result1.getVmId() == 654 && result2.getVmId() == 987); + assertFalse(cursor.hasNext()); + } @Test public void authorizedLoadSave() throws Exception {