Skip to content

Commit

Permalink
updating to use the status Enum
Browse files Browse the repository at this point in the history
  • Loading branch information
barmintor committed Mar 25, 2013
1 parent 0c3dd88 commit 019116e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 26 deletions.
Expand Up @@ -3,6 +3,7 @@
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.EnumSet;
import java.util.List;

import javax.persistence.CascadeType;
Expand All @@ -22,6 +23,7 @@
import javax.xml.bind.annotation.XmlTransient;

import org.fcrepo.utils.FixityResult;
import org.fcrepo.utils.FixityResult.FixityState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -80,50 +82,52 @@ public DatastreamFixity(org.fcrepo.jaxb.responses.management.DatastreamFixity re
this.datastreamId = result.dsId;
this.timestamp = result.timestamp;
this.type = ResultType.SUCCESS;
int aggregateStatus = FixityResult.SUCCESS;
EnumSet<FixityState> aggregateStatus = EnumSet.noneOf(FixityResult.FixityState.class);
aggregateStatus.add(FixityResult.FixityState.SUCCESS);
for (FixityResult status:result.statuses){
if ((status.status & FixityResult.BAD_CHECKSUM) == FixityResult.BAD_CHECKSUM){
if ((status.status.contains(FixityResult.FixityState.BAD_CHECKSUM))){
aggregateStatus.remove(FixityResult.FixityState.SUCCESS);
aggregateStatus.add(FixityResult.FixityState.BAD_CHECKSUM);
FixityProblem problem = new FixityProblem();
problem.cacheId = status.storeIdentifier;
problem.details = checksumErrorDetails(result, status.dsChecksumType, status.dsChecksum, status.computedChecksum);
if ((status.status & FixityResult.REPAIRED) != FixityResult.REPAIRED) {
aggregateStatus = (FixityResult.BAD_CHECKSUM + FixityResult.BAD_SIZE);
aggregateStatus |= FixityResult.BAD_CHECKSUM;
if (!(status.status.contains(FixityResult.FixityState.REPAIRED))) {
aggregateStatus.remove(FixityResult.FixityState.REPAIRED);
problem.type = ResultType.ERROR;
} else {
if (aggregateStatus == FixityResult.SUCCESS) {
aggregateStatus |= status.status;
} else {
aggregateStatus &= status.status;
if (!aggregateStatus.contains(FixityResult.FixityState.BAD_CHECKSUM)
&& !aggregateStatus.contains(FixityResult.FixityState.BAD_SIZE)){
aggregateStatus.add(FixityResult.FixityState.REPAIRED);
}
aggregateStatus.add(FixityResult.FixityState.BAD_CHECKSUM);
problem.type = ResultType.REPAIRED;
}
this.problems.add(problem);
}
if ((status.status & FixityResult.BAD_SIZE) == FixityResult.BAD_SIZE){
if ((status.status.contains(FixityResult.FixityState.BAD_SIZE))){
aggregateStatus.remove(FixityResult.FixityState.SUCCESS);
FixityProblem problem = new FixityProblem();
problem.cacheId = status.storeIdentifier;
problem.details = sizeErrorDetails(result, status.dsSize, status.computedSize);
if ((status.status & FixityResult.REPAIRED) != FixityResult.REPAIRED) {
aggregateStatus = (FixityResult.BAD_CHECKSUM + FixityResult.BAD_SIZE);
aggregateStatus |= FixityResult.BAD_CHECKSUM;
problem.details = checksumErrorDetails(result, status.dsChecksumType, status.dsChecksum, status.computedChecksum);
if (!(status.status.contains(FixityResult.FixityState.REPAIRED))) {
aggregateStatus.remove(FixityResult.FixityState.REPAIRED);
problem.type = ResultType.ERROR;
} else {
if (aggregateStatus == FixityResult.SUCCESS) {
aggregateStatus |= status.status;
} else {
aggregateStatus &= status.status;
if (!aggregateStatus.contains(FixityResult.FixityState.BAD_CHECKSUM)
&& !aggregateStatus.contains(FixityResult.FixityState.BAD_SIZE)){
aggregateStatus.add(FixityResult.FixityState.REPAIRED);
}
problem.type = ResultType.REPAIRED;
}
aggregateStatus.add(FixityResult.FixityState.BAD_SIZE);
this.problems.add(problem);
}
}
if (aggregateStatus == FixityResult.SUCCESS) {
if (aggregateStatus.contains(FixityResult.FixityState.SUCCESS)) {
type = ResultType.SUCCESS;
details = successDetails(result);
}
else if ((aggregateStatus & FixityResult.REPAIRED) == FixityResult.REPAIRED) {
else if (aggregateStatus.contains(FixityResult.FixityState.REPAIRED)) {
type = ResultType.REPAIRED;
details = "There were fixity problems detected, but they were repaired.";
} else {
Expand Down
Expand Up @@ -11,6 +11,7 @@
import java.math.BigInteger;
import java.net.URI;
import java.security.MessageDigest;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
Expand All @@ -30,6 +31,7 @@
import org.fcrepo.services.fixity.model.FixityProblem;
import org.fcrepo.services.fixity.model.ObjectFixity;
import org.fcrepo.utils.FixityResult;
import org.fcrepo.utils.FixityResult.FixityState;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
Expand Down Expand Up @@ -89,7 +91,9 @@ public void testFixityService() throws Exception {
FixityResult success = new FixityResult(someData.length, ds.dsChecksum);
success.dsSize = someData.length;
success.dsChecksum = ds.dsChecksum;
success.status = FixityResult.SUCCESS;
EnumSet<FixityState> status = EnumSet.noneOf(FixityResult.FixityState.class);
status.add(FixityResult.FixityState.SUCCESS);
success.status = status;
fixity.statuses.add(success);

when(client.getDatastreamFixity(obj.pid, dsElement.dsid)).thenReturn(fixity);
Expand All @@ -107,10 +111,12 @@ public void testFixityService() throws Exception {
}while(service.getResults(obj.pid).size() == 0);

/* check if there is a result in the database */
List<ObjectFixity> results =service.getResults(obj.pid);
List<ObjectFixity> results = service.getResults(obj.pid);
assertTrue(results.size() == 1);
assertTrue(results.get(0).getErrors().size() == 0);
assertTrue(results.get(0).getSuccesses().size() == 1);
int actual = results.get(0).getErrors().size();
assertEquals("Expected 0 errors; got " + actual, 0, actual);
actual = results.get(0).getSuccesses().size();
assertEquals("Expected 1 success; got " + actual, 1, actual);
}

@Test
Expand Down Expand Up @@ -143,12 +149,17 @@ public void testChecksumFixityServiceError() throws Exception {
fixity.timestamp = new java.util.Date();
fixity.statuses = new java.util.ArrayList<FixityResult>();
FixityResult error = new FixityResult(someData.length - 2, expectedChecksum);
error.status = FixityResult.BAD_SIZE;
EnumSet<FixityResult.FixityState> status = EnumSet.noneOf(FixityResult.FixityState.class);
status.add(FixityResult.FixityState.BAD_SIZE);
error.status = status;
error.dsSize = someData.length;
error.dsChecksum = expectedChecksum;
fixity.statuses.add(error);
error = new FixityResult(someData.length - 2, expectedChecksum);
error.status = FixityResult.BAD_SIZE + FixityResult.REPAIRED;
status = EnumSet.noneOf(FixityResult.FixityState.class);
status.add(FixityResult.FixityState.BAD_SIZE);
status.add(FixityResult.FixityState.REPAIRED);
error.status = status;
error.dsSize = someData.length;
error.dsChecksum = expectedChecksum;
fixity.statuses.add(error);
Expand Down

0 comments on commit 019116e

Please sign in to comment.