Commit | Line | Data |
---|---|---|
0f231de2 MK |
1 | /******************************************************************************* |
2 | * Copyright (c) 2014 Ericsson | |
3 | * All rights reserved. This program and the accompanying materials | |
4 | * are made available under the terms of the Eclipse Public License v1.0 | |
5 | * which accompanies this distribution, and is available at | |
6 | * http://www.eclipse.org/legal/epl-v10.html | |
7 | * | |
8 | * Contributors: | |
9 | * Matthew Khouzam - Initial API and implementation | |
10 | *******************************************************************************/ | |
11 | ||
12 | package org.eclipse.linuxtools.ctf.core.tests.event; | |
13 | ||
14 | import static org.junit.Assert.assertTrue; | |
15 | import static org.junit.Assert.assertEquals; | |
16 | import static org.junit.Assert.assertNotNull; | |
17 | import static org.junit.Assert.assertNull; | |
18 | ||
19 | import java.nio.ByteOrder; | |
20 | import java.util.ArrayList; | |
21 | import java.util.Arrays; | |
22 | import java.util.Collections; | |
23 | import java.util.List; | |
24 | ||
25 | import org.eclipse.linuxtools.ctf.core.event.EventDefinition; | |
26 | import org.eclipse.linuxtools.ctf.core.event.scope.LexicalScope; | |
27 | import org.eclipse.linuxtools.ctf.core.event.types.Definition; | |
28 | import org.eclipse.linuxtools.ctf.core.event.types.Encoding; | |
29 | import org.eclipse.linuxtools.ctf.core.event.types.IntegerDeclaration; | |
30 | import org.eclipse.linuxtools.ctf.core.event.types.IntegerDefinition; | |
31 | import org.eclipse.linuxtools.ctf.core.event.types.StructDeclaration; | |
32 | import org.eclipse.linuxtools.ctf.core.event.types.StructDefinition; | |
33 | import org.eclipse.linuxtools.internal.ctf.core.event.EventDeclaration; | |
34 | import org.junit.Before; | |
35 | import org.junit.Test; | |
36 | ||
37 | /** | |
38 | * Test the event definition | |
39 | * | |
40 | * @author Matthew Khouzam | |
41 | * | |
42 | */ | |
43 | public class CTFEventDefinitionTest { | |
44 | List<EventDefinition> fixture; | |
45 | ||
46 | /** | |
47 | * Making a power set of configurations to test the event definition | |
48 | */ | |
49 | @Before | |
50 | public void init() { | |
51 | fixture = new ArrayList<>(); | |
52 | IntegerDeclaration pidDec = IntegerDeclaration.createDeclaration(5, false, 10, ByteOrder.LITTLE_ENDIAN, Encoding.NONE, "", 8); | |
53 | IntegerDeclaration ctxDec = IntegerDeclaration.createDeclaration(16, false, 10, ByteOrder.LITTLE_ENDIAN, Encoding.NONE, "", 8); | |
54 | IntegerDefinition pid = new IntegerDefinition(pidDec, null, "pid", 3); | |
55 | IntegerDefinition pod = new IntegerDefinition(pidDec, null, "pod", 3); | |
56 | IntegerDefinition ctx = new IntegerDefinition(pidDec, null, "ctx", 3); | |
57 | ||
58 | StructDeclaration streamContextDec = new StructDeclaration(8); | |
59 | streamContextDec.addField("pid", pidDec); | |
60 | streamContextDec.addField("ctx", ctxDec); | |
61 | StructDeclaration eventContextDec = new StructDeclaration(8); | |
62 | streamContextDec.addField("pod", pidDec); | |
63 | streamContextDec.addField("ctx", pidDec); | |
64 | StructDeclaration fDec = new StructDeclaration(8); | |
65 | EventDeclaration eventDeclaration = new EventDeclaration(); | |
66 | ||
67 | fDec.addField("pid", pidDec); | |
68 | fDec.addField("ctx", ctxDec); | |
69 | fDec.addField("pod", pidDec); | |
70 | ||
71 | List<String> sFieldNames = Arrays.asList("pid", "ctx"); | |
72 | List<String> eFieldNames = Arrays.asList("pod", "ctx"); | |
73 | List<String> fieldNames = Arrays.asList("pid", "ctx", "pod"); | |
74 | ||
75 | Definition[] sDefs = { pid, ctx }; | |
76 | Definition[] eDefs = { pod, ctx }; | |
77 | Definition[] fDefs = { pid, ctx, pod }; | |
78 | ||
79 | StructDeclaration pContextDec = new StructDeclaration(8); | |
80 | ||
81 | StructDefinition sContext = new StructDefinition(streamContextDec, null, LexicalScope.STREAM_PACKET_CONTEXT.toString(), sFieldNames, sDefs); | |
82 | StructDefinition eContext = new StructDefinition(eventContextDec, null, LexicalScope.STREAM_EVENT_CONTEXT.toString(), eFieldNames, eDefs); | |
83 | StructDefinition pContext = new StructDefinition(pContextDec, null, LexicalScope.FIELDS.toString(), Collections.EMPTY_LIST, new Definition[0]); | |
84 | StructDefinition fields = new StructDefinition(fDec, null, LexicalScope.FIELDS.toString(), fieldNames, fDefs); | |
85 | ||
86 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, null, null, null)); | |
87 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, null, null, fields)); | |
88 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, null, pContext, null)); | |
89 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, null, pContext, fields)); | |
90 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, eContext, null, null)); | |
91 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, eContext, null, fields)); | |
92 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, eContext, pContext, null)); | |
93 | fixture.add(new EventDefinition(eventDeclaration, null, 100, null, eContext, pContext, fields)); | |
94 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, null, null, null)); | |
95 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, null, null, fields)); | |
96 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, null, pContext, null)); | |
97 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, null, pContext, fields)); | |
98 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, eContext, null, null)); | |
99 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, eContext, null, fields)); | |
100 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, eContext, pContext, null)); | |
101 | fixture.add(new EventDefinition(eventDeclaration, null, 100, sContext, eContext, pContext, fields)); | |
102 | } | |
103 | ||
104 | /** | |
105 | * Test all the events | |
106 | */ | |
107 | @Test | |
108 | public void testEvents() { | |
109 | int i = 0; | |
110 | for (EventDefinition ed : fixture) { | |
111 | test(i, ed); | |
112 | i++; | |
113 | } | |
114 | } | |
115 | ||
116 | private static void test(int rank, EventDefinition ed) { | |
117 | String title = "event #" + rank; | |
118 | assertEquals(title, 100L, ed.getTimestamp()); | |
119 | StructDefinition context = ed.getContext(); | |
120 | if (rank >= 4) { | |
121 | assertNotNull(title, context); | |
122 | if (rank >= 12) { | |
123 | assertEquals(title, 3, context.getFieldNames().size()); | |
124 | } else { | |
125 | assertEquals(title, 2, context.getFieldNames().size()); | |
126 | } | |
127 | ||
128 | } else { | |
129 | assertNull(title, context); | |
130 | } | |
131 | if (((rank / 4) % 2) == 1) { | |
132 | assertNotNull(title, ed.getEventContext()); | |
133 | }else{ | |
134 | assertNull(title, ed.getEventContext()); | |
135 | } | |
136 | if (rank % 2 == 1) { | |
137 | assertNotNull(title, ed.getFields()); | |
138 | assertEquals(title, 3, ed.getFields().getFieldNames().size()); | |
139 | } else { | |
140 | assertNull(title, ed.getFields()); | |
141 | } | |
cfff793c | 142 | assertTrue(title, ed.toString().startsWith("Event type: null" + System.getProperty("line.separator") + "Timestamp: 100")); |
0f231de2 MK |
143 | } |
144 | ||
145 | } |