Skip to content

Commit

Permalink
MONDRIAN: Test cases for user-defined roles in parent-child hierarchies.
Browse files Browse the repository at this point in the history
[git-p4: depot-paths = "//open/mondrian-release/3.2/": change = 13739]
  • Loading branch information
julianhyde committed Jul 7, 2010
1 parent 8ff467d commit db47297
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 0 deletions.
96 changes: 96 additions & 0 deletions testsrc/main/mondrian/test/AccessControlTest.java
Expand Up @@ -1282,6 +1282,60 @@ public void testPartialRollupParentChildHierarchy() {
checkQuery(testContext, mdx2);
}

public void testParentChildUserDefinedRole()
{
TestContext testContext = getTestContext().withCube("HR");

final Connection connection = testContext.getConnection();
final Role savedRole = connection.getRole();
try {
// Run queries as top-level employee.
connection.setRole(
new PeopleRole(
savedRole, connection.getSchema(), "Sheri Nowmer"));
testContext.assertExprReturns(
"[Employees].Members.Count",
"1,156");

// Level 2 employee
connection.setRole(
new PeopleRole(
savedRole, connection.getSchema(), "Derrick Whelply"));
testContext.assertExprReturns(
"[Employees].Members.Count",
"605");
testContext.assertAxisReturns(
"Head([Employees].Members, 4),"
+ "Tail([Employees].Members, 2)",
"[Employees].[All Employees]\n"
+ "[Employees].[Sheri Nowmer]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Beverly Baker]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Laurie Borges].[Ed Young].[Gregory Whiting].[Merrill Steel]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Laurie Borges].[Ed Young].[Gregory Whiting].[Melissa Marple]");

// Leaf employee
connection.setRole(
new PeopleRole(
savedRole, connection.getSchema(), "Ann Weyerhaeuser"));
testContext.assertExprReturns(
"[Employees].Members.Count",
"7");
testContext.assertAxisReturns(
"[Employees].Members",
"[Employees].[All Employees]\n"
+ "[Employees].[Sheri Nowmer]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Laurie Borges]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Laurie Borges].[Cody Goldey]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Laurie Borges].[Cody Goldey].[Shanay Steelman]\n"
+ "[Employees].[Sheri Nowmer].[Derrick Whelply].[Laurie Borges].[Cody Goldey].[Shanay Steelman].[Ann Weyerhaeuser]");

} finally {
connection.setRole(savedRole);
}
}

/**
* Test case for
* <a href="http://jira.pentaho.com/browse/BISERVER-1574">BISERVER-1574,
Expand Down Expand Up @@ -1957,6 +2011,48 @@ private void checkCalcMemberLevel(TestContext testContext) {
assertEquals("Foo", member2.getName());
assertEquals("Store City", member2.getLevel().getName());
}

// ~ Inner classes =========================================================

public static class PeopleRole extends DelegatingRole {
private final String repName;

public PeopleRole(Role role, Schema schema, String repName) {
super(((RoleImpl)role).makeMutableClone());
this.repName = repName;
defineGrantsForUser(schema);
}

private void defineGrantsForUser(Schema schema) {
RoleImpl role = (RoleImpl)this.role;
role.grant(schema, Access.NONE);

Cube cube = schema.lookupCube("HR", true);
role.grant(cube, Access.ALL);

Hierarchy hierarchy = cube.lookupHierarchy(
new Id.Segment("Employees", Id.Quoting.QUOTED), false);

Level[] levels = hierarchy.getLevels();
Level topLevel = levels[1];

role.grant(hierarchy, Access.CUSTOM, null, null, RollupPolicy.FULL);
role.grant(hierarchy.getAllMember(), Access.NONE);

boolean foundMember = false;

List <Member> members =
schema.getSchemaReader().getLevelMembers(topLevel, true);

for (Member member : members) {
if (member.getUniqueName().contains("[" + repName + "]")){
foundMember = true;
role.grant(member, Access.ALL);
}
}
assertTrue(foundMember);
}
}
}

// End AccessControlTest.java
36 changes: 36 additions & 0 deletions testsrc/main/mondrian/test/ParentChildHierarchyTest.java
Expand Up @@ -15,6 +15,8 @@
import mondrian.olap.*;
import mondrian.util.Bug;

import java.util.List;

/**
* <code>ParentChildHierarchyTest</code> tests parent-child hierarchies.
*
Expand Down Expand Up @@ -1222,6 +1224,40 @@ public void testClosureVsNoClosure() {
testClosureContext.assertQueryReturns(mdx, expected);
testNoClosureContext.assertQueryReturns(mdx, expected);
}

public void testSchemaReaderLevelMembers()
{
final SchemaReader schemaReader =
TestContext.instance().getConnection().getSchemaReader();
int found = 0;
for (Cube cube : schemaReader.getCubes()) {
if (!cube.getName().equals("HR")) {
continue;
}
for (Dimension dimension : schemaReader.getCubeDimensions(cube)) {
for (Hierarchy hierarchy
: schemaReader.getDimensionHierarchies(dimension))
{
if (!hierarchy.getName().equals("Employees")) {
continue;
}
++found;
final Level level = hierarchy.getLevels()[1];
assertEquals("Employee Id", level.getName());
final List<Member> memberList =
schemaReader.getLevelMembers(level, true);
assertEquals(1155, memberList.size());
assertEquals(
"[Employees].[Sheri Nowmer]",
memberList.get(0).getUniqueName());
assertEquals(
"[Employees].[Sheri Nowmer].[Derrick Whelply]",
memberList.get(1).getUniqueName());
}
}
}
assertEquals(1, found);
}
}

// End ParentChildHierarchyTest.java

0 comments on commit db47297

Please sign in to comment.