Package org.vafer.jdeb.signing

Source Code of org.vafer.jdeb.signing.DebMakerTestCase

/*
* Copyright 2014 The jdeb developers.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.vafer.jdeb.signing;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import junit.framework.TestCase;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.io.FileUtils;
import org.bouncycastle.openpgp.PGPSignature;
import org.bouncycastle.openpgp.PGPSignatureGenerator;
import org.bouncycastle.openpgp.PGPUtil;
import org.bouncycastle.openpgp.operator.bc.BcPGPContentSignerBuilder;
import org.vafer.jdeb.ArchiveVisitor;
import org.vafer.jdeb.ArchiveWalker;
import org.vafer.jdeb.Compression;
import org.vafer.jdeb.DataProducer;
import org.vafer.jdeb.DebMaker;
import org.vafer.jdeb.NullConsole;
import org.vafer.jdeb.debian.BinaryPackageControlFile;
import org.vafer.jdeb.producers.DataProducerArchive;
import org.vafer.jdeb.producers.DataProducerDirectory;
import org.vafer.jdeb.producers.DataProducerLink;

public class DebMakerTestCase extends TestCase {

    public void testCreation() throws Exception {

        File control = new File(getClass().getResource("../deb/control/control").toURI());
        File archive1 = new File(getClass().getResource("../deb/data.tgz").toURI());
        File archive2 = new File(getClass().getResource("../deb/data.tar.bz2").toURI());
        File archive3 = new File(getClass().getResource("../deb/data.zip").toURI());
        File directory = new File(getClass().getResource("../deb/data").toURI());
       
        final InputStream ring = getClass().getClassLoader().getResourceAsStream("org/vafer/gpg/secring.gpg");

        DataProducer[] data = new DataProducer[] {
            new DataProducerArchive(archive1, null, null, null),
            new DataProducerArchive(archive2, null, null, null),
            new DataProducerArchive(archive3, null, null, null),
            new DataProducerDirectory(directory, null, new String[] { "**/.svn/**" }, null),
            new DataProducerLink("/link/path-element.ext", "/link/target-element.ext", true, null, null, null)
        };

        int digest = PGPUtil.SHA1;
        PGPSigner signer = new PGPSigner(ring, "2E074D8F", "test");
        PGPSignatureGenerator signatureGenerator = new PGPSignatureGenerator(new BcPGPContentSignerBuilder(signer.getSecretKey().getPublicKey().getAlgorithm(), digest));
        signatureGenerator.init(PGPSignature.BINARY_DOCUMENT, signer.getPrivateKey());
       
        for(int i = 0; i <=1; i++){
          File deb = File.createTempFile("jdeb", ".deb");
 
          DebMaker maker = new DebMaker(new NullConsole(), Arrays.asList(data), null);
          maker.setControl(new File(getClass().getResource("../deb/control").toURI()));
          maker.setDeb(deb);
         
          if(i==0)
            maker.setSignMethod("debsig-verify");
          else
            maker.setSignMethod("dpkg-sig");
         
          BinaryPackageControlFile packageControlFile = maker.createSignedDeb(Compression.GZIP, signatureGenerator, signer);
         
          assertTrue(packageControlFile.isValid());
 
          final Map<String, TarArchiveEntry> filesInDeb = new HashMap<String, TarArchiveEntry>();
         
          ArchiveWalker.walkData(deb, new ArchiveVisitor<TarArchiveEntry>() {
              public void visit(TarArchiveEntry entry, byte[] content) throws IOException {
                  filesInDeb.put(entry.getName(), entry);
              }
          }, Compression.GZIP);
         
          assertTrue("_gpgorigin wasn't found in the package", ArchiveWalker.arArchiveContains(deb, "_gpgorigin"));
          assertTrue("debian-binary wasn't found in the package", ArchiveWalker.arArchiveContains(deb, "debian-binary"));
          assertTrue("control.tar.gz wasn't found in the package", ArchiveWalker.arArchiveContains(deb, "control.tar.gz"));
          assertTrue("testfile wasn't found in the package", filesInDeb.containsKey("./test/testfile"));
          assertTrue("testfile2 wasn't found in the package", filesInDeb.containsKey("./test/testfile2"));
          assertTrue("testfile3 wasn't found in the package", filesInDeb.containsKey("./test/testfile3"));
          assertTrue("testfile4 wasn't found in the package", filesInDeb.containsKey("./test/testfile4"));
          assertTrue("/link/path-element.ext wasn't found in the package", filesInDeb.containsKey("./link/path-element.ext"));
          assertEquals("/link/path-element.ext has wrong link target", "/link/target-element.ext", filesInDeb.get("./link/path-element.ext").getLinkName());
         
          if(i==0){
            FileUtils.copyFile(deb, new File("./target/test_debsig-verify.deb"));
          }else{
            FileUtils.copyFile(deb, new File("./target/test_dpkg-sig.deb"));
          }
         
          assertTrue("Cannot delete the file " + deb, deb.delete());
        }
    }
}
TOP

Related Classes of org.vafer.jdeb.signing.DebMakerTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.