/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * See LICENSE.txt included in this distribution for the specific * language governing permissions and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at LICENSE.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ package org.opensolaris.opengrok.history; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; /** * Test the SCCSget class * @author Trond Norbye */ public class SCCSgetTest { private static boolean haveSccs = true; private File sccsfile; private File sccsdir; public SCCSgetTest() { } @BeforeClass public static void setUpClass() throws Exception { // Check to see if we have sccs.. Process p = null; try { p = Runtime.getRuntime().exec("sccs help help"); p.waitFor(); haveSccs = (p.exitValue() == 0); } catch (Exception e) { haveSccs = false; } finally { try { if (p != null) { p.destroy(); } } catch (Exception e) { } } try { p = Runtime.getRuntime().exec("sccs --version"); p.waitFor(); haveSccs = (p.exitValue() == 0); } catch (Exception e) { haveSccs = false; } finally { try { if (p != null) { p.destroy(); } } catch (Exception e) { } } } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() throws IOException { if (!haveSccs) { return; } try { sccsdir = File.createTempFile("s.test", "sccs"); sccsdir.delete(); if (!sccsdir.mkdirs()) { fail("Failed to set up the test-directory"); } sccsfile = new File(sccsdir, "s.note.txt"); InputStream in = getClass().getResourceAsStream("s.note.txt"); FileOutputStream out = new FileOutputStream(sccsfile); byte[] buffer = new byte[8192]; int nr; while ((nr = in.read(buffer, 0, buffer.length)) != -1) { out.write(buffer, 0, nr); } out.flush(); in.close(); out.close(); } catch (IOException ex) { if (sccsfile != null) { sccsfile.delete(); sccsdir.delete(); } throw ex; } } @After public void tearDown() { if (sccsfile != null) { sccsfile.delete(); } if (sccsdir != null) { sccsdir.delete(); } } private String readInput(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[32 * 1024]; int len; while ((len = in.read(buffer)) != -1) { if (len > 0) { out.write(buffer, 0, len); } } return out.toString(); } /** * Test of getRevision method, of class SCCSget. */ @Test public void getRevision() throws Exception { if (!haveSccs) { System.out.println("sccs not available. Skipping test"); return; } ZipInputStream zstream = new ZipInputStream(getClass().getResourceAsStream("sccs-revisions.zip")); ZipEntry entry; while ((entry = zstream.getNextEntry()) != null) { String expected = readInput(zstream); InputStream sccs = SCCSget.getRevision("sccs",sccsfile, entry.getName()); String got = readInput(sccs); sccs.close(); zstream.closeEntry(); assertEquals(expected, got); } zstream.close(); } }