Java tutorial
/******************************************************************************* * Copyright (c) 2015 IBH SYSTEMS GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBH SYSTEMS GmbH - initial API and implementation *******************************************************************************/ package de.dentrassi.rpm.tests; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Map; import java.util.TreeMap; import java.util.function.Function; import org.apache.commons.compress.archivers.cpio.CpioArchiveEntry; import org.apache.commons.compress.archivers.cpio.CpioArchiveInputStream; import org.junit.Assert; import org.junit.Test; import de.dentrassi.rpm.RpmBaseTag; import de.dentrassi.rpm.RpmDependencyFlags; import de.dentrassi.rpm.RpmHeader; import de.dentrassi.rpm.RpmInputStream; import de.dentrassi.rpm.RpmLead; import de.dentrassi.rpm.RpmSignatureTag; import de.dentrassi.rpm.RpmTag; import de.dentrassi.rpm.RpmTagValue; import de.dentrassi.rpm.Rpms; public class InputStreamTest { private void dumpAll(final RpmInputStream in) throws IOException { final RpmLead lead = in.getLead(); System.out.format("Version: %s.%s%n", lead.getMajor(), lead.getMinor()); System.out.format("Name: %s%n", lead.getName()); System.out.format("Signature Version: %s%n", lead.getSignatureVersion()); dumpHeader("Signature", in.getSignatureHeader(), tag -> RpmSignatureTag.find(tag)); dumpHeader("Payload", in.getPayloadHeader(), tag -> RpmTag.find(tag)); @SuppressWarnings("resource") final CpioArchiveInputStream cpio = in.getCpioStream(); CpioArchiveEntry entry; while ((entry = cpio.getNextCPIOEntry()) != null) { dumpEntry(entry); } { final String[] names = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.REQUIRE_NAME)) .asStringArray().orElse(null); final String[] versions = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.REQUIRE_VERSION)) .asStringArray().orElse(null); final Long[] flags = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.REQUIRE_FLAGS)).asLongArray() .orElse(null); dumpDeps("Require", names, versions, flags); } { final String[] names = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.PROVIDE_NAME)) .asStringArray().orElse(null); final String[] versions = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.PROVIDE_VERSION)) .asStringArray().orElse(null); final Long[] flags = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.PROVIDE_FLAGS)).asLongArray() .orElse(null); dumpDeps("Provide", names, versions, flags); } { final String[] names = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.CONFLICT_NAME)) .asStringArray().orElse(null); final String[] versions = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.CONFLICT_VERSION)) .asStringArray().orElse(null); final Long[] flags = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.CONFLICT_FLAGS)).asLongArray() .orElse(null); dumpDeps("Conflict", names, versions, flags); } { final String[] names = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.OBSOLETE_NAME)) .asStringArray().orElse(null); final String[] versions = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.OBSOLETE_VERSION)) .asStringArray().orElse(null); final Long[] flags = new RpmTagValue(in.getPayloadHeader().getTag(RpmTag.OBSOLETE_FLAGS)).asLongArray() .orElse(null); dumpDeps("Obsolete", names, versions, flags); } } @Test public void test1() throws IOException { try (final RpmInputStream in = new RpmInputStream(new BufferedInputStream( new FileInputStream(new File("data/org.eclipse.scada-0.2.1-1.noarch.rpm"))))) { dumpAll(in); Assert.assertEquals(280, in.getPayloadHeader().getStart()); Assert.assertEquals(3501, in.getPayloadHeader().getLength()); Assert.assertEquals("cpio", in.getPayloadHeader().getTag(RpmTag.PAYLOAD_FORMAT)); Assert.assertEquals("lzma", in.getPayloadHeader().getTag(RpmTag.PAYLOAD_CODING)); Assert.assertEquals("org.eclipse.scada", in.getPayloadHeader().getTag(RpmTag.NAME)); Assert.assertEquals("0.2.1", in.getPayloadHeader().getTag(RpmTag.VERSION)); Assert.assertEquals("1", in.getPayloadHeader().getTag(RpmTag.RELEASE)); Assert.assertEquals("noarch", in.getPayloadHeader().getTag(RpmTag.ARCH)); Assert.assertEquals("linux", in.getPayloadHeader().getTag(RpmTag.OS)); Assert.assertEquals("EPL", in.getPayloadHeader().getTag(RpmTag.LICENSE)); Assert.assertArrayEquals(new String[] { // "/etc/", // "/etc/eclipsescada/", // "/etc/profile.d/", // "/usr/bin/", // "/usr/", // "/usr/share/", // "/usr/share/eclipsescada/", // "/usr/share/eclipsescada/sql/", // "/var/log/", // "/var/run/", // }, (String[]) in.getPayloadHeader().getTag(RpmTag.DIRNAMES)); } } @Test public void test2() throws IOException { try (final RpmInputStream in = new RpmInputStream(new BufferedInputStream( new FileInputStream(new File("data/org.eclipse.scada-centos6-0.2.1-1.noarch.rpm"))))) { dumpAll(in); } } private void dumpDeps(final String string, final String[] names, final String[] versions, final Long[] flags) { if (names == null) { return; } for (int i = 0; i < names.length; i++) { System.out.format("%s: %s - %s - %s %s%n", string, names[i], versions[i], flags[i], RpmDependencyFlags.parse(flags[i])); } } private void dumpHeader(final String string, final RpmHeader<? extends RpmBaseTag> header, final Function<Integer, Object> func) { System.out.println(string); System.out.println("================================="); for (final Map.Entry<Integer, Object> entry : new TreeMap<>(header.getRawTags()).entrySet()) { Object tag = func.apply(entry.getKey()); if (tag == null) { tag = entry.getKey(); } System.out.format("%20s - %s%n", tag, Rpms.dumpValue(entry.getValue())); } } private void dumpEntry(final CpioArchiveEntry entry) { System.out.format("-----------------------------------%n"); System.out.format(" %s%n", entry.getName()); System.out.format(" Size: %s%n", entry.getSize()); } }