blob: d8bfc000c9dd09b46a039ddb1f0d4750b8d20026 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Ericsson
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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"));
}
}