Skip to content

Commit

Permalink
remove stored checksum and size information from the FixityResult -- …
Browse files Browse the repository at this point in the history
…it's already iin the fcr:content metadata
  • Loading branch information
cbeer committed May 22, 2013
1 parent dd8a54f commit a2140a3
Show file tree
Hide file tree
Showing 11 changed files with 38 additions and 189 deletions.
Expand Up @@ -35,8 +35,6 @@ public void testCheckDatastreamFixity() throws Exception {
assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#status").asNode(), ResourceFactory.createPlainLiteral("SUCCESS").asNode()));

assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#computedChecksum").asNode(),ResourceFactory.createResource("urn:sha1:0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#storedChecksum").asNode(), ResourceFactory.createResource("urn:sha1:0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33").asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#computedSize").asNode(),ResourceFactory.createTypedLiteral(3).asNode()));
assertTrue(graphStore.contains(Node.ANY, Node.ANY, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#storedSize").asNode(), ResourceFactory.createTypedLiteral(3).asNode()));
}
}
}
Expand Up @@ -21,6 +21,9 @@

import com.codahale.metrics.Counter;
import com.codahale.metrics.Timer;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
import com.hp.hpl.jena.query.Dataset;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.update.GraphStoreFactory;
Expand All @@ -29,7 +32,6 @@
import org.fcrepo.binary.PolicyDecisionPoint;
import org.fcrepo.exception.InvalidChecksumException;
import org.fcrepo.rdf.GraphSubjects;
import org.fcrepo.services.functions.GetGoodFixityResults;
import org.fcrepo.utils.DatastreamIterator;
import org.fcrepo.utils.FixityResult;
import org.fcrepo.utils.JcrRdfTools;
Expand Down Expand Up @@ -68,10 +70,6 @@ public class DatastreamService extends RepositoryService {
private static final Logger logger = getLogger(DatastreamService.class);


private GetGoodFixityResults getGoodFixityResults =
new GetGoodFixityResults();


/**
* Create a new Datastream node in the JCR store
* @param session the jcr session to use
Expand Down Expand Up @@ -233,7 +231,12 @@ public Collection<FixityResult> runFixityAndFixProblems(
copyOf(getFixity(datastream.getNode().getNode(JcrConstants.JCR_CONTENT), digest, digestUri,
size));

goodEntries = getGoodFixityResults.apply(fixityResults);
goodEntries = ImmutableSet.copyOf(Collections2.filter(fixityResults, new Predicate<FixityResult>() {
@Override
public boolean apply(org.fcrepo.utils.FixityResult input) {
return input.matches(size, digestUri);
}
}));
} finally {
context.stop();
}
Expand Down Expand Up @@ -279,8 +282,4 @@ public Collection<FixityResult> getFixity(final Node resource, final MessageDige
.getCheckCacheFixityFunction(digest, dsChecksum, dsSize));
}


public void setGetGoodFixityResults(final GetGoodFixityResults res) {
this.getGoodFixityResults = res;
}
}

This file was deleted.

24 changes: 12 additions & 12 deletions fcrepo-kernel/src/main/java/org/fcrepo/utils/FixityResult.java
Expand Up @@ -12,20 +12,12 @@ public static enum FixityState {
SUCCESS, REPAIRED, BAD_CHECKSUM, BAD_SIZE
}

public String storeIdentifier;

public EnumSet<FixityState> status = EnumSet.noneOf(FixityState.class);

public long computedSize;

public URI computedChecksum;

public long dsSize;

public String dsChecksumType;

public URI dsChecksum;

private final LowLevelCacheEntry entry;

public FixityResult() {
Expand All @@ -34,7 +26,6 @@ public FixityResult() {

public FixityResult(final LowLevelCacheEntry entry) {
this.entry = entry;
storeIdentifier = entry.getExternalIdentifier();
}

public FixityResult(final long size, final URI checksum) {
Expand All @@ -50,6 +41,10 @@ public FixityResult(final LowLevelCacheEntry entry, final long size,
computedChecksum = checksum;
}

public String getStoreIdentifier() {
return entry.getExternalIdentifier();
}

@Override
public boolean equals(final Object obj) {

Expand Down Expand Up @@ -80,11 +75,16 @@ public LowLevelCacheEntry getEntry() {
return entry;
}

public boolean matches() {
return matches(dsSize, dsChecksum);
public boolean matches(final URI checksum) {
return computedChecksum.equals(checksum);
}

public boolean matches(final long size) {
return computedSize == size;
}

public boolean matches(final long size, final URI checksum) {
return computedSize == size && computedChecksum.equals(checksum);
return matches(size) && matches(checksum);
}

public boolean isSuccess() {
Expand Down
Expand Up @@ -695,16 +695,13 @@ public static Model getFixityResultsModel(final GraphSubjects factory, final Nod
model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#isFixityResultOf"), factory.getGraphSubject(node));
model.add(factory.getGraphSubject(node), ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#hasFixityResult"), resultSubject);

model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#storedIn"), ResourceFactory.createResource(result.storeIdentifier));
model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#storedIn"), ResourceFactory.createResource(result.getStoreIdentifier()));
for(FixityResult.FixityState state : result.status) {
model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#status"), ResourceFactory.createTypedLiteral(state.toString()));
}

model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#computedChecksum"), ResourceFactory.createResource(result.computedChecksum.toString()));
model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#storedChecksum"), ResourceFactory.createResource(result.dsChecksum.toString()));

model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#computedSize"), ResourceFactory.createTypedLiteral(result.computedSize));
model.add(resultSubject, ResourceFactory.createProperty("info:fedora/fedora-system:def/internal#storedSize"), ResourceFactory.createTypedLiteral(result.dsSize));
}

return model;
Expand Down
Expand Up @@ -204,27 +204,23 @@ public FixityResult checkFixity(final URI checksum, final long size,
}

try {
final FixityResult result = new FixityResult(this);

while (ds.read() != -1) {
// noop; we're just reading the stream for the checksum and size
}

result.computedChecksum = ContentDigest.asURI(digest.getAlgorithm(), ds
.getMessageDigest().digest());
result.computedSize = ds.getByteCount();
result.dsChecksum = checksum;
result.dsSize = size;
final FixityResult result = new FixityResult(this, ds.getByteCount(),
ContentDigest.asURI(digest.getAlgorithm(), ds.getMessageDigest().digest()));

if (!result.computedChecksum.equals(result.dsChecksum)) {
if (!result.matches(checksum)) {
result.status.add(BAD_CHECKSUM);
}

if (result.dsSize != result.computedSize) {
if (!result.matches(size)) {
result.status.add(BAD_SIZE);
}

if (result.status.isEmpty()) {
if (result.matches(size, checksum)) {
result.status.add(SUCCESS);
}

Expand Down
Expand Up @@ -6,7 +6,6 @@
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
Expand All @@ -18,47 +17,31 @@
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;

import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import com.google.common.base.Function;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import org.fcrepo.Datastream;
import org.fcrepo.FedoraObject;
import org.fcrepo.binary.PolicyDecisionPoint;
import org.fcrepo.rdf.GraphSubjects;
import org.fcrepo.services.functions.CheckCacheEntryFixity;
import org.fcrepo.services.functions.GetBinaryKey;
import org.fcrepo.services.functions.GetCacheStore;
import org.fcrepo.services.functions.GetGoodFixityResults;
import org.fcrepo.utils.FedoraJcrTypes;
import org.fcrepo.utils.FedoraTypesUtils;
import org.fcrepo.utils.FixityResult;
import org.fcrepo.utils.JcrRdfTools;
import org.fcrepo.utils.LowLevelCacheEntry;
import org.infinispan.Cache;
import org.infinispan.loaders.CacheLoaderException;
import org.infinispan.loaders.CacheStore;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.internal.util.collections.Sets;
import org.modeshape.jcr.GetBinaryStore;
import org.modeshape.jcr.api.Binary;
import org.modeshape.jcr.api.JcrConstants;
import org.modeshape.jcr.value.BinaryKey;
import org.modeshape.jcr.value.binary.BinaryStore;
import org.modeshape.jcr.value.binary.infinispan.InfinispanBinaryStore;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
Expand Down Expand Up @@ -167,10 +150,10 @@ public void testExists() throws RepositoryException {
public void testGetFixityResultsModel() throws RepositoryException, URISyntaxException {
mockStatic(JcrRdfTools.class);

Collection<FixityResult> mockCollection = Arrays.asList(new FixityResult());
GetGoodFixityResults mockFixityResultsFunction = mock(GetGoodFixityResults.class);
when(mockFixityResultsFunction.apply(mockCollection)).thenReturn(Sets.newSet(new FixityResult()));
testObj.setGetGoodFixityResults(mockFixityResultsFunction);
final FixityResult fixityResult = mock(FixityResult.class);
when(fixityResult.matches(any(Long.class), any(URI.class))).thenReturn(true);

Collection<FixityResult> mockCollection = Arrays.asList(fixityResult);
final Datastream mockDatastream = mock(Datastream.class);
final Node mockNode = mock(Node.class);
final Node mockContent = mock(Node.class);
Expand Down Expand Up @@ -231,10 +214,10 @@ public void testRunFixityAndFixProblems() throws RepositoryException,
when(mockGoodEntry.getInputStream()).thenReturn(mockIS);
LowLevelCacheEntry mockBadEntry = mock(LowLevelCacheEntry.class);
final FixityResult mockGoodResult = mock(FixityResult.class);
when(mockGoodResult.matches()).thenReturn(true);
when(mockGoodResult.matches(any(Long.class), any(URI.class))).thenReturn(true);
when(mockGoodResult.getEntry()).thenReturn(mockGoodEntry);
final FixityResult mockBadResult = mock(FixityResult.class);
when(mockBadResult.matches()).thenReturn(false);
when(mockBadResult.matches(any(Long.class), any(URI.class))).thenReturn(false);
when(mockBadResult.getEntry()).thenReturn(mockBadEntry);

final FixityResult mockRepairedResult = mock(FixityResult.class);
Expand Down
Expand Up @@ -10,16 +10,9 @@
import static org.mockito.Mockito.when;
import static org.powermock.api.mockito.PowerMockito.spy;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

Expand All @@ -30,13 +23,8 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.fcrepo.Datastream;
import org.fcrepo.FedoraObject;
import org.fcrepo.services.functions.GetBinaryKey;
import org.fcrepo.services.functions.GetCacheStore;
import org.fcrepo.services.functions.GetGoodFixityResults;
import org.fcrepo.utils.FixityResult;
import org.fcrepo.utils.FixityResult.FixityState;
import org.fcrepo.utils.LowLevelCacheEntry;
import org.infinispan.Cache;
import org.infinispan.loaders.CacheLoaderException;
Expand All @@ -49,7 +37,6 @@
import org.modeshape.jcr.value.binary.BinaryStore;
import org.modeshape.jcr.value.binary.CompositeBinaryStore;
import org.modeshape.jcr.value.binary.infinispan.InfinispanBinaryStore;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
Expand Down

This file was deleted.

0 comments on commit a2140a3

Please sign in to comment.