package org.archive.accesscontrol.model;
import java.util.List;
import org.archive.accesscontrol.model.HibernateRuleDao;
import org.archive.accesscontrol.model.Rule;
import org.archive.accesscontrol.model.RuleChange;
import junit.framework.Assert;
public class HibernateRuleDaoTest extends DaoTestCase {
private Rule rule = null;
private HibernateRuleDao dao = null;
protected void setUp() throws Exception {
super.setUp();
dao = (HibernateRuleDao) ctx.getBean("ruleDao");
// clear database of rules
for (Rule rule: dao.getAllRules()) {
try {
dao.deleteRule(rule.getId());
} catch (Exception e) {}
}
}
protected void tearDown() throws Exception {
super.tearDown();
dao = null;
}
public void testSaveRecord() throws Exception {
rule = new Rule();
rule.setSurt("org,archive");
rule.setWho("admins");
dao.saveRule(rule);
Assert.assertNotNull("primary key assigned", rule.getId());
}
public void testChange() throws Exception {
RuleChange change = new RuleChange();
change.setSurt("org,archive");
change.setWho("admins");
dao.saveChange(change);
Assert.assertNotNull("primary key assigned", change.getId());
}
public void testSurtPrefixQuery() throws Exception {
rule = new Rule();
rule.setSurt("http://(org,archive,unique)/%%__/fish");
dao.saveRule(rule);
Rule rule2 = new Rule();
rule2.setSurt("http://(org,archive,unique)/blasted/fish");
dao.saveRule(rule2);
List<Rule> rules = dao.getRulesWithSurtPrefix("http://(org,archive,unique)/%%__");
Boolean foundRule1 = false;
Boolean foundRule2 = false;
for (Rule r: rules) {
if (rule.getId().equals(r.getId())) {
foundRule1 = true;
}
if (rule2.getId().equals(r.getId())) {
foundRule2 = true;
}
}
Assert.assertTrue("Should match rule 1", foundRule1);
Assert.assertFalse("Should not match rule 2", foundRule2);
}
public void testExactSurtQuery() throws Exception {
rule = new Rule();
rule.setSurt("http://(org,archive,unique)/%%__/fish");
dao.saveRule(rule);
Rule rule2 = new Rule();
rule2.setSurt("http://(org,archive,unique)/blasted/fish");
dao.saveRule(rule2);
List<Rule> rules = dao.getRulesWithExactSurt("http://(org,archive,unique)/%%__/fish");
Boolean foundRule1 = false;
Boolean foundRule2 = false;
for (Rule r: rules) {
if (rule.getId().equals(r.getId())) {
foundRule1 = true;
}
if (rule2.getId().equals(r.getId())) {
foundRule2 = true;
}
}
Assert.assertTrue("Should match rule 1", foundRule1);
Assert.assertFalse("Should not match rule 2", foundRule2);
}
public void testSurtTreeQuery() throws Exception {
rule = new Rule();
rule.setSurt("(org,archive,unique,)/secret");
dao.saveRule(rule);
Rule rule1 = new Rule();
rule1.setSurt("(org,archive,unique,)/");
dao.saveRule(rule1);
Rule rule2 = new Rule();
rule2.setSurt("(org,archive,unique");
dao.saveRule(rule2);
Rule rule3 = new Rule();
rule3.setSurt("(org,archive");
dao.saveRule(rule3);
Rule rule4 = new Rule();
rule4.setSurt("(");
dao.saveRule(rule4);
Rule rule5 = new Rule();
rule5.setSurt("(org,archive,unique,)/other");
dao.saveRule(rule5);
Rule rule6 = new Rule();
rule6.setSurt("(org,error,)/foobar");
dao.saveRule(rule6);
Iterable<Rule> rules = dao.getRuleTree("http://(org,archive,unique,)/");
for (Rule r: rules) {
assertTrue(r.getId().equals(rule.getId())
|| r.getId().equals(rule1.getId())
|| r.getId().equals(rule2.getId())
|| r.getId().equals(rule3.getId())
|| r.getId().equals(rule4.getId())
|| r.getId().equals(rule5.getId()));
}
}
}