/******************************************************************************* * Copyright (c) 2014 Ericsson * 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: * Matthew Khouzam - Initial API and implementation *******************************************************************************/ package org.eclipse.tracecompass.ctf.core.tests.event; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.nio.ByteOrder; import java.util.ArrayList; import java.util.List; import org.eclipse.tracecompass.ctf.core.event.IEventDefinition; import org.eclipse.tracecompass.ctf.core.event.scope.ILexicalScope; import org.eclipse.tracecompass.ctf.core.event.types.Definition; import org.eclipse.tracecompass.ctf.core.event.types.Encoding; import org.eclipse.tracecompass.ctf.core.event.types.ICompositeDefinition; import org.eclipse.tracecompass.ctf.core.event.types.IntegerDeclaration; import org.eclipse.tracecompass.ctf.core.event.types.IntegerDefinition; import org.eclipse.tracecompass.ctf.core.event.types.StructDeclaration; import org.eclipse.tracecompass.ctf.core.event.types.StructDefinition; import org.eclipse.tracecompass.internal.ctf.core.event.EventDeclaration; import org.eclipse.tracecompass.internal.ctf.core.event.EventDefinition; import org.junit.Before; import org.junit.Test; /** * Test the event definition * * @author Matthew Khouzam * */ public class CTFEventDefinitionTest { List<EventDefinition> fixture; /** * Making a power set of configurations to test the event definition */ @Before public void init() { fixture = new ArrayList<>(); IntegerDeclaration pidDec = IntegerDeclaration.createDeclaration(5, false, 10, ByteOrder.LITTLE_ENDIAN, Encoding.NONE, "", 8); IntegerDeclaration ctxDec = IntegerDeclaration.createDeclaration(16, false, 10, ByteOrder.LITTLE_ENDIAN, Encoding.NONE, "", 8); IntegerDefinition pid = new IntegerDefinition(pidDec, null, "pid", 3); IntegerDefinition pod = new IntegerDefinition(pidDec, null, "pod", 3); IntegerDefinition ctx = new IntegerDefinition(pidDec, null, "ctx", 3); StructDeclaration streamContextDec = new StructDeclaration(8); streamContextDec.addField("pid", pidDec); streamContextDec.addField("ctx", ctxDec); StructDeclaration eventContextDec = new StructDeclaration(8); eventContextDec.addField("pod", pidDec); eventContextDec.addField("ctx", pidDec); StructDeclaration fDec = new StructDeclaration(8); EventDeclaration eventDeclaration = new EventDeclaration(); fDec.addField("pid", pidDec); fDec.addField("ctx", ctxDec); fDec.addField("pod", pidDec); Definition[] sDefs = { pid, ctx }; Definition[] eDefs = { pod, ctx }; Definition[] fDefs = { pid, ctx, pod }; StructDeclaration pContextDec = new StructDeclaration(8); StructDefinition sContext = new StructDefinition(streamContextDec, null, ILexicalScope.STREAM_PACKET_CONTEXT.getPath(), sDefs); StructDefinition eContext = new StructDefinition(eventContextDec, null, ILexicalScope.STREAM_EVENT_CONTEXT.getPath(), eDefs); StructDefinition pContext = new StructDefinition(pContextDec, null, ILexicalScope.FIELDS.getPath(), new Definition[0]); StructDefinition fields = new StructDefinition(fDec, null, ILexicalScope.FIELDS.getPath(), fDefs); int cpu = IEventDefinition.UNKNOWN_CPU; fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, null, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, null, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, pContext, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, null, pContext, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, null, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, null, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, pContext, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, null, eContext, pContext, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, null, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, null, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, pContext, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, null, pContext, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, null, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, null, fields, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, pContext, null, null)); fixture.add(new EventDefinition(eventDeclaration, cpu, 100, null, sContext, eContext, pContext, fields, null)); } /** * Test all the events */ @Test public void testEvents() { int i = 0; for (EventDefinition ed : fixture) { test(i, ed); i++; } } private static void test(int rank, EventDefinition ed) { String title = "event #" + rank; assertEquals(title, 100L, ed.getTimestamp()); ICompositeDefinition context = ed.getContext(); if (rank >= 4) { assertNotNull(title, context); if (rank >= 12) { assertEquals(title, 3, context.getFieldNames().size()); } else { assertEquals(title, 2, context.getFieldNames().size()); } } else { assertNull(title, context); } if (((rank / 4) % 2) == 1) { assertNotNull(title, ed.getEventContext()); }else{ assertNull(title, ed.getEventContext()); } if (rank % 2 == 1) { assertNotNull(title, ed.getFields()); assertEquals(title, 3, ed.getFields().getFieldNames().size()); } else { assertNull(title, ed.getFields()); } assertTrue(title, ed.toString().startsWith("Event type: null" + System.getProperty("line.separator") + "Timestamp: 100")); } }