package org.bouncycastle.asn1.cmc.test;


import java.util.Random;

import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.cmc.BodyPartID;
import org.bouncycastle.asn1.cmc.BodyPartPath;
import org.bouncycastle.util.test.SimpleTest;

public class BodyPartPathTest
    extends SimpleTest
{

    public void performTest()
        throws Exception
    {
        Random rand = new Random();
        {
            BodyPartID[] bpid = new BodyPartID[Math.abs(rand.nextInt()) % 20];
            for (int t = 0; t < bpid.length; t++)
            {
                bpid[t] = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L));
            }
            BodyPartPath bpp = new BodyPartPath(bpid);
            DERSequence _bpp = (DERSequence)bpp.toASN1Primitive();
            byte[] b = bpp.getEncoded();

            //
            // Decode and compare results.
            //

            BodyPartPath resList = BodyPartPath.getInstance(b);
            DERSequence _resList = (DERSequence)resList.toASN1Primitive();

            isEquals(_bpp.size(), _resList.size());

            for (int j = 0; j < _bpp.size(); j++)
            {
                isEquals(_resList.getObjectAt(j), _bpp.getObjectAt(j));
            }
        }
        {
            //
            // Compare when same thing instantiated via different constructors.
            //

            BodyPartID bpid = new BodyPartID(Math.abs(rand.nextLong() % 4294967295L));
            BodyPartPath bpidList = new BodyPartPath(bpid); // Single entry constructor.
            BodyPartPath resList = new BodyPartPath(new BodyPartID[]{bpid}); // Array constructor.

            DERSequence _bpidList = (DERSequence)bpidList.toASN1Primitive();
            DERSequence _resList = (DERSequence)resList.toASN1Primitive();

            isEquals(_bpidList, _resList);
        }
    }

    public String getName()
    {
        return "BodyPartPathTest";
    }

    public static void main(String[] args)
    {
        runTest(new BodyPartPathTest());
    }

}
