ctf: Add test for 8-byte integer sign extension bug
authorAlexandre Montplaisir <alexmonthy@efficios.com>
Sat, 9 Apr 2016 21:33:27 +0000 (17:33 -0400)
committerAlexandre Montplaisir <alexmonthy@efficios.com>
Fri, 20 May 2016 20:42:56 +0000 (16:42 -0400)
The added test highlights bug 491382.

Change-Id: I1e9c1f458ef64145e4f4a6dc9d9b6c0521b1065d
Signed-off-by: Alexandre Montplaisir <alexmonthy@efficios.com>
Reviewed-on: https://git.eclipse.org/r/70312
Reviewed-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfEventFieldSignExtensionTest.java [new file with mode: 0644]

diff --git a/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfEventFieldSignExtensionTest.java b/ctf/org.eclipse.tracecompass.tmf.ctf.core.tests/src/org/eclipse/tracecompass/tmf/ctf/core/tests/event/CtfTmfEventFieldSignExtensionTest.java
new file mode 100644 (file)
index 0000000..b1b7d23
--- /dev/null
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EfficiOS Inc., Alexandre Montplaisir
+ *
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.tracecompass.tmf.ctf.core.tests.event;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.util.stream.Collectors;
+import java.util.stream.LongStream;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.tracecompass.internal.tmf.ctf.core.trace.iterator.CtfIterator;
+import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
+import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
+import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent;
+import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
+import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests making sure sign extension sign extension of field values works
+ * correctly.
+ *
+ * See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=491382
+ *
+ * @author Alexandre Montplaisir
+ */
+public class CtfTmfEventFieldSignExtensionTest {
+
+    private static final @NonNull CtfTestTrace DEBUG_INFO_TRACE = CtfTestTrace.DEBUG_INFO3;
+
+    private CtfTmfTrace trace;
+
+    /**
+     * Test setup
+     */
+    @Before
+    public void setUp() {
+        trace = CtfTmfTestTraceUtils.getTrace(DEBUG_INFO_TRACE);
+    }
+
+    /**
+     * Test teardown
+     */
+    @After
+    public void teardown() {
+        if (trace != null) {
+            trace.dispose();
+        }
+    }
+
+    /**
+     * Test that signed 8-byte integers are printed correctly.
+     */
+    @Test
+    public void testUnsignedByte() {
+        /*
+         * Third event of the trace is printed like this by Babeltrace:
+         *
+         * [16:25:03.003427176] (+0.000001578) sonoshee lttng_ust_statedump:build_id:
+         *      { cpu_id = 0 }, { ip = 0x7F3BBEDDDE1E, vpid = 3520 },
+         *      { baddr = 0x400000, _build_id_length = 20, build_id = [ [0] = 0x1, [1] = 0xC6, [2] = 0x5, [3] = 0xBC, [4] = 0xF3, [5] = 0x8D, [6] = 0x6, [7] = 0x8D, [8] = 0x77, [9] = 0xA6, [10] = 0xE0, [11] = 0xA0, [12] = 0x2C, [13] = 0xED, [14] = 0xE6, [15] = 0xA5, [16] = 0xC, [17] = 0x57, [18] = 0x50, [19] = 0xB5 ] }
+         */
+        long[] expectedValues = new long[] {
+                0x1,
+                0xC6,
+                0x5,
+                0xBC,
+                0xF3,
+                0x8D,
+                0x6,
+                0x8D,
+                0x77,
+                0xA6,
+                0xE0,
+                0xA0,
+                0x2C,
+                0xED,
+                0xE6,
+                0xA5,
+                0xC,
+                0x57,
+                0x50,
+                0xB5
+        };
+
+        String expectedToString = LongStream.of(expectedValues)
+                .mapToObj(i -> "0x" + Long.toHexString(i))
+                .collect(Collectors.joining(", ", "build_id=[", "]"));
+
+        try (CtfIterator iter = (CtfIterator) trace.createIterator();) {
+            /* Go to third event */
+            iter.advance();
+            iter.advance();
+
+            /* Retrieve the event's field called "build_id" */
+            CtfTmfEvent event = iter.getCurrentEvent();
+            ITmfEventField field = event.getContent().getField("build_id");
+            long[] values = (long[]) field.getValue();
+
+            assertArrayEquals(expectedValues, values);
+            assertEquals(expectedToString, field.toString());
+        }
+    }
+}
This page took 0.028194 seconds and 5 git commands to generate.