Search in sources :

Example 6 with DBBroker

use of org.exist.storage.DBBroker in project exist by eXist-db.

the class SecurityManagerTest method deleteAccount.

@Test
public void deleteAccount() throws EXistException, PermissionDeniedException, XPathException, LockException {
    final BrokerPool brokerPool = existEmbeddedServer.getBrokerPool();
    final SecurityManager securityManager = brokerPool.getSecurityManager();
    try (final DBBroker broker = brokerPool.get(Optional.of(securityManager.getSystemSubject()))) {
        // 1. pre-check - assert the account exists
        assertTrue(securityManager.hasAccount(TEST_USER_NAME));
        // 2. pre-check - assert the XML document for the account and group exists
        try (final LockedDocument document = broker.getXMLResource(ACCOUNTS_URI.append(TEST_USER_NAME + ".xml"), Lock.LockMode.READ_LOCK)) {
            assertNotNull(document);
        }
        try (final LockedDocument document = broker.getXMLResource(GROUPS_URI.append(TEST_GROUP_NAME + ".xml"), Lock.LockMode.READ_LOCK)) {
            assertNotNull(document);
        }
        // 3. pre-check - check that both the accounts collection and groups collection have sub-collections for removed accounts and groups
        try (final Collection collection = broker.openCollection(ACCOUNTS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(1, collection.getChildCollectionCount(broker));
            assertTrue(collection.hasChildCollection(broker, XmldbURI.create(REMOVED_COLLECTION_NAME)));
        }
        try (final Collection collection = broker.openCollection(GROUPS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(1, collection.getChildCollectionCount(broker));
            assertTrue(collection.hasChildCollection(broker, XmldbURI.create(REMOVED_COLLECTION_NAME)));
        }
        // 4. pre-check - assert that the removed Collections do exist for accounts and groups, but is empty
        try (final Collection collection = broker.openCollection(REMOVED_ACCOUNTS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(0, collection.getChildCollectionCount(broker));
            assertEquals(0, collection.getDocumentCount(broker));
        }
        try (final Collection collection = broker.openCollection(REMOVED_GROUPS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(0, collection.getChildCollectionCount(broker));
            assertEquals(0, collection.getDocumentCount(broker));
        }
        // 5. pre-check - assert the XML document for any removed account or group does NOT exist
        assertFalse(removedAccountExists(broker, TEST_USER_NAME));
        assertFalse(removedGroupExists(broker, TEST_GROUP_NAME));
        // 6. DELETE THE ACCOUNT
        securityManager.deleteAccount(TEST_USER_NAME);
        // 7. post-check - assert the account does NOT exist
        assertFalse(securityManager.hasAccount(TEST_USER_NAME));
        // 8. post-check - assert the XML document for the account does NOT exist, but that the group still exists
        try (final LockedDocument document = broker.getXMLResource(ACCOUNTS_URI.append(TEST_USER_NAME + ".xml"), Lock.LockMode.READ_LOCK)) {
            assertNull(document);
        }
        try (final LockedDocument document = broker.getXMLResource(GROUPS_URI.append(TEST_GROUP_NAME + ".xml"), Lock.LockMode.READ_LOCK)) {
            assertNotNull(document);
        }
        // 9. post-check - check that both the accounts collection and groups collection still have sub-collections for removed accounts and groups
        try (final Collection collection = broker.openCollection(ACCOUNTS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(1, collection.getChildCollectionCount(broker));
            assertTrue(collection.hasChildCollection(broker, XmldbURI.create(REMOVED_COLLECTION_NAME)));
        }
        try (final Collection collection = broker.openCollection(GROUPS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(1, collection.getChildCollectionCount(broker));
            assertTrue(collection.hasChildCollection(broker, XmldbURI.create(REMOVED_COLLECTION_NAME)));
        }
        // 10. post-check - assert that the removed Collections do exist for accounts and groups, but contain only 1 document (i.e. for the removed account)
        try (final Collection collection = broker.openCollection(REMOVED_ACCOUNTS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(0, collection.getChildCollectionCount(broker));
            assertEquals(1, collection.getDocumentCount(broker));
        }
        try (final Collection collection = broker.openCollection(REMOVED_GROUPS_URI, Lock.LockMode.READ_LOCK)) {
            assertNotNull(collection);
            assertEquals(0, collection.getChildCollectionCount(broker));
            assertEquals(0, collection.getDocumentCount(broker));
        }
        // 11. post-check - assert the XML document for the removed account does exist, but no such document exists for the group
        assertTrue(removedAccountExists(broker, TEST_USER_NAME));
        assertFalse(removedGroupExists(broker, TEST_GROUP_NAME));
    }
}
Also used : DBBroker(org.exist.storage.DBBroker) LockedDocument(org.exist.dom.persistent.LockedDocument) Collection(org.exist.collections.Collection) BrokerPool(org.exist.storage.BrokerPool) Test(org.junit.Test)

Example 7 with DBBroker

use of org.exist.storage.DBBroker in project exist by eXist-db.

the class XqueryApiTest method executeQuery.

private Sequence executeQuery(final String uid, final String pwd, final String query) throws ApiException {
    try {
        final BrokerPool pool = server.getBrokerPool();
        final XQuery xquery = pool.getXQueryService();
        final Subject user = pool.getSecurityManager().authenticate(uid, pwd);
        try (final DBBroker broker = pool.get(Optional.of(user))) {
            return xquery.execute(broker, query, null);
        }
    } catch (final AuthenticationException | EXistException | PermissionDeniedException | XPathException e) {
        throw new ApiException(e.getMessage(), e);
    }
}
Also used : DBBroker(org.exist.storage.DBBroker) XPathException(org.exist.xquery.XPathException) XQuery(org.exist.xquery.XQuery) EXistException(org.exist.EXistException) BrokerPool(org.exist.storage.BrokerPool)

Example 8 with DBBroker

use of org.exist.storage.DBBroker in project exist by eXist-db.

the class EmbeddedXMLStreamReaderTest method assertNodesIn.

public void assertNodesIn(final NamedEvent[] expected, final Function<Document, NodeHandle> initialNodeFun, final Optional<Function<Document, NodeHandle>> containerFun) throws EXistException, PermissionDeniedException, IOException, XMLStreamException {
    final BrokerPool pool = existEmbeddedServer.getBrokerPool();
    try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
        final Txn transaction = pool.getTransactionManager().beginTransaction()) {
        try (final LockedDocument lockedDocument = broker.getXMLResource(TEST_MIXED_XML_COLLECTION.append(MIXED_XML_NAME), Lock.LockMode.WRITE_LOCK)) {
            assertNotNull(lockedDocument);
            final Document document = lockedDocument.getDocument();
            assertNotNull(document);
            final NodeHandle initialNode = initialNodeFun.apply(document);
            final Optional<NodeHandle> maybeContainerNode = containerFun.map(f -> f.apply(document));
            final IEmbeddedXMLStreamReader xmlStreamReader = broker.getXMLStreamReader(initialNode, false);
            final NamedEvent[] actual = readAllEvents(maybeContainerNode, xmlStreamReader);
            assertArrayEquals(formatExpectedActual(expected, actual), expected, actual);
        }
        transaction.commit();
    }
}
Also used : DBBroker(org.exist.storage.DBBroker) NodeHandle(org.exist.dom.persistent.NodeHandle) LockedDocument(org.exist.dom.persistent.LockedDocument) Txn(org.exist.storage.txn.Txn) Document(org.w3c.dom.Document) LockedDocument(org.exist.dom.persistent.LockedDocument) NamedEvent(org.exist.stax.EmbeddedXMLStreamReaderTest.NamedEvent) BrokerPool(org.exist.storage.BrokerPool)

Example 9 with DBBroker

use of org.exist.storage.DBBroker in project exist by eXist-db.

the class EmbeddedXMLStreamReaderTest method cleanup.

@AfterClass
public static void cleanup() throws EXistException, PermissionDeniedException, IOException, TriggerException {
    final BrokerPool pool = existEmbeddedServer.getBrokerPool();
    try (final DBBroker broker = pool.get(Optional.of(pool.getSecurityManager().getSystemSubject()));
        final Txn transaction = pool.getTransactionManager().beginTransaction()) {
        deleteCollection(broker, transaction, TEST_MIXED_XML_COLLECTION);
        transaction.commit();
    }
}
Also used : DBBroker(org.exist.storage.DBBroker) Txn(org.exist.storage.txn.Txn) BrokerPool(org.exist.storage.BrokerPool) AfterClass(org.junit.AfterClass)

Example 10 with DBBroker

use of org.exist.storage.DBBroker in project exist by eXist-db.

the class AbstractGroupTest method removeManager_calls_assertCanModifyGroup.

@Test
public void removeManager_calls_assertCanModifyGroup() throws PermissionDeniedException, NoSuchMethodException {
    DBBroker mockBroker = EasyMock.createMock(DBBroker.class);
    AbstractRealm mockRealm = EasyMock.createMock(AbstractRealm.class);
    Subject mockSubject = EasyMock.createMock(Subject.class);
    Database mockDatabase = EasyMock.createMock(Database.class);
    Group partialMockGroup = EasyMock.createMockBuilder(AbstractGroup.class).withConstructor(DBBroker.class, AbstractRealm.class, int.class, String.class, List.class).withArgs(mockBroker, mockRealm, 1, "testGroup", null).addMockedMethod("assertCanModifyGroup", Account.class).addMockedMethod(AbstractGroup.class.getDeclaredMethod("_addManager", Account.class)).createNiceMock();
    // expectations
    expect(mockRealm.getDatabase()).andReturn(mockDatabase);
    expect(mockDatabase.getActiveBroker()).andReturn(mockBroker);
    expect(mockBroker.getCurrentSubject()).andReturn(mockSubject);
    partialMockGroup.assertCanModifyGroup(mockSubject);
    replay(mockRealm, mockDatabase, mockBroker, partialMockGroup);
    // test
    partialMockGroup.removeManager(null);
    verify(mockRealm, mockDatabase, mockBroker, partialMockGroup);
}
Also used : DBBroker(org.exist.storage.DBBroker) Database(org.exist.Database) Test(org.junit.Test)

Aggregations

DBBroker (org.exist.storage.DBBroker)468 BrokerPool (org.exist.storage.BrokerPool)304 Txn (org.exist.storage.txn.Txn)219 Sequence (org.exist.xquery.value.Sequence)185 Test (org.junit.Test)170 XQuery (org.exist.xquery.XQuery)108 Collection (org.exist.collections.Collection)93 TransactionManager (org.exist.storage.txn.TransactionManager)70 EXistException (org.exist.EXistException)66 StringInputSource (org.exist.util.StringInputSource)66 PermissionDeniedException (org.exist.security.PermissionDeniedException)44 Source (org.exist.source.Source)42 StringSource (org.exist.source.StringSource)41 XmldbURI (org.exist.xmldb.XmldbURI)41 CompiledXQuery (org.exist.xquery.CompiledXQuery)39 IOException (java.io.IOException)38 QName (org.exist.dom.QName)37 LockedDocument (org.exist.dom.persistent.LockedDocument)36 Database (org.exist.Database)35 XPathException (org.exist.xquery.XPathException)30