/*
* A CCNx library test.
*
* Copyright (C) 2008-2012 Palo Alto Research Center, Inc.
*
* This work is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2 as published by the
* Free Software Foundation.
* This work is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details. You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
package org.ccnx.ccn.test.io.content;
import java.util.Arrays;
import java.util.LinkedList;
import org.ccnx.ccn.impl.support.Log;
import org.ccnx.ccn.io.content.Collection;
import org.ccnx.ccn.io.content.Link;
import org.ccnx.ccn.io.content.LinkAuthenticator;
import org.ccnx.ccn.protocol.CCNTime;
import org.ccnx.ccn.protocol.ContentName;
import org.ccnx.ccn.protocol.PublisherID;
import org.ccnx.ccn.protocol.SignedInfo;
import org.ccnx.ccn.protocol.PublisherID.PublisherType;
import org.ccnx.ccn.test.impl.encoding.XMLEncodableTester;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Test the Collection data representation.
*/
public class CollectionTest {
static final String baseName = "test";
static final String subName = "smetters";
static final String document1 = "intro.html";
static final String document2 = "key";
static final String document3 = "cv.txt";
static ContentName name = null;
static ContentName name2 = null;
static ContentName name3 = null;
static ContentName name4 = null;
static ContentName [] ns = null;
static public byte [] contenthash1 = new byte[32];
static public byte [] contenthash2 = new byte[32];
static public byte [] publisherid1 = new byte[32];
static public byte [] publisherid2 = new byte[32];
static PublisherID pubID1 = null;
static PublisherID pubID2 = null;
static LinkAuthenticator [] las = new LinkAuthenticator[4];
static Link [] lrs = null;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
name = new ContentName(baseName, subName, document1);
name2 = new ContentName(baseName, subName, document2);
name3 = new ContentName(baseName, subName, document3);
name4 = ContentName.fromURI("/parc/home/briggs/collaborators.txt");
ns = new ContentName[]{name,name2,name3,name4};
Arrays.fill(contenthash1, (byte)2);
Arrays.fill(contenthash2, (byte)4);
Arrays.fill(publisherid1, (byte)6);
Arrays.fill(publisherid2, (byte)3);
pubID1 = new PublisherID(publisherid1, PublisherType.KEY);
pubID2 = new PublisherID(publisherid2, PublisherType.ISSUER_KEY);
las[0] = new LinkAuthenticator(pubID1);
las[1] = null;
las[2] = new LinkAuthenticator(pubID2, null, null,
SignedInfo.ContentType.DATA, contenthash1);
las[3] = new LinkAuthenticator(pubID1, null, CCNTime.now(),
null, contenthash1);
lrs = new Link[4];
for (int i=0; i < lrs.length; ++i) {
lrs[i] = new Link(ns[i],las[i]);
}
}
@Test
public void testValidate() {
Log.info(Log.FAC_TEST, "Starting testValidate");
Collection cd = new Collection();
Assert.assertTrue(cd.validate());
cd.add(lrs[0]);
Assert.assertTrue(cd.validate());
cd.remove(0);
Assert.assertTrue(cd.validate());
Log.info(Log.FAC_TEST, "Completed testValidate");
}
@Test
public void testCollectionData() {
Log.info(Log.FAC_TEST, "Starting testCollectionData");
Collection cd = new Collection();
Assert.assertNotNull(cd);
Assert.assertTrue(cd.validate());
Log.info(Log.FAC_TEST, "Completed testCollectionData");
}
@Test
public void testContents() {
Log.info(Log.FAC_TEST, "Starting testContents");
Collection cd = new Collection();
Assert.assertTrue(cd.validate());
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
LinkedList<Link> c = cd.contents();
Assert.assertNotNull(c);
Assert.assertTrue(c.size() == lrs.length);
for (int i=0; i < lrs.length; ++i) {
Assert.assertEquals(c.get(i), lrs[i]);
}
// Test iterator
int j=0;
for (Link l : cd) {
Assert.assertEquals(l, lrs[j++]);
}
Log.info(Log.FAC_TEST, "Completed testContents");
}
@Test
public void testAddGet() {
Log.info(Log.FAC_TEST, "Starting testAddGet");
Collection cd = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
for (int i=0; i < lrs.length; ++i) {
Assert.assertEquals(cd.get(i), lrs[i]);
}
Log.info(Log.FAC_TEST, "Completed testAddGet");
}
@Test
public void testRemoveInt() {
Log.info(Log.FAC_TEST, "Starting testRemoveInt");
Collection cd = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
cd.remove(0);
Assert.assertEquals(cd.get(0), lrs[1]);
Log.info(Log.FAC_TEST, "Completed testRemoveInt");
}
@Test
public void testRemoveLink() {
Log.info(Log.FAC_TEST, "Starting testRemoveLink");
Collection cd = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
cd.remove(lrs[0]);
Assert.assertEquals(cd.get(0), lrs[1]);
LinkAuthenticator la2alt = new LinkAuthenticator(pubID2, null, null,
SignedInfo.ContentType.DATA, contenthash1);
Link lr2alt = new Link(name3, la2alt);
cd.remove(lr2alt);
Assert.assertEquals(cd.get(1), lrs[3]);
Log.info(Log.FAC_TEST, "Completed testRemoveLink");
}
@Test
public void testSize() {
Log.info(Log.FAC_TEST, "Starting testSize");
Collection cd = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
Assert.assertTrue(cd.size() == lrs.length);
Log.info(Log.FAC_TEST, "Completed testSize");
}
@Test
public void testEqualsObject() {
Log.info(Log.FAC_TEST, "Starting testEqualsObject");
Collection cd = new Collection();
Collection cd2 = new Collection();
Collection cd3 = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
cd2.add(lrs[i]);
cd3.add(lrs[lrs.length-i-1]);
}
Assert.assertEquals(cd, cd2);
Assert.assertFalse(cd.equals(cd3));
cd.remove(2);
Collection cd4 = cd2.clone();
Assert.assertFalse(cd.equals(cd2));
Assert.assertEquals(cd4, cd2);
cd2.remove(2);
Assert.assertEquals(cd, cd2);
cd2.remove(2); // remove last entry
cd2.add(new Link(name3, las[2]));
cd2.add(new Link(name4, las[3]));
Assert.assertEquals(cd2, cd4);
Log.info(Log.FAC_TEST, "Completed testEqualsObject");
}
@Test
public void testEncodeDecodeStream() {
Log.info(Log.FAC_TEST, "Starting testEncodeDecodeStream");
Collection cd = new Collection();
Collection cdec = new Collection();
Collection bdec = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
XMLEncodableTester.encodeDecodeTest("Collection", cd, cdec, bdec);
Log.info(Log.FAC_TEST, "Completed testEncodeDecodeStream");
}
@Test
public void testEncodeDecodeByteArray() {
Log.info(Log.FAC_TEST, "Starting testEncodeDecodeByteArray");
Collection cd = new Collection();
Collection cdec = new Collection();
Collection bdec = new Collection();
for (int i=0; i < lrs.length; ++i) {
cd.add(lrs[i]);
}
XMLEncodableTester.encodeDecodeByteArrayTest("Collection", cd, cdec, bdec);
Log.info(Log.FAC_TEST, "Completed testEncodeDecodeByteArray");
}
}