Search in sources :

Example 1 with CellStubHelper

use of org.dcache.tests.cells.CellStubHelper in project dcache by dCache.

the class RepositorySubsystemTest method createEntry4.

/* Helper method for creating a fourth entry in the repository.
     */
private void createEntry4(final boolean failSetAttributes, final boolean cancel, final ReplicaState transferState, final ReplicaState finalState) throws Throwable {
    new CellStubHelper(cell) {

        boolean setAttr;

        boolean addCache;

        @Message(required = false, step = 1, cell = "pnfs")
        public Object whenFileIsGarbageCollected(PnfsClearCacheLocationMessage msg) {
            msg.setSucceeded();
            return msg;
        }

        @Message(required = false, step = 3, cell = "pnfs")
        public Object whenDescriptorIsCommitted(PnfsSetFileAttributes msg) {
            assertEquals(size4, msg.getFileAttributes().getSize());
            if (failSetAttributes) {
                msg.setFailed(1, null);
            } else {
                msg.setSucceeded();
            }
            setAttr = true;
            return msg;
        }

        @Message(required = false, step = 5, cell = "pnfs")
        public Object whenDescriptorFails(PnfsAddCacheLocationMessage msg) {
            assertTrue(failSetAttributes || cancel);
            msg.setSucceeded();
            addCache = true;
            return msg;
        }

        @Message(required = false, step = 5, cell = "pnfs")
        public Object whenDescriptorFails(PnfsSetFileAttributes msg) {
            assertTrue(failSetAttributes || cancel);
            msg.setSucceeded();
            return msg;
        }

        @Override
        protected void run() throws FileInCacheException, CacheException, InterruptedException, IOException {
            List<StickyRecord> stickyRecords = Collections.emptyList();
            ReplicaDescriptor handle = repository.createEntry(attributes4, transferState, finalState, stickyRecords, EnumSet.noneOf(OpenFlags.class), OptionalLong.empty());
            try {
                assertStep("No clear after this point", 2);
                createFile(handle, size4);
                if (!cancel) {
                    handle.commit();
                }
            } finally {
                assertStep("Only failure registration after this point", 4);
                handle.close();
            }
            assertEquals("SetFileAttributes must be sent unless we don't try to commit", !cancel, setAttr);
            assertEquals("AddCacheLocation must be sent if not committed", cancel || failSetAttributes, addCache);
        }
    };
}
Also used : StickyRecord(org.dcache.pool.repository.StickyRecord) ReplicaDescriptor(org.dcache.pool.repository.ReplicaDescriptor) OpenFlags(org.dcache.pool.repository.Repository.OpenFlags) PnfsSetFileAttributes(org.dcache.vehicles.PnfsSetFileAttributes) PnfsClearCacheLocationMessage(diskCacheV111.vehicles.PnfsClearCacheLocationMessage) CellStubHelper(org.dcache.tests.cells.CellStubHelper) PnfsAddCacheLocationMessage(diskCacheV111.vehicles.PnfsAddCacheLocationMessage)

Example 2 with CellStubHelper

use of org.dcache.tests.cells.CellStubHelper in project dcache by dCache.

the class RepositorySubsystemTest method testRemoveOpenAgain.

@Test(expected = LockedCacheException.class)
public void testRemoveOpenAgain() throws Throwable {
    repository.init();
    repository.load();
    stateChangeEvents.clear();
    new CellStubHelper(cell) {

        @Message(required = true, step = 1, cell = "pnfs")
        public Object message(PnfsClearCacheLocationMessage msg) {
            msg.setSucceeded();
            return msg;
        }

        @Override
        protected void run() throws CacheException, InterruptedException, IllegalTransitionException {
            ReplicaDescriptor h1 = repository.openEntry(id1, EnumSet.noneOf(OpenFlags.class));
            repository.setState(id1, REMOVED, "test");
            expectStateChangeEvent(id1, PRECIOUS, REMOVED);
            assertStep("Cache location should have been cleared", 1);
            ReplicaDescriptor h2 = repository.openEntry(id1, EnumSet.noneOf(OpenFlags.class));
        }
    };
}
Also used : ReplicaDescriptor(org.dcache.pool.repository.ReplicaDescriptor) OpenFlags(org.dcache.pool.repository.Repository.OpenFlags) PnfsClearCacheLocationMessage(diskCacheV111.vehicles.PnfsClearCacheLocationMessage) CellStubHelper(org.dcache.tests.cells.CellStubHelper) Test(org.junit.Test)

Example 3 with CellStubHelper

use of org.dcache.tests.cells.CellStubHelper in project dcache by dCache.

the class RepositorySubsystemTest method testCreateEntryFromStore.

@Test
public void testCreateEntryFromStore() throws Throwable {
    repository.init();
    repository.load();
    stateChangeEvents.clear();
    new CellStubHelper(cell) {

        @Message(required = true, step = 1, cell = "pnfs")
        public Object message(PnfsSetFileAttributes msg) {
            if (msg.getFileAttributes().isDefined(FileAttribute.SIZE)) {
                return new CacheException("");
            }
            msg.setSucceeded();
            return msg;
        }

        @Override
        protected void run() throws CacheException, InterruptedException {
            List<StickyRecord> stickyRecords = Collections.emptyList();
            ReplicaDescriptor handle = repository.createEntry(attributes5, FROM_STORE, CACHED, stickyRecords, EnumSet.noneOf(OpenFlags.class), OptionalLong.empty());
            try {
                createFile(handle, attributes5.getSize());
                handle.commit();
            } catch (IOException e) {
                throw new DiskErrorCacheException(e.getMessage());
            } finally {
                handle.close();
            }
        }
    };
}
Also used : StickyRecord(org.dcache.pool.repository.StickyRecord) ReplicaDescriptor(org.dcache.pool.repository.ReplicaDescriptor) OpenFlags(org.dcache.pool.repository.Repository.OpenFlags) DiskErrorCacheException(diskCacheV111.util.DiskErrorCacheException) LockedCacheException(diskCacheV111.util.LockedCacheException) FileInCacheException(diskCacheV111.util.FileInCacheException) CacheException(diskCacheV111.util.CacheException) FileNotInCacheException(diskCacheV111.util.FileNotInCacheException) PnfsSetFileAttributes(org.dcache.vehicles.PnfsSetFileAttributes) CellStubHelper(org.dcache.tests.cells.CellStubHelper) IOException(java.io.IOException) DiskErrorCacheException(diskCacheV111.util.DiskErrorCacheException) Test(org.junit.Test)

Example 4 with CellStubHelper

use of org.dcache.tests.cells.CellStubHelper in project dcache by dCache.

the class RepositorySubsystemTest method createEntry.

private void createEntry(final FileAttributes attributes, final ReplicaState state, final List<StickyRecord> sticky) throws Throwable {
    new CellStubHelper(cell) {

        @Message(cell = "pnfs")
        public Object message(PnfsSetFileAttributes msg) {
            msg.setSucceeded();
            return msg;
        }

        @Override
        protected void run() throws CacheException, IOException, InterruptedException {
            ReplicaDescriptor handle = repository.createEntry(attributes, ReplicaState.FROM_CLIENT, state, sticky, EnumSet.noneOf(OpenFlags.class), OptionalLong.empty());
            try {
                createFile(handle, attributes.getSize());
                handle.commit();
            } finally {
                handle.close();
            }
        }
    };
}
Also used : ReplicaDescriptor(org.dcache.pool.repository.ReplicaDescriptor) OpenFlags(org.dcache.pool.repository.Repository.OpenFlags) PnfsSetFileAttributes(org.dcache.vehicles.PnfsSetFileAttributes) CellStubHelper(org.dcache.tests.cells.CellStubHelper)

Example 5 with CellStubHelper

use of org.dcache.tests.cells.CellStubHelper in project dcache by dCache.

the class RepositorySubsystemTest method testRemoveWhileReading.

@Test
public void testRemoveWhileReading() throws Throwable {
    repository.init();
    repository.load();
    stateChangeEvents.clear();
    new CellStubHelper(cell) {

        @Message(required = true, step = 0, cell = "pnfs")
        public Object message(PnfsClearCacheLocationMessage msg) {
            msg.setSucceeded();
            return msg;
        }

        @Override
        protected void run() throws CacheException, InterruptedException, IllegalTransitionException {
            ReplicaDescriptor handle1 = repository.openEntry(id1, EnumSet.noneOf(OpenFlags.class));
            repository.setState(id1, REMOVED, "test");
            expectStateChangeEvent(id1, PRECIOUS, REMOVED);
            assertNoStateChangeEvent();
            assertStep("Cache location cleared", 1);
            handle1.close();
            expectStateChangeEvent(id1, REMOVED, DESTROYED);
        }
    };
}
Also used : ReplicaDescriptor(org.dcache.pool.repository.ReplicaDescriptor) OpenFlags(org.dcache.pool.repository.Repository.OpenFlags) PnfsClearCacheLocationMessage(diskCacheV111.vehicles.PnfsClearCacheLocationMessage) CellStubHelper(org.dcache.tests.cells.CellStubHelper) Test(org.junit.Test)

Aggregations

ReplicaDescriptor (org.dcache.pool.repository.ReplicaDescriptor)5 OpenFlags (org.dcache.pool.repository.Repository.OpenFlags)5 CellStubHelper (org.dcache.tests.cells.CellStubHelper)5 PnfsClearCacheLocationMessage (diskCacheV111.vehicles.PnfsClearCacheLocationMessage)3 PnfsSetFileAttributes (org.dcache.vehicles.PnfsSetFileAttributes)3 Test (org.junit.Test)3 StickyRecord (org.dcache.pool.repository.StickyRecord)2 CacheException (diskCacheV111.util.CacheException)1 DiskErrorCacheException (diskCacheV111.util.DiskErrorCacheException)1 FileInCacheException (diskCacheV111.util.FileInCacheException)1 FileNotInCacheException (diskCacheV111.util.FileNotInCacheException)1 LockedCacheException (diskCacheV111.util.LockedCacheException)1 PnfsAddCacheLocationMessage (diskCacheV111.vehicles.PnfsAddCacheLocationMessage)1 IOException (java.io.IOException)1