/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.proto.dom; import com.eas.proto.CoreTags; import com.eas.proto.ProtoReader; import com.eas.proto.ProtoWriter; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.util.Iterator; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import static org.junit.Assert.*; import org.junit.*; /** * * @author pk */ public class ProtoDOMBuilderTest { private static final int TAG_SQL_QUERY = 1; private static final int TAG_DATABASE_ID = 2; private static final int TAG_SQL_PARAMETER = 3; private static final int TAG_SQL_PARAMETER_TYPE = 4; private static final int TAG_SQL_PARAMETER_VALUE = 5; public ProtoDOMBuilderTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } /** * Test of buildDOM method, of class ProtoDOMBuilder. * @throws Exception */ @Test public void testBuildDOM() throws Exception { System.out.println("buildDOM"); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); ProtoWriter writer = new ProtoWriter(outStream); writer.put(TAG_SQL_QUERY, "select * from dual.dummy"); writer.put(TAG_DATABASE_ID, 28348934723984L); for (int i = 0; i < 3; i++) { writer.put(TAG_SQL_PARAMETER); ByteArrayOutputStream subStream = new ByteArrayOutputStream(); ProtoWriter subWriter = new ProtoWriter(subStream); subWriter.put(TAG_SQL_PARAMETER_TYPE, i); subWriter.put(TAG_SQL_PARAMETER_VALUE, new BigDecimal(i)); subWriter.put(100, 65370); subWriter.flush(); writer.put(CoreTags.TAG_STREAM, subStream.toByteArray()); } BigDecimal entityId = new BigDecimal(124349290914389600L); writer.put(101, entityId); writer.put(102, entityId); writer.flush(); ProtoNode result = ProtoDOMBuilder.buildDOM(outStream.toByteArray()); assertEquals("select * from dual.dummy", result.getChild(TAG_SQL_QUERY).getString()); assertEquals(28348934723984L, result.getChild(TAG_DATABASE_ID).getLong()); assertEquals(entityId, result.getChild(101).getBigDecimal()); assertEquals(BigDecimal.valueOf(entityId.longValue()), result.getChild(102).getBigDecimal()); Iterator<ProtoNode> iterator = result.iterator(); int paramCount = 0; while (iterator.hasNext()) { ProtoNode node = iterator.next(); if (node.getNodeTag() == TAG_SQL_PARAMETER) { assertEquals(paramCount, node.getChild(TAG_SQL_PARAMETER_TYPE).getInt()); BigDecimal bd = node.getChild(TAG_SQL_PARAMETER_VALUE).getBigDecimal(); assertEquals(new BigDecimal(paramCount), bd); assertEquals(65370, node.getChild(100).getInt()); paramCount++; } } assertEquals(3, paramCount); } @Test public void testEmptySubStream() throws Exception { ByteArrayOutputStream subOut = new ByteArrayOutputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream(); ProtoWriter pw = new ProtoWriter(out); pw.put(TEST_TAG_1); pw.put(CoreTags.TAG_STREAM, subOut); pw.put(TEST_TAG_2, "test"); pw.flush(); ProtoReader pr = new ProtoReader(new ByteArrayInputStream(out.toByteArray())); assertEquals(TEST_TAG_1, pr.getNextTag()); byte[] subStreamData = pr.getSubStreamData(); assertTrue(subStreamData != null); assertEquals(0, subStreamData.length); assertEquals(TEST_TAG_2, pr.getNextTag()); String readTestData = pr.getString(); assertEquals("test", readTestData); ProtoNode node = ProtoDOMBuilder.buildDOM(out.toByteArray()); } private static final int TEST_TAG_1 = 10; private static final int TEST_TAG_11 = 11; private static final int TEST_TAG_2 = 20; @Test public void testCompressedSubStream() throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); ProtoWriter pw = new ProtoWriter(out); pw.put(TEST_TAG_1, "sample"); ByteArrayOutputStream subOut = new ByteArrayOutputStream(); ProtoWriter subPw = new ProtoWriter(subOut); subPw.put(TEST_TAG_11, "subSample"); ByteArrayOutputStream zSubOut = new ByteArrayOutputStream(); try (ZipOutputStream zStream = new ZipOutputStream(zSubOut)) { ZipEntry ze = new ZipEntry("testData"); zStream.putNextEntry(ze); zStream.write(subOut.toByteArray()); zStream.flush(); } pw.put(TEST_TAG_2); pw.put(CoreTags.TAG_COMPRESSED_STREAM, zSubOut.toByteArray()); byte written[] = out.toByteArray(); ProtoNode readDom = ProtoDOMBuilder.buildDOM(written); assertTrue(readDom.containsChild(TEST_TAG_1)); assertTrue(readDom.containsChild(TEST_TAG_2)); assertEquals("sample", readDom.getChild(TEST_TAG_1).getString()); ProtoNode subNode = readDom.getChild(TEST_TAG_2); assertTrue(subNode.containsChild(TEST_TAG_11)); assertEquals("subSample", subNode.getChild(TEST_TAG_11).getString()); } }