package org.araqne.log.api; import static org.junit.Assert.assertEquals; import java.io.EOFException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.TimeZone; import org.junit.Test; public class WtmpEntryParserTest { @Test public void testEpoch() { int seconds = 1403239164; Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 1970); c.set(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); c.add(Calendar.SECOND, seconds); c.add(Calendar.MILLISECOND, TimeZone.getDefault().getRawOffset()); assertEquals(c.getTime(), new Date(seconds * 1000L)); } @Test public void testSolaris10Parser() { WtmpEntry e; List<WtmpEntry> l = parse(new WtmpEntryParserSolaris(), "wtmpx_solaris10"); e = l.get(0); assertEquals("UserProcess", e.getType().toString()); assertEquals("192.168.10.34", e.getHost()); assertEquals(7801, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("pts/2", e.getDeviceName()); assertEquals("t200", e.getInitTabId()); e = l.get(1); assertEquals("UserProcess", e.getType().toString()); assertEquals("192.168.10.34", e.getHost()); assertEquals(7814, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("ftp7814", e.getDeviceName()); assertEquals("ftp", e.getInitTabId()); } @Test public void testAix5Parser() { WtmpEntry e; List<WtmpEntry> l = parse(new WtmpEntryParserAix(), "wtmp_aix53"); e = l.get(0); assertEquals("UserProcess", e.getType().toString()); assertEquals("192.168.100.247", e.getHost()); assertEquals(1380588, e.getPid()); assertEquals(0, e.getSession()); assertEquals("bjkim", e.getUser()); assertEquals("pts/0", e.getInitTabId()); assertEquals("pts/0", e.getDeviceName()); e = l.get(1); assertEquals("DeadProcess", e.getType().toString()); assertEquals("192.168.100.247", e.getHost()); assertEquals(294944, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("ftp294944", e.getDeviceName()); assertEquals("ftp294944", e.getInitTabId()); } @Test public void testAix6Parser() { WtmpEntry e; List<WtmpEntry> l = parse(new WtmpEntryParserAix(), "wtmp_aix61"); e = l.get(0); assertEquals("UserProcess", e.getType().toString()); assertEquals("192.168.100.247", e.getHost()); assertEquals(1454278, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("pts/0", e.getDeviceName()); assertEquals("pts/0", e.getInitTabId()); e = l.get(1); assertEquals("UserProcess", e.getType().toString()); assertEquals("192.168.100.247", e.getHost()); assertEquals(417800, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("ftp417800", e.getDeviceName()); assertEquals("ftp417800", e.getInitTabId()); } @Test public void testHpUx1123Parser() { WtmpEntry e; List<WtmpEntry> l = parse(new WtmpEntryParserHpUx(), "wtmps_hp23"); e = l.get(0); assertEquals("UserProcess", e.getType().toString()); assertEquals("192.168.1.16", e.getHost()); assertEquals(2486, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("ftpd2486", e.getDeviceName()); assertEquals("", e.getInitTabId()); e = l.get(1); assertEquals("LoginProcess", e.getType().toString()); assertEquals("192.168.1.20", e.getHost()); assertEquals(2854, e.getPid()); assertEquals(0, e.getSession()); assertEquals("LOGIN", e.getUser()); assertEquals("pts/tb", e.getDeviceName()); assertEquals("tb", e.getInitTabId()); } @Test public void testHpUx1131Parser() { WtmpEntry e; List<WtmpEntry> l = parse(new WtmpEntryParserHpUx(), "wtmps_hp31"); e = l.get(0); assertEquals("DeadProcess", e.getType().toString()); assertEquals("", e.getHost()); assertEquals(13430, e.getPid()); assertEquals(0, e.getSession()); assertEquals("dunhill", e.getUser()); assertEquals("pts/tc", e.getDeviceName()); assertEquals("tc", e.getInitTabId()); e = l.get(1); assertEquals("DeadProcess", e.getType().toString()); assertEquals("", e.getHost()); assertEquals(26155, e.getPid()); assertEquals(0, e.getSession()); assertEquals("root", e.getUser()); assertEquals("pts/ta", e.getDeviceName()); assertEquals("ta", e.getInitTabId()); } private List<WtmpEntry> parse(WtmpEntryParser parse, String path) { WtmpEntryParser parser = parse; int blockSize = parser.getBlockSize(); List<WtmpEntry> l = new ArrayList<WtmpEntry>(); String dir = "src/test/resources/"; File wtmpFile = new File(dir + path); RandomAccessFile raf = null; try { if (!wtmpFile.exists()) throw new FileNotFoundException(); if (!wtmpFile.canRead()) throw new SecurityException(); raf = new RandomAccessFile(dir + path, "r"); raf.seek(0); byte[] block = new byte[blockSize]; while (true) { raf.readFully(block); l.add(parser.parseEntry(ByteBuffer.wrap(block))); } } catch (EOFException e) { }catch (Throwable t) { t.printStackTrace(); } finally { if (raf != null) { try { raf.close(); } catch (IOException e) { } } } return l; } }