Author: michiel
Date: 2010-04-13 12:44:41 +0200 (Tue, 13 Apr 2010)
New Revision: 41872
Added:
mmbase/trunk/bridge/src/main/config/builders/properties.xml
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
Removed:
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java
Log:
fixes some test-cases
Copied: mmbase/trunk/bridge/src/main/config/builders/properties.xml (from rev
41867, mmbase/trunk/core/src/main/config/builders/properties.xml)
===================================================================
--- mmbase/trunk/bridge/src/main/config/builders/properties.xml
(rev 0)
+++ mmbase/trunk/bridge/src/main/config/builders/properties.xml 2010-04-13
10:44:41 UTC (rev 41872)
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<builder
+ xmlns="http://www.mmbase.org/xmlns/builder"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ extends="object"
+ name="properties"
+ maintainer="mmbase.org"
+ version="0"
+ xsi:schemaLocation="http://www.mmbase.org/xmlns/builder
http://www.mmbase.org/xmlns/builder.xsd">
+
+ <!--
+ This is the 'properties' builder MMBase used to have.
+ You can set it active again.
+ See also javadoc in org.mmbase.module.builders.Properties
+ MMB-1656
+ -->
+ <status>inactive</status>
+
+ <class>Properties</class>
+ <searchage>-1</searchage>
+ <names>
+ <singular xml:lang="en">Property</singular>
+ <singular xml:lang="nl">Eigenschap</singular>
+
+ <plural xml:lang="en">Properties</plural>
+ <plural xml:lang="nl">Eigenschappen</plural>
+ </names>
+
+ <descriptions>
+ <description xml:lang="en">
+ Flexible properties to be added to any object. The implementation
depends on the application
+ or template in which a property can be used.
+ </description>
+ <description xml:lang="nl">
+ Flexibele eigenschappen of voorkeuren die aan een node kunnen worden
toegekend. De implementatie
+ ervan is afhankelijk van de applicatie of de template waarin een
voorkeur kan worden gebruikt.
+ </description>
+ </descriptions>
+
+ <fieldlist>
+
+ <field name="parent">
+ <descriptions>
+ <description xml:lang="en">Node to which the property was
added</description>
+ <description xml:lang="nl">Node waaraan de eigenschap of voorkeur is
toegekend</description>
+ </descriptions>
+ <gui>
+ <guiname xml:lang="en">Parent</guiname>
+ <guiname xml:lang="nl">Ouder</guiname>
+ </gui>
+ <editor><positions><list>1</list></positions></editor>
+ <datatype base="node" xmlns="http://www.mmbase.org/xmlns/datatypes">
+ <required value="true" />
+ </datatype>
+ </field>
+
+ <field name="key">
+ <descriptions>
+ <description xml:lang="en">Key, identifier of a property</description>
+ <description xml:lang="nl">Sleutel, identificatiewaarde waarmee de
eigenschap of voorkeur kan worden herkend</description>
+ </descriptions>
+ <gui>
+ <guiname xml:lang="en">Key</guiname>
+ <guiname xml:lang="nl">Sleutel</guiname>
+ </gui>
+ <editor><positions><list>2</list></positions></editor>
+ <datatype base="eline" xmlns="http://www.mmbase.org/xmlns/datatypes">
+ <required value="true" />
+ <minLength value="1" />
+ <maxLength value="255" />
+ </datatype>
+ </field>
+ <field name="ptype">
+ <!-- I have no idea what a ptype is
+ Probably the 'type' of the value. But what the possible values can
be is still unclear.
+ I'd suggest that the values could be datatypes, but that certainly
is not what it used to mean a long time ago.
+ -->
+ <gui>
+ <guiname xml:lang="en">Ptype</guiname>
+ <guiname xml:lang="nl">P-type</guiname>
+ </gui>
+
<editor><positions><input>-1</input><list>-1</list><search>-1</search></positions></editor>
+ <datatype base="eline" xmlns="http://www.mmbase.org/xmlns/datatypes">
+ <maxLength value="16" />
+ </datatype>
+ </field>
+
+ <field name="value">
+ <descriptions>
+ <description xml:lang="en">Value of the property</description>
+ <description xml:lang="nl">Waarde van de eigenschap of
voorkeur</description>
+ </descriptions>
+ <gui>
+ <guiname xml:lang="en">Value</guiname>
+ <guiname xml:lang="nl">Waarde</guiname>
+ </gui>
+ <datatype base="field" xmlns="http://www.mmbase.org/xmlns/datatypes">
+ <maxLength value="255" />
+ </datatype>
+ </field>
+ </fieldlist>
+
+</builder>
Modified:
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
===================================================================
---
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
2010-04-13 10:31:27 UTC (rev 41871)
+++
mmbase/trunk/bridge/src/main/java/org/mmbase/storage/search/ClusterQueries.java
2010-04-13 10:44:41 UTC (rev 41872)
@@ -11,6 +11,7 @@
import java.util.*;
import org.mmbase.bridge.Field;
+import org.mmbase.bridge.NotFoundException;
import org.mmbase.storage.search.implementation.*;
import org.mmbase.util.logging.*;
@@ -466,14 +467,18 @@
return;
}
- Field fieldDefs= getQueryContext().getField(step.getTableName(),
fieldName);
- if (fieldDefs == null) {
- throw new IllegalArgumentException("Not a known field of builder "
+ step.getTableName() + ": \"" + fieldName + "\"");
+ try {
+ Field fieldDefs= getQueryContext().getField(step.getTableName(),
fieldName);
+ if (fieldDefs == null) {
+ throw new IllegalArgumentException("Not a known field of
builder " + step.getTableName() + ": \"" + fieldName + "\"");
+ }
+
+ // Add the stepfield.
+ BasicStepField stepField= query.addField(step, fieldDefs);
+ fieldsByAlias.put(fieldAlias, stepField);
+ } catch (NotFoundException nfe) {
+ throw new IllegalArgumentException(nfe);
}
-
- // Add the stepfield.
- BasicStepField stepField= query.addField(step, fieldDefs);
- fieldsByAlias.put(fieldAlias, stepField);
}
/**
Copied: mmbase/trunk/bridge/src/test/java/org/mmbase/storage (from rev 41853,
mmbase/trunk/core/src/test/java/org/mmbase/storage)
Deleted:
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
===================================================================
---
mmbase/trunk/core/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
2010-04-12 15:39:21 UTC (rev 41853)
+++
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
2010-04-13 10:44:41 UTC (rev 41872)
@@ -1,398 +0,0 @@
-package org.mmbase.storage.search;
-
-import java.util.*;
-import org.junit.*;
-import static org.junit.Assert.*;
-import org.mmbase.bridge.*;
-import org.mmbase.bridge.mock.*;
-import org.mmbase.bridge.util.Queries;
-import org.mmbase.storage.search.implementation.*;
-
-
-public class ClusterQueriesTest {
-
- private final String NEWS = "news";
- private static int RELATED;
-
- @BeforeClass
- public static void setup() throws java.io.IOException {
- MockCloudContext.getInstance().addCore();
- MockCloudContext.getInstance().addCoreModel();
-
MockCloudContext.getInstance().addNodeManagers(MockBuilderReader.getBuilderLoader().getChildResourceLoader("mynews"));
- RELATED =
MockCloudContext.getInstance().getCloud("mmbase").getRelationManager("related").getNumber();
- }
-
- ClusterQueries instance = new
BridgeClusterQueries(MockCloudContext.getInstance().getCloud("mmbase"));
-
- @Test
- public void getUniqueTableAlias() {
- List<String> originalAliases = Arrays.asList(new String[] {"test1",
"test2"});
- Set<String> tableAliases = new HashSet<String>();
- String alias = instance.getUniqueTableAlias("test", tableAliases,
originalAliases);
- assertTrue(alias.equals("test"));
- assertTrue(tableAliases.size() == 1);
- assertTrue(tableAliases.contains("test"));
- assertTrue(originalAliases.size() == 2);
-
- alias = instance.getUniqueTableAlias("test", tableAliases,
originalAliases);
- assertTrue(alias.equals("test0"));
- assertTrue(tableAliases.size() == 2);
- assertTrue(tableAliases.contains("test0"));
- assertTrue(originalAliases.size() == 2);
-
- alias = instance.getUniqueTableAlias(
- "test1", tableAliases, originalAliases);
- assertTrue(alias.equals("test1"));
- assertTrue(tableAliases.size() == 3);
- assertTrue(tableAliases.contains("test1"));
- assertTrue(originalAliases.size() == 2);
-
- alias = instance.getUniqueTableAlias(
- "test", tableAliases, originalAliases);
- assertTrue(alias.equals("test3"));
- assertTrue(tableAliases.size() == 4);
- assertTrue(tableAliases.contains("test1"));
- assertTrue(originalAliases.size() == 2);
-
- for (int i = 4; i < 10; i++) {
- alias = instance.getUniqueTableAlias(
- "test" + (i - 1), tableAliases, originalAliases);
- assertTrue(alias, alias.equals("test" + i));
- assertTrue(tableAliases.size() == i + 1);
- assertTrue(tableAliases.contains("test" + i));
- assertTrue(originalAliases.size() == 2);
- }
-
- try {
- // Can't generate another unique value for this string,
- // should throw IndexOutOfBoundsException.
- instance.getUniqueTableAlias("test", tableAliases,
originalAliases);
- fail("Can't generate another unique value for this string, "
- + "should throw IndexOutOfBoundsException.");
- } catch (IndexOutOfBoundsException e) {}
-
- assertTrue(tableAliases.size() == 10);
- for (int i = 0; i < 10; i++) {
- if (i == 2) {
- assertTrue(!tableAliases.contains("test" + i));
- } else {
- assertTrue(tableAliases.contains("test" + i));
- }
- }
- assertTrue(tableAliases.contains("test"));
-
- // Alias containing white space.
- alias = instance.getUniqueTableAlias(
- "white space", tableAliases, originalAliases);
- assertTrue(alias, alias.equals("white space"));
- assertTrue(tableAliases.contains("white space"));
- }
-
- @Test
- public void getBuilder() {
- Map<String,Integer> nodes = new HashMap<String,Integer>();
-
assertTrue(MockCloudContext.getInstance().getCloud("mmbase").hasNodeManager(NEWS));
-
- assertEquals(NEWS, instance.getBuilder("news", nodes));
- assertTrue(nodes.size() == 0);
-
- assertTrue(instance.getBuilder("news0", nodes).equals(NEWS));
- assertTrue(nodes.size() == 0);
-
- assertTrue(instance.getBuilder("news1", nodes).equals(NEWS));
- assertTrue(nodes.size() == 0);
-
- assertEquals("insrel", instance.getBuilder("related", nodes));
- assertTrue("Nodes is " + nodes + " should be size 1", nodes.size() ==
1);
- assertEquals(Integer.valueOf(RELATED), nodes.get("related"));
-
- assertEquals("insrel", instance.getBuilder("related0", nodes));
-
- assertEquals(2, nodes.size());
- assertEquals(Integer.valueOf(RELATED), nodes.get("related0"));
-
- try {
- // Unknown builder or role, should throw IllegalArgumentException.
- instance.getBuilder("xxxx", nodes);
- fail("Unknown builder or role, "
- + "should throw IllegalArgumentException.");
- } catch (IllegalArgumentException e) {}
- }
-
-
- @Test
- public void addFields() {
- BasicSearchQuery query = new BasicSearchQuery();
- Map<String,Integer> roles = new HashMap<String,Integer>();
- Map<String, BasicStepField> fieldsByName = new HashMap<String,
BasicStepField>();
- List<String> tables = Arrays.asList(
- new String[] {"news", "related", "people", "news1"});
- Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables,
roles, true, fieldsByName);
- assertTrue(query.getFields().size() == 4);
- assertTrue(fieldsByName.size() == 4);
-
- instance.addFields(query, "news.title", stepsByAlias, fieldsByName);
-
- StepField stepField = getField(query, "news", "title");
- assertTrue(stepField != null);
- assertTrue(stepField.equals(fieldsByName.get("news.title")));
- assertTrue(stepField.getAlias() == null);
- assertTrue(query.getFields().size() == 5);
- assertTrue(fieldsByName.size() == 5);
-
- instance.addFields(query, "related.number", stepsByAlias,
fieldsByName);
- stepField = getField(query, "related", "number");
- assertTrue(stepField != null);
- assertTrue(stepField.equals(fieldsByName.get("related.number")));
- assertTrue(stepField.getAlias() == null);
- // Not added twice.
- assertTrue(query.getFields().size() == 5);
- assertTrue(fieldsByName.size() == 5);
-
- instance.addFields(query, "people.firstname", stepsByAlias,
fieldsByName);
- stepField = getField(query, "people", "firstname");
- assertTrue(stepField != null);
- assertTrue(stepField.equals(fieldsByName.get("people.firstname")));
- assertTrue(stepField.getAlias() == null);
- assertTrue(query.getFields().size() == 6);
- assertTrue(fieldsByName.size() == 6);
-
- instance.addFields(query, "news1.title", stepsByAlias, fieldsByName);
- stepField = getField(query, "news1", "title");
- assertTrue(stepField != null);
- assertTrue(stepField.equals(fieldsByName.get("news1.title")));
- assertTrue(stepField.getAlias() == null);
- assertTrue(query.getFields().size() == 7);
- assertTrue(fieldsByName.size() == 7);
-
- try {
- // Invalid expression, should throw IllegalArgumentException.
- instance.addFields(query, "newsnumber", stepsByAlias,
fieldsByName);
- fail("Invalid expression, should throw IllegalArgumentException.");
- } catch (IllegalArgumentException e) {}
-
- try {
- // Invalid expression, should throw IllegalArgumentException.
- instance.addFields(query, ".newsnumber", stepsByAlias,
fieldsByName);
- fail("Invalid expression, should throw IllegalArgumentException.");
- } catch (IllegalArgumentException e) {}
-
- try {
- // Invalid expression, should throw IllegalArgumentException.
- instance.addFields(query, "newsnumber.", stepsByAlias,
fieldsByName);
- fail("Invalid expression, should throw IllegalArgumentException.");
- } catch (IllegalArgumentException e) {}
-
- try {
- // Unknown table alias, should throw IllegalArgumentException.
- instance.addFields(query, "xxx.number", stepsByAlias,
fieldsByName);
- fail("Unknown table alias, should throw
IllegalArgumentException.");
- } catch (IllegalArgumentException e) {}
-
- try {
- // Unknown field name, should throw IllegalArgumentException.
- instance.addFields(query, "news.xxx", stepsByAlias, fieldsByName);
- fail("Unknown table alias, should throw
IllegalArgumentException.");
- } catch (IllegalArgumentException e) {}
-
- instance.addFields(query, "f1(news.body,news1.body)", stepsByAlias,
fieldsByName);
- stepField = getField(query, "news", "body");
- assertTrue(stepField != null);
- assertTrue(stepField.equals(fieldsByName.get("news.body")));
- assertTrue(stepField.getAlias() == null);
- stepField = getField(query, "news1", "body");
- assertTrue(stepField != null);
- assertTrue(stepField.equals(fieldsByName.get("news1.body")));
- assertTrue(query.getFields().size() == 9);
- assertTrue(fieldsByName.size() == 9);
- }
-
- @Test
- public void isRelation() {
- assertTrue(instance.isRelation("insrel"));
- assertFalse(instance.isRelation("news"));
- }
-
-
-
- /** Test of addSteps() method, of class
org.mmbase.module.core.ClusterBuilder. */
- @Test
- public void addSteps() {
- // --- requires role "related" to be defined: ---
- BasicSearchQuery query = new BasicSearchQuery();
- Map<String,Integer> roles = new HashMap<String,Integer>();
- Map<String, BasicStepField> fieldsByName = new HashMap<String,
BasicStepField>();
- List<String> tables = Arrays.asList(new String[] {"news", "news1"});
- Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables,
roles, true, fieldsByName);
- // Test steps and returned map.
- assertTrue(stepsByAlias.size() == 3);
- List<Step> steps = query.getSteps();
- assertTrue(steps.size() == 3);
- Step step0 = steps.get(0);
- assertTrue(step0.getTableName().equals("news"));
- assertTrue(step0.getAlias().equals("news"));
- assertTrue(stepsByAlias.get("news") == step0);
- Step step1 = steps.get(1);
- assertTrue(step1.getTableName().equals("insrel"));
- assertTrue(step1.getAlias().startsWith("insrel"));
- assertTrue(stepsByAlias.get("insrel") == step1);
- Step step2 = steps.get(2);
- assertTrue(step2.getTableName().equals("news"));
- assertTrue(step2.getAlias().equals("news1"));
- assertTrue(stepsByAlias.get("news1") == step2);
- // Test (number)fields and fields map.
- assertTrue(fieldsByName.toString(), fieldsByName.size() == 2);
- List<StepField> fields = query.getFields();
- assertTrue(fields.size() == 2);
- StepField field0 = fields.get(0);
- assertTrue(field0.getStep() == step0);
- assertTrue(field0.getFieldName().equals("number"));
- assertTrue(fieldsByName.get("news.number") == field0);
- StepField field1 = fields.get(1);
- assertTrue(field1.getStep() == step2);
- assertTrue(field1.getFieldName().equals("number"));
- assertTrue(fieldsByName.get("news1.number") == field1);
- // Test roles.
- assertTrue("Roles is " + roles + " not{}", roles.size() == 0);
-
- query = new BasicSearchQuery();
- roles.clear();
- fieldsByName.clear();
- tables = Arrays.asList(new String[] {"news", "news1"});
- stepsByAlias = instance.addSteps(query, tables, roles, false,
fieldsByName);
- // Test steps and returned map.
- assertTrue(stepsByAlias.size() == 3);
- steps = query.getSteps();
- assertTrue(steps.size() == 3);
- step0 = steps.get(0);
- assertTrue(step0.getTableName().equals("news"));
- assertTrue(step0.getAlias().equals("news"));
- assertTrue(stepsByAlias.get("news") == step0);
- step1 = steps.get(1);
- assertTrue(step1.getTableName().equals("insrel"));
- assertTrue(step1.getAlias().startsWith("insrel"));
- assertTrue(stepsByAlias.get("insrel") == step1);
- step2 = steps.get(2);
- assertTrue(step2.getTableName().equals("news"));
- assertTrue(step2.getAlias().equals("news1"));
- assertTrue(stepsByAlias.get("news1") == step2);
- // Test (number)fields and fields map.
- assertTrue(fieldsByName.size() == 0);
- fields = query.getFields();
- assertTrue(fields.size() == 0);
- // Test roles.
- assertTrue(roles.size() == 0);
-
- query = new BasicSearchQuery();
- roles.clear();
- fieldsByName.clear();
- tables = Arrays.asList(new String[] {"news", "related", "news1"});
- stepsByAlias = instance.addSteps(query, tables, roles, true,
fieldsByName);
- // Test steps and returned map.
- assertEquals("" + stepsByAlias, 3, stepsByAlias.size());
- steps = query.getSteps();
- assertEquals(3, steps.size());
- step0 = steps.get(0);
- assertTrue(step0.getTableName().equals("news"));
- assertTrue(step0.getAlias().equals("news"));
- assertTrue(stepsByAlias.get("news") == step0);
- step1 = steps.get(1);
- assertTrue(step1.getTableName().equals("insrel"));
- assertTrue(step1.getAlias().equals("related"));
- assertTrue(stepsByAlias.get("related") == step1);
- step2 = steps.get(2);
- assertTrue(step2.getTableName().equals("news"));
- assertTrue(step2.getAlias().equals("news1"));
- assertTrue(stepsByAlias.get("news1") == step2);
-
- // Test (number)fields and fields map.
- assertTrue(fieldsByName.size() == 3);
- fields = query.getFields();
- assertTrue(fields.size() == 3);
- field0 = fields.get(0);
- assertTrue(field0.getStep() == step0);
- assertTrue(field0.getFieldName().equals("number"));
- assertTrue(fieldsByName.get("news.number") == field0);
- field1 = fields.get(1);
- assertTrue(field1.getStep() == step1);
- assertTrue(field1.getFieldName().equals("number"));
- assertTrue(fieldsByName.get("related.number") == field1);
- StepField field2 = fields.get(2);
- assertTrue(field2.getStep() == step2);
- assertTrue(field2.getFieldName().equals("number"));
- assertTrue(fieldsByName.get("news1.number") == field2);
- // Test roles.
- assertTrue("Roles is " + roles + " wich has not size 1", roles.size()
== 1);
- Integer number = roles.get("related");
- assertTrue("" + number.intValue() + " != " + RELATED,
number.intValue() == RELATED);
-
- query = new BasicSearchQuery();
- roles.clear();
- fieldsByName.clear();
- tables = Arrays.asList(new String[] {"news", "related", "news1",
"related", "news"});
- stepsByAlias = instance.addSteps(query, tables, roles, true,
fieldsByName);
- // Test steps and returned map.
- assertTrue(stepsByAlias.size() == 5);
- steps = query.getSteps();
- assertTrue(steps.size() == 5);
- step0 = steps.get(0);
- assertTrue(step0.getTableName().equals("news"));
- assertTrue(step0.getAlias().equals("news"));
- assertTrue(stepsByAlias.get("news") == step0);
- step1 = steps.get(1);
- assertTrue(step1.getTableName().equals("insrel"));
- assertTrue(step1.getAlias().equals("related"));
- assertTrue(stepsByAlias.get("related") == step1);
- step2 = steps.get(2);
- assertTrue(step2.getTableName().equals("news"));
- assertTrue(step2.getAlias().equals("news1"));
- assertTrue(stepsByAlias.get("news1") == step2);
- Step step3 = steps.get(3);
- assertTrue(step3.getTableName().equals("insrel"));
- assertTrue(step3.getAlias().equals("related0"));
- assertTrue(stepsByAlias.get("related0") == step3);
- Step step4 = steps.get(4);
- assertTrue(step4.getTableName().equals("news"));
- assertTrue(step4.getAlias().equals("news0"));
- assertTrue(stepsByAlias.get("news0") == step4);
- // Test (number)fields and field map.
- assertTrue(fieldsByName.size() == 3);
- fields = query.getFields();
- assertTrue(fields.toString(), fields.size() == 3);
- for (int i = 0; i < 3; i++) {
- StepField field = fields.get(i);
- assertTrue(field.getStep() == steps.get(i));
- assertTrue(field.getFieldName().equals("number"));
- assertTrue(fieldsByName.get(tables.get(i) + ".number") == field);
- }
- // Test roles.
- assertTrue("Roles is " + roles + " which is not size 2. There are to
roles, so related and related0 must be availab.e", roles.size() == 2);
- number = roles.get("related");
- assertTrue(number.intValue() == RELATED);
- }
-
- /**
- * Gets field in query.
- *
- * @param query The query.
- * @param stepAlias The alias of the step.
- * @param fieldName The name of the field.
- * @return The field if the field is present in the query, null otherwise.
- */
- private StepField getField(
- SearchQuery query, String stepAlias, String fieldName) {
- StepField result = null;
- Iterator<StepField> iFields = query.getFields().iterator();
- while (iFields.hasNext()) {
- StepField field = iFields.next();
- if (field.getStep().getAlias().equals(stepAlias)
- && field.getFieldName().equals(fieldName)) {
- // Found.
- result = field;
- break;
- }
- }
- return result;
- }
-
-}
Copied:
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
(from rev 41856,
mmbase/trunk/core/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java)
===================================================================
---
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
(rev 0)
+++
mmbase/trunk/bridge/src/test/java/org/mmbase/storage/search/ClusterQueriesTest.java
2010-04-13 10:44:41 UTC (rev 41872)
@@ -0,0 +1,398 @@
+package org.mmbase.storage.search;
+
+import java.util.*;
+import org.junit.*;
+import static org.junit.Assert.*;
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.mock.*;
+import org.mmbase.bridge.util.Queries;
+import org.mmbase.storage.search.implementation.*;
+
+
+public class ClusterQueriesTest {
+
+ private final String NEWS = "news";
+ private static int RELATED;
+
+ @BeforeClass
+ public static void setup() throws java.io.IOException {
+ MockCloudContext.getInstance().addCore();
+ MockCloudContext.getInstance().addCoreModel();
+
MockCloudContext.getInstance().addNodeManagers(MockBuilderReader.getBuilderLoader().getChildResourceLoader("mynews"));
+ RELATED =
MockCloudContext.getInstance().getCloud("mmbase").getRelationManager("related").getNumber();
+ }
+
+ ClusterQueries instance = new BridgeClusterQueries(new
QueryContext.Bridge(MockCloudContext.getInstance().getCloud("mmbase")));
+
+ @Test
+ public void getUniqueTableAlias() {
+ List<String> originalAliases = Arrays.asList(new String[] {"test1",
"test2"});
+ Set<String> tableAliases = new HashSet<String>();
+ String alias = instance.getUniqueTableAlias("test", tableAliases,
originalAliases);
+ assertTrue(alias.equals("test"));
+ assertTrue(tableAliases.size() == 1);
+ assertTrue(tableAliases.contains("test"));
+ assertTrue(originalAliases.size() == 2);
+
+ alias = instance.getUniqueTableAlias("test", tableAliases,
originalAliases);
+ assertTrue(alias.equals("test0"));
+ assertTrue(tableAliases.size() == 2);
+ assertTrue(tableAliases.contains("test0"));
+ assertTrue(originalAliases.size() == 2);
+
+ alias = instance.getUniqueTableAlias(
+ "test1", tableAliases, originalAliases);
+ assertTrue(alias.equals("test1"));
+ assertTrue(tableAliases.size() == 3);
+ assertTrue(tableAliases.contains("test1"));
+ assertTrue(originalAliases.size() == 2);
+
+ alias = instance.getUniqueTableAlias(
+ "test", tableAliases, originalAliases);
+ assertTrue(alias.equals("test3"));
+ assertTrue(tableAliases.size() == 4);
+ assertTrue(tableAliases.contains("test1"));
+ assertTrue(originalAliases.size() == 2);
+
+ for (int i = 4; i < 10; i++) {
+ alias = instance.getUniqueTableAlias(
+ "test" + (i - 1), tableAliases, originalAliases);
+ assertTrue(alias, alias.equals("test" + i));
+ assertTrue(tableAliases.size() == i + 1);
+ assertTrue(tableAliases.contains("test" + i));
+ assertTrue(originalAliases.size() == 2);
+ }
+
+ try {
+ // Can't generate another unique value for this string,
+ // should throw IndexOutOfBoundsException.
+ instance.getUniqueTableAlias("test", tableAliases,
originalAliases);
+ fail("Can't generate another unique value for this string, "
+ + "should throw IndexOutOfBoundsException.");
+ } catch (IndexOutOfBoundsException e) {}
+
+ assertTrue(tableAliases.size() == 10);
+ for (int i = 0; i < 10; i++) {
+ if (i == 2) {
+ assertTrue(!tableAliases.contains("test" + i));
+ } else {
+ assertTrue(tableAliases.contains("test" + i));
+ }
+ }
+ assertTrue(tableAliases.contains("test"));
+
+ // Alias containing white space.
+ alias = instance.getUniqueTableAlias(
+ "white space", tableAliases, originalAliases);
+ assertTrue(alias, alias.equals("white space"));
+ assertTrue(tableAliases.contains("white space"));
+ }
+
+ @Test
+ public void getBuilder() {
+ Map<String,Integer> nodes = new HashMap<String,Integer>();
+
assertTrue(MockCloudContext.getInstance().getCloud("mmbase").hasNodeManager(NEWS));
+
+ assertEquals(NEWS, instance.getBuilder("news", nodes));
+ assertTrue(nodes.size() == 0);
+
+ assertTrue(instance.getBuilder("news0", nodes).equals(NEWS));
+ assertTrue(nodes.size() == 0);
+
+ assertTrue(instance.getBuilder("news1", nodes).equals(NEWS));
+ assertTrue(nodes.size() == 0);
+
+ assertEquals("insrel", instance.getBuilder("related", nodes));
+ assertTrue("Nodes is " + nodes + " should be size 1", nodes.size() ==
1);
+ assertEquals(Integer.valueOf(RELATED), nodes.get("related"));
+
+ assertEquals("insrel", instance.getBuilder("related0", nodes));
+
+ assertEquals(2, nodes.size());
+ assertEquals(Integer.valueOf(RELATED), nodes.get("related0"));
+
+ try {
+ // Unknown builder or role, should throw IllegalArgumentException.
+ instance.getBuilder("xxxx", nodes);
+ fail("Unknown builder or role, "
+ + "should throw IllegalArgumentException.");
+ } catch (IllegalArgumentException e) {}
+ }
+
+
+ @Test
+ public void addFields() {
+ BasicSearchQuery query = new BasicSearchQuery();
+ Map<String,Integer> roles = new HashMap<String,Integer>();
+ Map<String, BasicStepField> fieldsByName = new HashMap<String,
BasicStepField>();
+ List<String> tables = Arrays.asList(
+ new String[] {"news", "related", "people", "news1"});
+ Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables,
roles, true, fieldsByName);
+ assertTrue(query.getFields().size() == 4);
+ assertTrue(fieldsByName.size() == 4);
+
+ instance.addFields(query, "news.title", stepsByAlias, fieldsByName);
+
+ StepField stepField = getField(query, "news", "title");
+ assertTrue(stepField != null);
+ assertTrue(stepField.equals(fieldsByName.get("news.title")));
+ assertTrue(stepField.getAlias() == null);
+ assertTrue(query.getFields().size() == 5);
+ assertTrue(fieldsByName.size() == 5);
+
+ instance.addFields(query, "related.number", stepsByAlias,
fieldsByName);
+ stepField = getField(query, "related", "number");
+ assertTrue(stepField != null);
+ assertTrue(stepField.equals(fieldsByName.get("related.number")));
+ assertTrue(stepField.getAlias() == null);
+ // Not added twice.
+ assertTrue(query.getFields().size() == 5);
+ assertTrue(fieldsByName.size() == 5);
+
+ instance.addFields(query, "people.firstname", stepsByAlias,
fieldsByName);
+ stepField = getField(query, "people", "firstname");
+ assertTrue(stepField != null);
+ assertTrue(stepField.equals(fieldsByName.get("people.firstname")));
+ assertTrue(stepField.getAlias() == null);
+ assertTrue(query.getFields().size() == 6);
+ assertTrue(fieldsByName.size() == 6);
+
+ instance.addFields(query, "news1.title", stepsByAlias, fieldsByName);
+ stepField = getField(query, "news1", "title");
+ assertTrue(stepField != null);
+ assertTrue(stepField.equals(fieldsByName.get("news1.title")));
+ assertTrue(stepField.getAlias() == null);
+ assertTrue(query.getFields().size() == 7);
+ assertTrue(fieldsByName.size() == 7);
+
+ try {
+ // Invalid expression, should throw IllegalArgumentException.
+ instance.addFields(query, "newsnumber", stepsByAlias,
fieldsByName);
+ fail("Invalid expression, should throw IllegalArgumentException.");
+ } catch (IllegalArgumentException e) {}
+
+ try {
+ // Invalid expression, should throw IllegalArgumentException.
+ instance.addFields(query, ".newsnumber", stepsByAlias,
fieldsByName);
+ fail("Invalid expression, should throw IllegalArgumentException.");
+ } catch (IllegalArgumentException e) {}
+
+ try {
+ // Invalid expression, should throw IllegalArgumentException.
+ instance.addFields(query, "newsnumber.", stepsByAlias,
fieldsByName);
+ fail("Invalid expression, should throw IllegalArgumentException.");
+ } catch (IllegalArgumentException e) {}
+
+ try {
+ // Unknown table alias, should throw IllegalArgumentException.
+ instance.addFields(query, "xxx.number", stepsByAlias,
fieldsByName);
+ fail("Unknown table alias, should throw
IllegalArgumentException.");
+ } catch (IllegalArgumentException e) {}
+
+ try {
+ // Unknown field name, should throw IllegalArgumentException.
+ instance.addFields(query, "news.xxx", stepsByAlias, fieldsByName);
+ fail("Unknown table alias, should throw
IllegalArgumentException.");
+ } catch (IllegalArgumentException e) {}
+
+ instance.addFields(query, "f1(news.body,news1.body)", stepsByAlias,
fieldsByName);
+ stepField = getField(query, "news", "body");
+ assertTrue(stepField != null);
+ assertTrue(stepField.equals(fieldsByName.get("news.body")));
+ assertTrue(stepField.getAlias() == null);
+ stepField = getField(query, "news1", "body");
+ assertTrue(stepField != null);
+ assertTrue(stepField.equals(fieldsByName.get("news1.body")));
+ assertTrue(query.getFields().size() == 9);
+ assertTrue(fieldsByName.size() == 9);
+ }
+
+ @Test
+ public void isRelation() {
+ assertTrue(instance.isRelation("insrel"));
+ assertFalse(instance.isRelation("news"));
+ }
+
+
+
+ /** Test of addSteps() method, of class
org.mmbase.module.core.ClusterBuilder. */
+ @Test
+ public void addSteps() {
+ // --- requires role "related" to be defined: ---
+ BasicSearchQuery query = new BasicSearchQuery();
+ Map<String,Integer> roles = new HashMap<String,Integer>();
+ Map<String, BasicStepField> fieldsByName = new HashMap<String,
BasicStepField>();
+ List<String> tables = Arrays.asList(new String[] {"news", "news1"});
+ Map<String, BasicStep> stepsByAlias = instance.addSteps(query, tables,
roles, true, fieldsByName);
+ // Test steps and returned map.
+ assertTrue(stepsByAlias.size() == 3);
+ List<Step> steps = query.getSteps();
+ assertTrue(steps.size() == 3);
+ Step step0 = steps.get(0);
+ assertTrue(step0.getTableName().equals("news"));
+ assertTrue(step0.getAlias().equals("news"));
+ assertTrue(stepsByAlias.get("news") == step0);
+ Step step1 = steps.get(1);
+ assertTrue(step1.getTableName().equals("insrel"));
+ assertTrue(step1.getAlias().startsWith("insrel"));
+ assertTrue(stepsByAlias.get("insrel") == step1);
+ Step step2 = steps.get(2);
+ assertTrue(step2.getTableName().equals("news"));
+ assertTrue(step2.getAlias().equals("news1"));
+ assertTrue(stepsByAlias.get("news1") == step2);
+ // Test (number)fields and fields map.
+ assertTrue(fieldsByName.toString(), fieldsByName.size() == 2);
+ List<StepField> fields = query.getFields();
+ assertTrue(fields.size() == 2);
+ StepField field0 = fields.get(0);
+ assertTrue(field0.getStep() == step0);
+ assertTrue(field0.getFieldName().equals("number"));
+ assertTrue(fieldsByName.get("news.number") == field0);
+ StepField field1 = fields.get(1);
+ assertTrue(field1.getStep() == step2);
+ assertTrue(field1.getFieldName().equals("number"));
+ assertTrue(fieldsByName.get("news1.number") == field1);
+ // Test roles.
+ assertTrue("Roles is " + roles + " not{}", roles.size() == 0);
+
+ query = new BasicSearchQuery();
+ roles.clear();
+ fieldsByName.clear();
+ tables = Arrays.asList(new String[] {"news", "news1"});
+ stepsByAlias = instance.addSteps(query, tables, roles, false,
fieldsByName);
+ // Test steps and returned map.
+ assertTrue(stepsByAlias.size() == 3);
+ steps = query.getSteps();
+ assertTrue(steps.size() == 3);
+ step0 = steps.get(0);
+ assertTrue(step0.getTableName().equals("news"));
+ assertTrue(step0.getAlias().equals("news"));
+ assertTrue(stepsByAlias.get("news") == step0);
+ step1 = steps.get(1);
+ assertTrue(step1.getTableName().equals("insrel"));
+ assertTrue(step1.getAlias().startsWith("insrel"));
+ assertTrue(stepsByAlias.get("insrel") == step1);
+ step2 = steps.get(2);
+ assertTrue(step2.getTableName().equals("news"));
+ assertTrue(step2.getAlias().equals("news1"));
+ assertTrue(stepsByAlias.get("news1") == step2);
+ // Test (number)fields and fields map.
+ assertTrue(fieldsByName.size() == 0);
+ fields = query.getFields();
+ assertTrue(fields.size() == 0);
+ // Test roles.
+ assertTrue(roles.size() == 0);
+
+ query = new BasicSearchQuery();
+ roles.clear();
+ fieldsByName.clear();
+ tables = Arrays.asList(new String[] {"news", "related", "news1"});
+ stepsByAlias = instance.addSteps(query, tables, roles, true,
fieldsByName);
+ // Test steps and returned map.
+ assertEquals("" + stepsByAlias, 3, stepsByAlias.size());
+ steps = query.getSteps();
+ assertEquals(3, steps.size());
+ step0 = steps.get(0);
+ assertTrue(step0.getTableName().equals("news"));
+ assertTrue(step0.getAlias().equals("news"));
+ assertTrue(stepsByAlias.get("news") == step0);
+ step1 = steps.get(1);
+ assertTrue(step1.getTableName().equals("insrel"));
+ assertTrue(step1.getAlias().equals("related"));
+ assertTrue(stepsByAlias.get("related") == step1);
+ step2 = steps.get(2);
+ assertTrue(step2.getTableName().equals("news"));
+ assertTrue(step2.getAlias().equals("news1"));
+ assertTrue(stepsByAlias.get("news1") == step2);
+
+ // Test (number)fields and fields map.
+ assertTrue(fieldsByName.size() == 3);
+ fields = query.getFields();
+ assertTrue(fields.size() == 3);
+ field0 = fields.get(0);
+ assertTrue(field0.getStep() == step0);
+ assertTrue(field0.getFieldName().equals("number"));
+ assertTrue(fieldsByName.get("news.number") == field0);
+ field1 = fields.get(1);
+ assertTrue(field1.getStep() == step1);
+ assertTrue(field1.getFieldName().equals("number"));
+ assertTrue(fieldsByName.get("related.number") == field1);
+ StepField field2 = fields.get(2);
+ assertTrue(field2.getStep() == step2);
+ assertTrue(field2.getFieldName().equals("number"));
+ assertTrue(fieldsByName.get("news1.number") == field2);
+ // Test roles.
+ assertTrue("Roles is " + roles + " wich has not size 1", roles.size()
== 1);
+ Integer number = roles.get("related");
+ assertTrue("" + number.intValue() + " != " + RELATED,
number.intValue() == RELATED);
+
+ query = new BasicSearchQuery();
+ roles.clear();
+ fieldsByName.clear();
+ tables = Arrays.asList(new String[] {"news", "related", "news1",
"related", "news"});
+ stepsByAlias = instance.addSteps(query, tables, roles, true,
fieldsByName);
+ // Test steps and returned map.
+ assertTrue(stepsByAlias.size() == 5);
+ steps = query.getSteps();
+ assertTrue(steps.size() == 5);
+ step0 = steps.get(0);
+ assertTrue(step0.getTableName().equals("news"));
+ assertTrue(step0.getAlias().equals("news"));
+ assertTrue(stepsByAlias.get("news") == step0);
+ step1 = steps.get(1);
+ assertTrue(step1.getTableName().equals("insrel"));
+ assertTrue(step1.getAlias().equals("related"));
+ assertTrue(stepsByAlias.get("related") == step1);
+ step2 = steps.get(2);
+ assertTrue(step2.getTableName().equals("news"));
+ assertTrue(step2.getAlias().equals("news1"));
+ assertTrue(stepsByAlias.get("news1") == step2);
+ Step step3 = steps.get(3);
+ assertTrue(step3.getTableName().equals("insrel"));
+ assertTrue(step3.getAlias().equals("related0"));
+ assertTrue(stepsByAlias.get("related0") == step3);
+ Step step4 = steps.get(4);
+ assertTrue(step4.getTableName().equals("news"));
+ assertTrue(step4.getAlias().equals("news0"));
+ assertTrue(stepsByAlias.get("news0") == step4);
+ // Test (number)fields and field map.
+ assertTrue(fieldsByName.size() == 3);
+ fields = query.getFields();
+ assertTrue(fields.toString(), fields.size() == 3);
+ for (int i = 0; i < 3; i++) {
+ StepField field = fields.get(i);
+ assertTrue(field.getStep() == steps.get(i));
+ assertTrue(field.getFieldName().equals("number"));
+ assertTrue(fieldsByName.get(tables.get(i) + ".number") == field);
+ }
+ // Test roles.
+ assertTrue("Roles is " + roles + " which is not size 2. There are to
roles, so related and related0 must be availab.e", roles.size() == 2);
+ number = roles.get("related");
+ assertTrue(number.intValue() == RELATED);
+ }
+
+ /**
+ * Gets field in query.
+ *
+ * @param query The query.
+ * @param stepAlias The alias of the step.
+ * @param fieldName The name of the field.
+ * @return The field if the field is present in the query, null otherwise.
+ */
+ private StepField getField(
+ SearchQuery query, String stepAlias, String fieldName) {
+ StepField result = null;
+ Iterator<StepField> iFields = query.getFields().iterator();
+ while (iFields.hasNext()) {
+ StepField field = iFields.next();
+ if (field.getStep().getAlias().equals(stepAlias)
+ && field.getFieldName().equals(fieldName)) {
+ // Found.
+ result = field;
+ break;
+ }
+ }
+ return result;
+ }
+
+}
Modified:
mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java
===================================================================
--- mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java
2010-04-13 10:31:27 UTC (rev 41871)
+++ mmbase/trunk/bridge/src/test/java/org/mmbase/util/ResourceLoaderTest.java
2010-04-13 10:44:41 UTC (rev 41872)
@@ -29,18 +29,7 @@
public class ResourceLoaderTest {
-
- /**
- * perform lookup of mmbaseroot.xml using getConfigurationroot
- */
@Test
- public void getMMBaseRootModule() throws java.io.IOException {
- URL url =
ResourceLoader.getConfigurationRoot().getResource("modules/mmbaseroot.xml");
- assertNotNull("did not find mmbaseroot.xml", url);
- assertTrue("existing resource should be openable for input",
url.openConnection().getDoInput());
- }
-
- @Test
public void getPropertiesBuilder() throws java.io.IOException {
URL url =
ResourceLoader.getConfigurationRoot().getResource("builders/properties.xml");
assertNotNull("did not find properties.xml", url);
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs