@Test public void testGetFirstDigest() { Log.info(Log.FAC_TEST, "Starting testGetFirstDigest"); long received = 0; byte[] bytes = new byte[1024]; try { istream = new CCNInputStream(testName, readHandle); } catch (IOException e1) { Log.warning(Log.FAC_TEST, "failed to open stream for pipeline test: " + e1.getMessage()); Assert.fail(); } try { Assert.assertTrue(DataUtils.arrayEquals(firstDigest, istream.getFirstDigest())); } catch (IOException e3) { Log.warning(Log.FAC_TEST, "failed to get first digest for pipeline test:"); Assert.fail(); } try { istream.close(); } catch (IOException e2) { Log.warning(Log.FAC_TEST, "failed to close stream for pipeline test: " + e2.getMessage()); Assert.fail(); } Log.info(Log.FAC_TEST, "start first segment digest " + DataUtils.printBytes(firstDigest)); try { istream = new CCNInputStream(testName, readHandle); } catch (IOException e1) { Log.warning(Log.FAC_TEST, "failed to open stream for pipeline test: " + e1.getMessage()); Assert.fail(); } while (!istream.eof()) { try { received += istream.read(bytes); } catch (IOException e) { Log.warning(Log.FAC_TEST, "failed to read segments: " + e.getMessage()); Assert.fail(); } } Assert.assertTrue(received == bytesWritten); try { Assert.assertTrue(DataUtils.arrayEquals(firstDigest, istream.getFirstDigest())); } catch (IOException e) { Log.warning(Log.FAC_TEST, "failed to get first digest after reading in pipeline test:"); Assert.fail(); } Log.info(Log.FAC_TEST, "end first segment digest " + DataUtils.printBytes(firstDigest)); Log.info(Log.FAC_TEST, "Completed testGetFirstDigest"); }
public Interest handleContent(ContentObject result, Interest interest) { Log.finest( Log.FAC_TEST, "Interests registered: " + _interests.size() + " content object returned"); // Parameterized behavior that subclasses can override. ContentName interestName = null; if (_processedObjects.contains(result)) { Log.fine( Log.FAC_TEST, "FLOSSER: Got repeated content for interest: {0} content: {1}", interest, result.name()); } else { Log.finest( Log.FAC_TEST, "FLOSSER: Got new content for interest {0} content name: {1}", interest, result.name()); processContent(result); // update the interest. follow process used by ccnslurp. // exclude the next component of this object, and set up a // separate interest to explore its children. // first, remove the interest from our list as we aren't going to // reexpress it in exactly the same way synchronized (_interests) { for (Entry<ContentName, Interest> entry : _interests.entrySet()) { if (entry.getValue().equals(interest)) { interestName = entry.getKey(); _interests.remove(interestName); break; } } } int prefixCount = interest.name().count(); // DKS TODO should the count above be count()-1 and this just prefixCount? if (prefixCount == result.name().count()) { if (null == interest.exclude()) { ArrayList<Exclude.Element> excludes = new ArrayList<Exclude.Element>(); excludes.add(new ExcludeComponent(result.digest())); interest.exclude(new Exclude(excludes)); Log.finest(Log.FAC_TEST, "Creating new exclude filter for interest {0}", interest.name()); } else { if (interest.exclude().match(result.digest())) { Log.fine( Log.FAC_TEST, "We should have already excluded content digest: " + DataUtils.printBytes(result.digest())); } else { // Has to be in order... Log.finest(Log.FAC_TEST, "Adding child component to exclude."); interest.exclude().add(new byte[][] {result.digest()}); } } Log.finer( Log.FAC_TEST, "Excluding content digest: " + DataUtils.printBytes(result.digest()) + " onto interest {0} total excluded: " + interest.exclude().size(), interest.name()); } else { // Add an exclude for the content we just got // DKS TODO might need to split to matchedComponents like ccnslurp if (null == interest.exclude()) { ArrayList<Exclude.Element> excludes = new ArrayList<Exclude.Element>(); excludes.add(new ExcludeComponent(result.name().component(prefixCount))); interest.exclude(new Exclude(excludes)); Log.finest(Log.FAC_TEST, "Creating new exclude filter for interest {0}", interest.name()); } else { if (interest.exclude().match(result.name().component(prefixCount))) { Log.fine( Log.FAC_TEST, "We should have already excluded child component: {0}", ContentName.componentPrintURI(result.name().component(prefixCount))); } else { // Has to be in order... Log.finest(Log.FAC_TEST, "Adding child component to exclude."); interest.exclude().add(new byte[][] {result.name().component(prefixCount)}); } } Log.finer( Log.FAC_TEST, "Excluding child " + ContentName.componentPrintURI(result.name().component(prefixCount)) + " total excluded: " + interest.exclude().size()); if (_flossSubNamespaces || SegmentationProfile.isNotSegmentMarker(result.name().component(prefixCount))) { ContentName newNamespace = null; try { if (interest.name().count() == result.name().count()) { newNamespace = new ContentName(interest.name(), result.digest()); Log.info(Log.FAC_TEST, "Not adding content exclusion namespace: {0}", newNamespace); } else { newNamespace = new ContentName( interest.name(), result.name().component(interest.name().count())); Log.info(Log.FAC_TEST, "Adding new namespace: {0}", newNamespace); handleNamespace(newNamespace, interest.name()); } } catch (IOException ioex) { Log.warning("IOException picking up namespace: {0}", newNamespace); } } } } if (null != interest) synchronized (_interests) { _interests.put(interest.name(), interest); } return interest; }